[pypy-svn] r38469 - pypy/dist/pypy/rlib/rsre

arigo at codespeak.net arigo at codespeak.net
Sun Feb 11 16:02:51 CET 2007


Author: arigo
Date: Sun Feb 11 16:02:50 2007
New Revision: 38469

Modified:
   pypy/dist/pypy/rlib/rsre/rsre_core.py
Log:
Reduce the amount of slicing.  The first of these removed slices was
invalid in RPython because its start could occasionally be beyond the
end of the list.



Modified: pypy/dist/pypy/rlib/rsre/rsre_core.py
==============================================================================
--- pypy/dist/pypy/rlib/rsre/rsre_core.py	(original)
+++ pypy/dist/pypy/rlib/rsre/rsre_core.py	Sun Feb 11 16:02:50 2007
@@ -181,13 +181,9 @@
     assert prefix_skip >= 0
     prefix = pattern_codes[7:7 + prefix_len]
     overlap_offset = 7 + prefix_len - 1
-    overlap_stop = pattern_codes[1] + 1
     assert overlap_offset >= 0
-    assert overlap_stop >= 0
-    overlap = pattern_codes[overlap_offset:overlap_stop]
     pattern_offset = pattern_codes[1] + 1
     assert pattern_offset >= 0
-    pattern_codes = pattern_codes[pattern_offset:]
     i = 0
     string_position = state.string_position
     while string_position < state.end:
@@ -197,7 +193,7 @@
                 if i == 0:
                     break
                 else:
-                    i = overlap[i]
+                    i = pattern_codes[overlap_offset + i]
             else:
                 i += 1
                 if i == prefix_len:
@@ -207,9 +203,10 @@
                                                  - prefix_len + prefix_skip
                     if flags & SRE_INFO_LITERAL:
                         return True # matched all of pure literal pattern
-                    if match(state, pattern_codes[2 * prefix_skip:]):
+                    start = pattern_offset + 2 * prefix_skip
+                    if match(state, pattern_codes[start:]):
                         return True
-                    i = overlap[i]
+                    i = pattern_codes[overlap_offset + i]
                 break
         string_position += 1
     return False



More information about the Pypy-commit mailing list