[pypy-commit] pypy default: comparing a unicode char to str char no longer requires allocating a string

alex_gaynor noreply at buildbot.pypy.org
Thu Nov 24 11:11:05 CET 2011


Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: 
Changeset: r49719:5f1a23beccab
Date: 2011-11-24 04:09 -0600
http://bitbucket.org/pypy/pypy/changeset/5f1a23beccab/

Log:	comparing a unicode char to str char no longer requires allocating a
	string

diff --git a/pypy/module/pypyjit/test_pypy_c/test_string.py b/pypy/module/pypyjit/test_pypy_c/test_string.py
--- a/pypy/module/pypyjit/test_pypy_c/test_string.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_string.py
@@ -33,12 +33,8 @@
             i24 = int_ge(i19, i12)
             guard_false(i24, descr=...)
             i25 = unicodegetitem(p13, i19)
-            p27 = newstr(1)
-            strsetitem(p27, 0, i23)
-            p30 = call(ConstClass(ll_str2unicode__rpy_stringPtr), p27, descr=...)
-            guard_no_exception(descr=...)
-            i32 = call(ConstClass(_ll_2_str_eq_checknull_char__rpy_unicodePtr_UniChar), p30, i25, descr=...)
-            guard_true(i32, descr=...)
+            i26 = int_eq(i23, i25)
+            guard_true(i26, descr=...)
             i34 = int_add(i6, 1)
             --TICK--
             jump(p0, p1, p2, p3, p4, p5, i34, p7, p8, i9, i10, p11, i12, p13, descr=...)
diff --git a/pypy/rpython/lltypesystem/rstr.py b/pypy/rpython/lltypesystem/rstr.py
--- a/pypy/rpython/lltypesystem/rstr.py
+++ b/pypy/rpython/lltypesystem/rstr.py
@@ -316,6 +316,8 @@
         s.chars[0] = ch
         return s
 
+    @jit.look_inside_iff(lambda str: jit.isconstant(len(str)) and len(str) == 1)
+    @jit.oopspec("str.str2unicode(str)")
     def ll_str2unicode(str):
         lgt = len(str.chars)
         s = mallocunicode(lgt)
@@ -324,7 +326,6 @@
                 raise UnicodeDecodeError
             s.chars[i] = cast_primitive(UniChar, str.chars[i])
         return s
-    ll_str2unicode.oopspec = 'str.str2unicode(str)'
 
     @jit.elidable
     def ll_strhash(s):


More information about the pypy-commit mailing list