Author: Ronan Lamy <[email protected]>
Branch: 
Changeset: r77926:aa1b46439de0
Date: 2015-06-06 17:39 +0100
http://bitbucket.org/pypy/pypy/changeset/aa1b46439de0/

Log:    Move implementation of FlexibleType.to_str() to W_FlexibleBox

diff --git a/pypy/module/micronumpy/boxes.py b/pypy/module/micronumpy/boxes.py
--- a/pypy/module/micronumpy/boxes.py
+++ b/pypy/module/micronumpy/boxes.py
@@ -10,6 +10,7 @@
 from rpython.rlib.rarithmetic import LONG_BIT
 from rpython.rlib.rstring import StringBuilder
 from rpython.rlib.objectmodel import specialize
+from rpython.rlib import jit
 from rpython.rtyper.lltypesystem import lltype, rffi
 from rpython.tool.sourcetools import func_with_new_name
 from pypy.module.micronumpy import constants as NPY
@@ -536,8 +537,20 @@
     def get_dtype(self, space):
         return self.dtype
 
+    @jit.unroll_safe
     def raw_str(self):
-        return self.arr.dtype.itemtype.to_str(self)
+        builder = StringBuilder()
+        i = self.ofs
+        end = i + self.dtype.elsize
+        with self.arr as storage:
+            while i < end:
+                assert isinstance(storage[i], str)
+                if storage[i] == '\x00':
+                    break
+                builder.append(storage[i])
+                i += 1
+            return builder.build()
+
 
 class W_VoidBox(W_FlexibleBox):
     def descr_getitem(self, space, w_item):
diff --git a/pypy/module/micronumpy/ndarray.py 
b/pypy/module/micronumpy/ndarray.py
--- a/pypy/module/micronumpy/ndarray.py
+++ b/pypy/module/micronumpy/ndarray.py
@@ -279,7 +279,7 @@
                 s.append(separator)
                 s.append(' ')
             if self.is_scalar() and dtype.is_str():
-                s.append(dtype.itemtype.to_str(i.getitem(state)))
+                s.append(i.getitem(state).raw_str())
             else:
                 s.append(dtype.itemtype.str_format(i.getitem(state), 
add_quotes=True))
             state = i.next(state)
diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py
--- a/pypy/module/micronumpy/types.py
+++ b/pypy/module/micronumpy/types.py
@@ -2051,20 +2051,8 @@
     def get_element_size(self):
         return rffi.sizeof(self.T)
 
-    @jit.unroll_safe
     def to_str(self, item):
-        builder = StringBuilder()
-        assert isinstance(item, boxes.W_FlexibleBox)
-        i = item.ofs
-        end = i + item.dtype.elsize
-        with item.arr as storage:
-            while i < end:
-                assert isinstance(storage[i], str)
-                if storage[i] == '\x00':
-                    break
-                builder.append(storage[i])
-                i += 1
-            return builder.build()
+        return item.raw_str()
 
 def str_unary_op(func):
     specialize.argtype(1)(func)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to