diff --git a/dtool/src/dtoolutil/iostream_ext.cxx b/dtool/src/dtoolutil/iostream_ext.cxx index 352927b0d6..be22f9d548 100644 --- a/dtool/src/dtoolutil/iostream_ext.cxx +++ b/dtool/src/dtoolutil/iostream_ext.cxx @@ -283,19 +283,18 @@ write(PyObject *b) { */ void Extension:: writelines(PyObject *lines) { - PyObject *seq = PySequence_Fast(lines, "writelines() expects a sequence"); - if (seq == nullptr) { + PyObject *iter = PyObject_GetIter(lines); + if (iter == nullptr) { return; } - PyObject **items = PySequence_Fast_ITEMS(seq); - Py_ssize_t len = PySequence_Fast_GET_SIZE(seq); - - for (Py_ssize_t i = 0; i < len; ++i) { - write(items[i]); + PyObject *next = PyIter_Next(iter); + while (next != nullptr) { + write(next); + Py_DECREF(next); + next = PyIter_Next(iter); } - - Py_DECREF(seq); + Py_DECREF(iter); } #endif // HAVE_PYTHON