[pypy-commit] pypy unicode-utf8-re: Simplify again the code here

arigo pypy.commits at gmail.com
Sun Dec 3 10:21:28 EST 2017


Author: Armin Rigo <arigo at tunes.org>
Branch: unicode-utf8-re
Changeset: r93250:28c87cb229b6
Date: 2017-12-03 16:21 +0100
http://bitbucket.org/pypy/pypy/changeset/28c87cb229b6/

Log:	Simplify again the code here

diff --git a/rpython/rlib/rsre/rsre_core.py b/rpython/rlib/rsre/rsre_core.py
--- a/rpython/rlib/rsre/rsre_core.py
+++ b/rpython/rlib/rsre/rsre_core.py
@@ -1196,15 +1196,9 @@
     prefix_len = ctx.pat(5)
     assert prefix_len > 0
     i = 0
-    j = 0
-    past_start_positions = [0] * prefix_len
     while True:
         ctx.jitdriver_FastSearch.jit_merge_point(ctx=ctx,
                 string_position=string_position, i=i, prefix_len=prefix_len)
-        past_start_positions[j] = string_position
-        j += 1
-        if j == prefix_len:
-            j = 0
         char_ord = ctx.str(string_position)
         if char_ord != ctx.pat(7 + i):
             if i > 0:
@@ -1215,23 +1209,14 @@
             i += 1
             if i == prefix_len:
                 # found a potential match
-
-                # This would be 'start = string_position + 1 - prefix_len'
-                # but it's probably faster to record the 'prefix_len'
-                # most recent locations, for utf8
-                start = past_start_positions[j]
-                assert start >= ctx.ZERO
+                # start = string_position + 1 - prefix_len: computed later
+                ptr = string_position
                 prefix_skip = ctx.pat(6)
-                if prefix_skip >= prefix_len - 1:
-                    assert prefix_skip <= prefix_len
-                    ptr = string_position
-                    if prefix_skip == prefix_len:
-                        ptr = ctx.next(ptr)
+                if prefix_skip == prefix_len:
+                    ptr = ctx.next(ptr)
                 else:
-                    j_prefix_skip = j + prefix_skip
-                    if j_prefix_skip >= prefix_len:
-                        j_prefix_skip -= prefix_len
-                    ptr = past_start_positions[j_prefix_skip]
+                    assert prefix_skip < prefix_len
+                    ptr = ctx.prev_n(ptr, prefix_len-1 - prefix_skip, ctx.ZERO)
                 #flags = ctx.pat(2)
                 #if flags & rsre_char.SRE_INFO_LITERAL:
                 #    # matched all of pure literal pattern
@@ -1242,6 +1227,7 @@
                 pattern_offset = ctx.pat(1) + 1
                 ppos_start = pattern_offset + 2 * prefix_skip
                 if sre_match(ctx, ppos_start, ptr, None) is not None:
+                    start = ctx.prev_n(ptr, prefix_skip, ctx.ZERO)
                     ctx.match_start = start
                     return True
                 overlap_offset = prefix_len + (7 - 1)


More information about the pypy-commit mailing list