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