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

fijal at codespeak.net fijal at codespeak.net
Tue Apr 15 05:35:49 CEST 2008


Author: fijal
Date: Tue Apr 15 05:35:47 2008
New Revision: 53770

Added:
   pypy/dist/pypy/rlib/rstring.py   (contents, props changed)
   pypy/dist/pypy/rlib/test/test_rstring.py   (contents, props changed)
Log:
string builder implementation, first steps.


Added: pypy/dist/pypy/rlib/rstring.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/rlib/rstring.py	Tue Apr 15 05:35:47 2008
@@ -0,0 +1,22 @@
+
+from pypy.rpython.extregistry import ExtRegistryEntry
+from pypy.annotation import model as annmodel
+
+def builder(initial_space=20):
+    return []
+
+class SomeStringBuilder(annmodel.SomeObject):
+    def __init__(self, initial_space=0):
+        self.initial_space = initial_space
+
+class StringBuilderEntry(ExtRegistryEntry):
+    _about_ = builder
+
+    def compute_result_annotation(self, s_initial_space=None):
+        if s_initial_space is None:
+            initial_space = 0
+        else:
+            assert s_initial_space.is_constant()
+            initial_space = s_initial_space.const
+            assert isinstance(initial_space, int)
+        return SomeStringBuilder(initial_space)

Added: pypy/dist/pypy/rlib/test/test_rstring.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/rlib/test/test_rstring.py	Tue Apr 15 05:35:47 2008
@@ -0,0 +1,16 @@
+
+from pypy.translator.translator import TranslationContext
+from pypy.rlib import rstring
+
+class TestAnnotationStringBuilder:
+    def annotate(self, func, args):
+        t = TranslationContext()
+        res = t.buildannotator().build_types(func, args)
+        return t, res
+
+    def test_builder(self):
+        def f():
+            return rstring.builder()
+        
+        t, res = self.annotate(f, [])
+        assert isinstance(res, rstring.SomeStringBuilder)



More information about the Pypy-commit mailing list