[pypy-commit] pypy default: fix dtype from commastring

bdkearns noreply at buildbot.pypy.org
Sun Feb 23 20:02:32 CET 2014


Author: Brian Kearns <bdkearns at gmail.com>
Branch: 
Changeset: r69287:cf3918b33b35
Date: 2014-02-23 03:26 -0500
http://bitbucket.org/pypy/pypy/changeset/cf3918b33b35/

Log:	fix dtype from commastring

diff --git a/pypy/module/micronumpy/interp_dtype.py b/pypy/module/micronumpy/interp_dtype.py
--- a/pypy/module/micronumpy/interp_dtype.py
+++ b/pypy/module/micronumpy/interp_dtype.py
@@ -357,26 +357,31 @@
                        self.w_box_type, endian, size=self.size)
 
 
-def dtype_from_list(space, w_lst):
+ at specialize.arg(2)
+def dtype_from_list(space, w_lst, simple):
     lst_w = space.listview(w_lst)
     fields = {}
     offset = 0
     fieldnames = []
     for i in range(len(lst_w)):
         w_elem = lst_w[i]
-        w_shape = space.newtuple([])
-        if space.len_w(w_elem) == 3:
-            w_fldname, w_flddesc, w_shape = space.fixedview(w_elem)
-            if not base.issequence_w(space, w_shape):
-                w_shape = space.newtuple([w_shape])
+        if simple:
+            subdtype = descr__new__(space, space.gettypefor(W_Dtype), w_elem)
+            fldname = 'f%d' % i
         else:
-            w_fldname, w_flddesc = space.fixedview(w_elem, 2)
-        subdtype = descr__new__(space, space.gettypefor(W_Dtype), w_flddesc, w_shape=w_shape)
-        fldname = space.str_w(w_fldname)
-        if fldname == '':
-            fldname = 'f%d' % i
-        if fldname in fields:
-            raise oefmt(space.w_ValueError, "two fields with the same name")
+            w_shape = space.newtuple([])
+            if space.len_w(w_elem) == 3:
+                w_fldname, w_flddesc, w_shape = space.fixedview(w_elem)
+                if not base.issequence_w(space, w_shape):
+                    w_shape = space.newtuple([w_shape])
+            else:
+                w_fldname, w_flddesc = space.fixedview(w_elem, 2)
+            subdtype = descr__new__(space, space.gettypefor(W_Dtype), w_flddesc, w_shape=w_shape)
+            fldname = space.str_w(w_fldname)
+            if fldname == '':
+                fldname = 'f%d' % i
+            if fldname in fields:
+                raise oefmt(space.w_ValueError, "two fields with the same name")
         assert isinstance(subdtype, W_Dtype)
         fields[fldname] = (offset, subdtype)
         offset += subdtype.get_size()
@@ -403,7 +408,7 @@
         return descr__new__(space, space.gettypefor(W_Dtype),
                             space.getitem(w_lst, space.wrap(0)))
     else:
-        return dtype_from_list(space, w_lst)
+        return dtype_from_list(space, w_lst, True)
 
 
 def descr__new__(space, w_subtype, w_dtype, w_align=None, w_copy=None, w_shape=None):
@@ -446,7 +451,7 @@
             return variable_dtype(space, name)
         raise oefmt(space.w_TypeError, 'data type "%s" not understood', name)
     elif space.isinstance_w(w_dtype, space.w_list):
-        return dtype_from_list(space, w_dtype)
+        return dtype_from_list(space, w_dtype, False)
     elif space.isinstance_w(w_dtype, space.w_tuple):
         w_dtype0 = space.getitem(w_dtype, space.wrap(0))
         w_dtype1 = space.getitem(w_dtype, space.wrap(1))


More information about the pypy-commit mailing list