[pypy-commit] pypy default: Optimized calling re_match.groups() where re_match's regexp is known

alex_gaynor noreply at buildbot.pypy.org
Sat Dec 1 20:52:59 CET 2012


Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: 
Changeset: r59183:7ea64ec55f0c
Date: 2012-12-01 11:52 -0800
http://bitbucket.org/pypy/pypy/changeset/7ea64ec55f0c/

Log:	Optimized calling re_match.groups() where re_match's regexp is known

diff --git a/pypy/module/_sre/interp_sre.py b/pypy/module/_sre/interp_sre.py
--- a/pypy/module/_sre/interp_sre.py
+++ b/pypy/module/_sre/interp_sre.py
@@ -58,11 +58,14 @@
         mark = mark.prev
     return result
 
+
+ at jit.look_inside_iff(lambda space, ctx, fmarks, num_groups, w_default: jit.isconstant(num_groups))
 def allgroups_w(space, ctx, fmarks, num_groups, w_default):
-    grps = [slice_w(space, ctx, fmarks[i*2], fmarks[i*2+1], w_default)
+    grps = [slice_w(space, ctx, fmarks[i * 2], fmarks[i * 2 + 1], w_default)
             for i in range(num_groups)]
     return space.newtuple(grps)
 
+
 def import_re(space):
     w_builtin = space.getbuiltinmodule('__builtin__')
     w_import = space.getattr(w_builtin, space.wrap("__import__"))
@@ -85,7 +88,7 @@
 # SRE_Pattern class
 
 class W_SRE_Pattern(Wrappable):
-    _immutable_fields_ = ["code", "flags"]
+    _immutable_fields_ = ["code", "flags", "num_groups"]
 
     def cannot_copy_w(self):
         space = self.space


More information about the pypy-commit mailing list