Author: Armin Rigo <ar...@tunes.org>
Branch: unicode-utf8-re
Changeset: r93247:3a51da0f6752
Date: 2017-12-03 15:56 +0100
http://bitbucket.org/pypy/pypy/changeset/3a51da0f6752/

Log:    test_zexternal

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
@@ -997,9 +997,11 @@
         return ptr == ctx.ZERO
 
     elif atcode == AT_BEGINNING_LINE:
-        if ptr <= ctx.ZERO:
+        try:
+            prevptr = ctx.prev(ptr)
+        except EndOfString:
             return True
-        return rsre_char.is_linebreak(ctx.str(ctx.prev(ptr)))
+        return rsre_char.is_linebreak(ctx.str(prevptr))
 
     elif atcode == AT_BOUNDARY:
         return at_boundary(ctx, ptr)
@@ -1034,18 +1036,26 @@
 def _make_boundary(word_checker):
     @specializectx
     def at_boundary(ctx, ptr):
-        if ctx.end == 0:
+        if ctx.end == ctx.ZERO:
             return False
-        prevptr = ptr - 1
-        that = prevptr >= 0 and word_checker(ctx.str(prevptr))
+        try:
+            prevptr = ctx.prev(ptr)
+        except EndOfString:
+            that = False
+        else:
+            that = 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:
+        if ctx.end == ctx.ZERO:
             return False
-        prevptr = ptr - 1
-        that = prevptr >= 0 and word_checker(ctx.str(prevptr))
+        try:
+            prevptr = ctx.prev(ptr)
+        except EndOfString:
+            that = False
+        else:
+            that = word_checker(ctx.str(prevptr))
         this = ptr < ctx.end and word_checker(ctx.str(ptr))
         return this == that
     return at_boundary, at_non_boundary
@@ -1127,7 +1137,7 @@
         if sre_match(ctx, base, start, None) is not None:
             ctx.match_start = start
             return True
-        start += 1
+        start = ctx.next(start)
     return False
 
 install_jitdriver_spec("LiteralSearch",
@@ -1144,11 +1154,12 @@
     while start < ctx.end:
         ctx.jitdriver_LiteralSearch.jit_merge_point(ctx=ctx, start=start,
                                           base=base, character=character)
+        start1 = ctx.next(start)
         if ctx.str(start) == character:
-            if sre_match(ctx, base, start + 1, None) is not None:
+            if sre_match(ctx, base, start1, None) is not None:
                 ctx.match_start = start
                 return True
-        start += 1
+        start = start1
     return False
 
 install_jitdriver_spec("CharsetSearch",
diff --git a/rpython/rlib/rsre/test/test_zexternal.py 
b/rpython/rlib/rsre/test/test_zexternal.py
--- a/rpython/rlib/rsre/test/test_zexternal.py
+++ b/rpython/rlib/rsre/test/test_zexternal.py
@@ -1,6 +1,6 @@
 import re
 from rpython.rlib.rsre.test.test_match import get_code
-from rpython.rlib.rsre import rsre_core
+from rpython.rlib.rsre.test import support
 
 
 def test_external_match():
@@ -31,11 +31,11 @@
         raise Exception("this should have been a syntax error")
     #
     if use_search:
-        result = rsre_core.search(obj, s)
+        result = support.search(obj, s)
     else:
         # Emulate a poor man's search() with repeated match()s
         for i in range(len(s)+1):
-            result = rsre_core.match(obj, s, start=i)
+            result = support.match(obj, s, start=i)
             if result:
                 break
     #
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to