[pypy-svn] r76519 - pypy/branch/rsre2/pypy/rlib/rsre

arigo at codespeak.net arigo at codespeak.net
Fri Aug 6 18:33:02 CEST 2010


Author: arigo
Date: Fri Aug  6 18:33:01 2010
New Revision: 76519

Modified:
   pypy/branch/rsre2/pypy/rlib/rsre/rsre_core.py
Log:
Reintroduce specialization on the function.


Modified: pypy/branch/rsre2/pypy/rlib/rsre/rsre_core.py
==============================================================================
--- pypy/branch/rsre2/pypy/rlib/rsre/rsre_core.py	(original)
+++ pypy/branch/rsre2/pypy/rlib/rsre/rsre_core.py	Fri Aug  6 18:33:01 2010
@@ -756,10 +756,10 @@
         return prevptr < 0 or rsre_char.is_linebreak(ctx.str(prevptr))
 
     elif atcode == AT_BOUNDARY:
-        return at_boundary(ctx, ptr, rsre_char.is_word)
+        return at_boundary(ctx, ptr)
 
     elif atcode == AT_NON_BOUNDARY:
-        return at_non_boundary(ctx, ptr, rsre_char.is_word)
+        return at_non_boundary(ctx, ptr)
 
     elif atcode == AT_END:
         remaining_chars = ctx.end - ptr
@@ -773,36 +773,41 @@
         return ptr == ctx.end
 
     elif atcode == AT_LOC_BOUNDARY:
-        return at_boundary(ctx, ptr, rsre_char.is_loc_word)
+        return at_loc_boundary(ctx, ptr)
 
     elif atcode == AT_LOC_NON_BOUNDARY:
-        return at_non_boundary(ctx, ptr, rsre_char.is_loc_word)
+        return at_loc_non_boundary(ctx, ptr)
 
     elif atcode == AT_UNI_BOUNDARY:
-        return at_boundary(ctx, ptr, rsre_char.is_uni_word)
+        return at_uni_boundary(ctx, ptr)
 
     elif atcode == AT_UNI_NON_BOUNDARY:
-        return at_non_boundary(ctx, ptr, rsre_char.is_uni_word)
+        return at_uni_non_boundary(ctx, ptr)
 
     return False
 
- at specializectx
-def at_boundary(ctx, ptr, word_checker):
-    if ctx.end == 0:
-        return False
-    prevptr = ptr - 1
-    that = prevptr >= 0 and word_checker(ctx.str(prevptr))
-    this = ptr < ctx.end and word_checker(ctx.str(ptr))
-    return this != that
-
- at specializectx
-def at_non_boundary(ctx, ptr, word_checker):
-    if ctx.end == 0:
-        return False
-    prevptr = ptr - 1
-    that = prevptr >= 0 and word_checker(ctx.str(prevptr))
-    this = ptr < ctx.end and word_checker(ctx.str(ptr))
-    return this == that
+def _make_boundary(word_checker):
+    @specializectx
+    def at_boundary(ctx, ptr):
+        if ctx.end == 0:
+            return False
+        prevptr = ptr - 1
+        that = prevptr >= 0 and word_checker(ctx.str(prevptr))
+        this = ptr < ctx.end and word_checker(ctx.str(ptr))
+        return this != that
+    @specializectx
+    def at_non_boundary(ctx, ptr):
+        if ctx.end == 0:
+            return False
+        prevptr = ptr - 1
+        that = prevptr >= 0 and word_checker(ctx.str(prevptr))
+        this = ptr < ctx.end and word_checker(ctx.str(ptr))
+        return this == that
+    return at_boundary, at_non_boundary
+
+at_boundary, at_non_boundary = _make_boundary(rsre_char.is_word)
+at_loc_boundary, at_loc_non_boundary = _make_boundary(rsre_char.is_loc_word)
+at_uni_boundary, at_uni_non_boundary = _make_boundary(rsre_char.is_uni_word)
 
 # ____________________________________________________________
 



More information about the Pypy-commit mailing list