[pypy-commit] pypy unroll-if-const: create some fast paths and add tests

fijal noreply at buildbot.pypy.org
Mon Jul 25 19:30:42 CEST 2011


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: unroll-if-const
Changeset: r45976:dac2fefe4742
Date: 2011-07-25 19:30 +0200
http://bitbucket.org/pypy/pypy/changeset/dac2fefe4742/

Log:	create some fast paths and add tests

diff --git a/pypy/rpython/lltypesystem/rbuilder.py b/pypy/rpython/lltypesystem/rbuilder.py
--- a/pypy/rpython/lltypesystem/rbuilder.py
+++ b/pypy/rpython/lltypesystem/rbuilder.py
@@ -68,6 +68,8 @@
     def ll_append(ll_builder, ll_str):
         used = ll_builder.used
         lgt = len(ll_str.chars)
+        if lgt == 0:
+            return
         needed = lgt + used
         if needed > ll_builder.allocated:
             ll_builder.grow(ll_builder, lgt)
@@ -84,6 +86,8 @@
     @staticmethod
     def ll_append_slice(ll_builder, ll_str, start, end):
         needed = end - start
+        if needed == 0:
+            return
         used = ll_builder.used
         if needed + used > ll_builder.allocated:
             ll_builder.grow(ll_builder, needed)
@@ -93,6 +97,8 @@
 
     @staticmethod
     def ll_append_multiple_char(ll_builder, char, times):
+        if times == 0:
+            return
         used = ll_builder.used
         if times + used > ll_builder.allocated:
             ll_builder.grow(ll_builder, times)
diff --git a/pypy/rpython/test/test_rbuilder.py b/pypy/rpython/test/test_rbuilder.py
--- a/pypy/rpython/test/test_rbuilder.py
+++ b/pypy/rpython/test/test_rbuilder.py
@@ -27,7 +27,9 @@
             s.append("a")
             s.append("abc")
             s.append_slice("abc", 1, 2)
+            s.append_slice("abc", 1, 1)
             s.append_multiple_char('d', 4)
+            s.append_multiple_char('d', 0)
             return s.build()
         res = self.ll_to_string(self.interpret(func, []))
         assert res == "aabcbdddd"
@@ -36,6 +38,7 @@
         def func():
             s = StringBuilder(4)
             s.append("abcd")
+            s.append("")
             s.append("defg")
             s.append("rty")
             return s.build()
@@ -47,6 +50,7 @@
             s = UnicodeBuilder()
             s.append(u'a')
             s.append(u'abc')
+            s.append(u'')
             s.append(u'abcdef')
             s.append_slice(u'abc', 1, 2)
             s.append_multiple_char(u'u', 4)


More information about the pypy-commit mailing list