PyObject *str_write;
PyObject *str___dict__;
PyObject *str_iter;
+ PyObject *typecodes;
} array_state;
static array_state *
}
}
Py_XDECREF(it);
- PyErr_SetString(PyExc_ValueError,
- "bad typecode (must be b, B, u, w, h, H, i, I, l, L, q, Q, e, f, d, Zf or Zd)");
+
+ PyObject *sep = PyUnicode_FromString(", ");
+ if (sep == NULL) {
+ return NULL;
+ }
+ PyObject *msg = PyObject_CallMethod(sep, "join", "(O)", state->typecodes);
+ Py_DECREF(sep);
+ if (msg == NULL) {
+ return NULL;
+ }
+ PyErr_Format(PyExc_ValueError, "bad typecode (must be: %S)", msg);
+ Py_DECREF(msg);
return NULL;
}
Py_VISIT(state->ArrayType);
Py_VISIT(state->ArrayIterType);
Py_VISIT(state->array_reconstructor);
+ Py_VISIT(state->typecodes);
return 0;
}
Py_CLEAR(state->str_write);
Py_CLEAR(state->str___dict__);
Py_CLEAR(state->str_iter);
+ Py_CLEAR(state->typecodes);
return 0;
}
if (tuple == NULL) {
return -1;
}
+ state->typecodes = Py_NewRef(tuple);
if (PyModule_Add(m, "typecodes", tuple) < 0) {
return -1;
}