[Python-checkins] r86354 - python/branches/py3k/Modules/arraymodule.c

victor.stinner python-checkins at python.org
Tue Nov 9 10:38:30 CET 2010


Author: victor.stinner
Date: Tue Nov  9 10:38:30 2010
New Revision: 86354

Log:
Issue #10359: Use Py_UNICODE for the typecode in array

And don't create non constant array, invalid in ISO C.


Modified:
   python/branches/py3k/Modules/arraymodule.c

Modified: python/branches/py3k/Modules/arraymodule.c
==============================================================================
--- python/branches/py3k/Modules/arraymodule.c	(original)
+++ python/branches/py3k/Modules/arraymodule.c	Tue Nov  9 10:38:30 2010
@@ -22,7 +22,7 @@
  * functions aren't visible yet.
  */
 struct arraydescr {
-    int typecode;
+    Py_UNICODE typecode;
     int itemsize;
     PyObject * (*getitem)(struct arrayobject *, Py_ssize_t);
     int (*setitem)(struct arrayobject *, Py_ssize_t, PyObject *);
@@ -1428,7 +1428,7 @@
 static PyObject *
 array_tostring(arrayobject *self, PyObject *unused)
 {
-    if (PyErr_WarnEx(PyExc_DeprecationWarning, 
+    if (PyErr_WarnEx(PyExc_DeprecationWarning,
             "tostring() is deprecated. Use tobytes() instead.", 2) != 0)
         return NULL;
     return array_tobytes(self, unused);
@@ -1680,17 +1680,16 @@
  * NULL is returned to indicate a failure.
  */
 static PyObject *
-make_array(PyTypeObject *arraytype, int typecode, PyObject *items)
+make_array(PyTypeObject *arraytype, Py_UNICODE typecode, PyObject *items)
 {
     PyObject *new_args;
     PyObject *array_obj;
     PyObject *typecode_obj;
-    Py_UNICODE typecode_str[1] = {typecode};
 
     assert(arraytype != NULL);
     assert(items != NULL);
 
-    typecode_obj = PyUnicode_FromUnicode(typecode_str, 1);
+    typecode_obj = PyUnicode_FromUnicode(&typecode, 1);
     if (typecode_obj == NULL)
         return NULL;
 
@@ -1720,14 +1719,17 @@
     PyObject *items;
     PyObject *converted_items;
     PyObject *result;
-    int typecode;
+    int typecode_int;
+    Py_UNICODE typecode;
     enum machine_format_code mformat_code;
     struct arraydescr *descr;
 
     if (!PyArg_ParseTuple(args, "OCiO:array._array_reconstructor",
-                    &arraytype, &typecode, &mformat_code, &items))
+                    &arraytype, &typecode_int, &mformat_code, &items))
         return NULL;
 
+    typecode = (Py_UNICODE)typecode_int;
+
     if (!PyType_Check(arraytype)) {
         PyErr_Format(PyExc_TypeError,
             "first argument must a type object, not %.200s",


More information about the Python-checkins mailing list