Author: Armin Rigo <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit