- PyObject *qq, *x, *y, *z = 0;
- char *v = 0, *vv;
-
- if (PyTuple_GET_SIZE(arg) == 1)
- arg = PyTuple_GET_ITEM(arg, 0);
- if (!PySequence_Check(arg)) TYERR("not a sequence");
- n = PySequence_Size(arg); if (n < 0) goto end;
- if (!n) { z = id(me); goto end; }
- x = PySequence_GetItem(arg, 0);
- if (PySequence_Check(x))
- flat = 0;
+ PyObject *qq = 0, *x = 0, *y = 0, *z = 0, *it = 0;
+ char *v = 0;
+
+ if (PyTuple_Size(arg) == 1) arg = PyTuple_GET_ITEM(arg, 0);
+ it = PyObject_GetIter(arg); if (!it) goto end;
+ qq = PyIter_Next(it);
+ if (!qq) {
+ if (!PyErr_Occurred()) z = id(me);
+ else goto end;
+ }
+ flat = !PySequence_Check(qq);
+ if (!PySequence_Check(arg))
+ n = 16;