[pypy-svn] r53771 - in pypy/dist/pypy/rlib: . test

fijal at codespeak.net fijal at codespeak.net
Tue Apr 15 05:42:12 CEST 2008


Author: fijal
Date: Tue Apr 15 05:42:11 2008
New Revision: 53771

Modified:
   pypy/dist/pypy/rlib/rstring.py
   pypy/dist/pypy/rlib/test/test_rstring.py
Log:
Method support (no unicode!)


Modified: pypy/dist/pypy/rlib/rstring.py
==============================================================================
--- pypy/dist/pypy/rlib/rstring.py	(original)
+++ pypy/dist/pypy/rlib/rstring.py	Tue Apr 15 05:42:11 2008
@@ -9,6 +9,14 @@
     def __init__(self, initial_space=0):
         self.initial_space = initial_space
 
+    def method_append(self, s_item):
+        if not isinstance(s_item, annmodel.SomeString):
+            raise TypeError("Can only append strings or characters to string builder")
+        return annmodel.SomeImpossibleValue()
+
+    def method_build(self):
+        return annmodel.SomeString()
+
 class StringBuilderEntry(ExtRegistryEntry):
     _about_ = builder
 

Modified: pypy/dist/pypy/rlib/test/test_rstring.py
==============================================================================
--- pypy/dist/pypy/rlib/test/test_rstring.py	(original)
+++ pypy/dist/pypy/rlib/test/test_rstring.py	Tue Apr 15 05:42:11 2008
@@ -1,6 +1,7 @@
 
 from pypy.translator.translator import TranslationContext
 from pypy.rlib import rstring
+from pypy.annotation import model as annmodel
 
 class TestAnnotationStringBuilder:
     def annotate(self, func, args):
@@ -14,3 +15,13 @@
         
         t, res = self.annotate(f, [])
         assert isinstance(res, rstring.SomeStringBuilder)
+
+    def test_methods(self):
+        def f(x):
+            b = rstring.builder()
+            for i in range(x):
+                b.append("abc")
+            return b.build()
+
+        t, res = self.annotate(f, [int])
+        assert isinstance(res, annmodel.SomeString)



More information about the Pypy-commit mailing list