[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