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