[pypy-svn] r54570 - in pypy/branch/io-improvements/pypy/rlib: . test
fijal at codespeak.net
fijal at codespeak.net
Thu May 8 20:31:47 CEST 2008
Author: fijal
Date: Thu May 8 20:31:46 2008
New Revision: 54570
Modified:
pypy/branch/io-improvements/pypy/rlib/rgc.py
pypy/branch/io-improvements/pypy/rlib/rstring.py
pypy/branch/io-improvements/pypy/rlib/test/test_rgc.py
pypy/branch/io-improvements/pypy/rlib/test/test_rstring.py
Log:
Slightly change interface to something saner.
Modified: pypy/branch/io-improvements/pypy/rlib/rgc.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rlib/rgc.py (original)
+++ pypy/branch/io-improvements/pypy/rlib/rgc.py Thu May 8 20:31:46 2008
@@ -265,14 +265,13 @@
return hop.genop('malloc_resizable_buffer', vlist,
resulttype=hop.r_result.lowleveltype)
-def resize_buffer(ptr, new_size):
+def resize_buffer(ptr, old_size, new_size):
""" Resize raw buffer returned by resizable_buffer_of_shape to new size
"""
from pypy.rpython.lltypesystem import lltype
T = lltype.typeOf(ptr).TO
arrayfld = T._arrayfld
arr = getattr(ptr, arrayfld)
- old_size = len(arr)
# we don't have any realloc on top of cpython
new_ptr = lltype.malloc(T, new_size)
new_ar = getattr(new_ptr, arrayfld)
@@ -283,22 +282,24 @@
class ResizeBufferEntry(ExtRegistryEntry):
_about_ = resize_buffer
- def compute_result_annotation(self, s_ptr, s_new_size):
+ def compute_result_annotation(self, s_ptr, s_old_size, s_new_size):
from pypy.annotation import model as annmodel
from pypy.rpython.lltypesystem import rffi
assert isinstance(s_ptr, annmodel.SomePtr)
assert isinstance(s_new_size, annmodel.SomeInteger)
+ assert isinstance(s_old_size, annmodel.SomeInteger)
return s_ptr
def specialize_call(self, hop):
from pypy.rpython.lltypesystem import lltype
vlist = [hop.inputarg(hop.args_r[0], 0),
- hop.inputarg(lltype.Signed, 1)]
+ hop.inputarg(lltype.Signed, 1),
+ hop.inputarg(lltype.Signed, 2)]
hop.exception_is_here()
return hop.genop('resize_buffer', vlist,
resulttype=hop.r_result.lowleveltype)
-def finish_building_buffer(ptr):
+def finish_building_buffer(ptr, final_size):
""" Finish building resizable buffer returned by resizable_buffer_of_shape
"""
return ptr
@@ -306,14 +307,17 @@
class FinishBuildingBufferEntry(ExtRegistryEntry):
_about_ = finish_building_buffer
- def compute_result_annotation(self, s_arr):
- from pypy.annotation.model import SomePtr, s_ImpossibleValue
+ def compute_result_annotation(self, s_arr, s_final_size):
+ from pypy.annotation.model import SomePtr, s_ImpossibleValue,\
+ SomeInteger
assert isinstance(s_arr, SomePtr)
+ assert isinstance(s_final_size, SomeInteger)
return s_arr
def specialize_call(self, hop):
from pypy.rpython.lltypesystem import lltype
- vlist = [hop.inputarg(hop.args_r[0], 0)]
+ vlist = [hop.inputarg(hop.args_r[0], 0),
+ hop.inputarg(hop.args_r[1], 1)]
hop.exception_cannot_occur()
return hop.genop('finish_building_buffer', vlist,
resulttype=hop.r_result.lowleveltype)
Modified: pypy/branch/io-improvements/pypy/rlib/rstring.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rlib/rstring.py (original)
+++ pypy/branch/io-improvements/pypy/rlib/rstring.py Thu May 8 20:31:46 2008
@@ -2,6 +2,9 @@
""" String builder interface
"""
+from pypy.rpython.extregistry import ExtRegistryEntry
+from pypy.rpython.annlowlevel import llhelper
+
INIT_SIZE = 100 # XXX tweak
class StringBuilder(object):
@@ -11,9 +14,20 @@
def append(self, s):
self.l.append(s)
- def append_char(self, c):
- self.l.append(c)
-
def build(self):
return "".join(self.l)
+class StringBuilderEntry(ExtRegistryEntry):
+ _about_ = StringBuilder
+
+ def compute_result_annotation(self, s_init_size=None):
+ from pypy.rpython.rbuilder import SomeStringBuilder
+ if s_init_size is not None:
+ assert s_init_size.is_constant()
+ init_size = s_init_size.const
+ else:
+ init_size = INIT_SIZE
+ return SomeStringBuilder(init_size)
+
+ def specialize_call(self, hop):
+ return hop.r_result.rtyper_new(hop)
Modified: pypy/branch/io-improvements/pypy/rlib/test/test_rgc.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rlib/test/test_rgc.py (original)
+++ pypy/branch/io-improvements/pypy/rlib/test/test_rgc.py Thu May 8 20:31:46 2008
@@ -44,8 +44,8 @@
def f():
ptr = rgc.resizable_buffer_of_shape(STR, 1)
ptr.chars[0] = 'a'
- ptr = rgc.resize_buffer(ptr, 2)
+ ptr = rgc.resize_buffer(ptr, 1, 2)
ptr.chars[1] = 'b'
- return hlstr(rgc.finish_building_buffer(ptr))
+ return hlstr(rgc.finish_building_buffer(ptr, 2))
assert f() == 'ab'
Modified: pypy/branch/io-improvements/pypy/rlib/test/test_rstring.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rlib/test/test_rstring.py (original)
+++ pypy/branch/io-improvements/pypy/rlib/test/test_rstring.py Thu May 8 20:31:46 2008
@@ -1,9 +1,10 @@
from pypy.rlib.rstring import StringBuilder
+from
def test_string_builder():
s = StringBuilder()
s.append("a")
s.append("abc")
- s.append_char("a")
+ s.append("a")
assert s.build() == "aabca"
More information about the Pypy-commit
mailing list