[pypy-commit] pypy numpy-record-dtypes: replace nice solution with ugly-but-rpython one.

fijal noreply at buildbot.pypy.org
Tue Feb 7 13:14:01 CET 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: numpy-record-dtypes
Changeset: r52173:fe098533af7b
Date: 2012-02-07 14:13 +0200
http://bitbucket.org/pypy/pypy/changeset/fe098533af7b/

Log:	replace nice solution with ugly-but-rpython one.

diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -817,6 +817,9 @@
         self.s = StringBuilder(child.size * self.itemsize)
         Call1.__init__(self, None, 'tostring', child.shape, dtype, dtype,
                        child)
+        self.res = W_NDimArray(1, [1], dtype, 'C')
+        self.res_casted = rffi.cast(rffi.CArrayPtr(lltype.Char),
+                                    self.res.storage)
 
     def create_sig(self):
         return signature.ToStringSignature(self.calc_dtype,
diff --git a/pypy/module/micronumpy/signature.py b/pypy/module/micronumpy/signature.py
--- a/pypy/module/micronumpy/signature.py
+++ b/pypy/module/micronumpy/signature.py
@@ -326,8 +326,10 @@
         from pypy.module.micronumpy.interp_numarray import ToStringArray
 
         assert isinstance(arr, ToStringArray)
-        arr.s.append(self.dtype.itemtype.pack_str(
-            self.child.eval(frame, arr.values)))
+        arr.res.setitem(0, self.child.eval(frame, arr.values).convert_to(
+            self.dtype))
+        for i in range(arr.itemsize):
+            arr.s.append(arr.res_casted[i])
 
 class BroadcastLeft(Call2):
     def _invent_numbering(self, cache, allnumbers):
diff --git a/pypy/rlib/rstruct/runpack.py b/pypy/rlib/rstruct/runpack.py
--- a/pypy/rlib/rstruct/runpack.py
+++ b/pypy/rlib/rstruct/runpack.py
@@ -4,11 +4,10 @@
 """
 
 import py
-from struct import pack, unpack
+from struct import unpack
 from pypy.rlib.rstruct.formatiterator import FormatIterator
 from pypy.rlib.rstruct.error import StructError
 from pypy.rlib.rstruct.nativefmttable import native_is_bigendian
-from pypy.rpython.extregistry import ExtRegistryEntry
 
 class MasterReader(object):
     def __init__(self, s):


More information about the pypy-commit mailing list