Kaydet (Commit) 2f2c67d7 authored tarafından Fredrik Lundh's avatar Fredrik Lundh

-- fixed width calculations for alternations

-- fixed literal check in branch operator
   (this broke test_tokenize, as reported by Mark Favas)
-- added REPEAT_ONE operator (still not enabled, though)
-- added some debugging stuff (maxlevel)
üst 329e2919
...@@ -270,6 +270,7 @@ def _compile_info(code, pattern, flags): ...@@ -270,6 +270,7 @@ def _compile_info(code, pattern, flags):
table[i+1] = table[table[i+1]-1]+1 table[i+1] = table[table[i+1]-1]+1
code.extend(table[1:]) # don't store first entry code.extend(table[1:]) # don't store first entry
elif charset: elif charset:
# FIXME: use charset optimizer!
for char in charset: for char in charset:
emit(OPCODES[LITERAL]) emit(OPCODES[LITERAL])
emit(char) emit(char)
...@@ -283,7 +284,7 @@ try: ...@@ -283,7 +284,7 @@ try:
except NameError: except NameError:
pass pass
def _compile1(p, flags): def _code(p, flags):
flags = p.pattern.flags | flags flags = p.pattern.flags | flags
code = [] code = []
...@@ -308,7 +309,7 @@ def compile(p, flags=0): ...@@ -308,7 +309,7 @@ def compile(p, flags=0):
else: else:
pattern = None pattern = None
code = _compile1(p, flags) code = _code(p, flags)
# print code # print code
......
...@@ -137,12 +137,12 @@ class SubPattern: ...@@ -137,12 +137,12 @@ class SubPattern:
lo = hi = 0L lo = hi = 0L
for op, av in self.data: for op, av in self.data:
if op is BRANCH: if op is BRANCH:
l = sys.maxint i = sys.maxint
h = 0 j = 0
for av in av[1]: for av in av[1]:
i, j = av.getwidth() l, h = av.getwidth()
l = min(l, i) i = min(i, l)
h = min(h, j) j = min(j, h)
lo = lo + i lo = lo + i
hi = hi + j hi = hi + j
elif op is CALL: elif op is CALL:
......
This diff is collapsed.
...@@ -74,6 +74,8 @@ typedef struct { ...@@ -74,6 +74,8 @@ typedef struct {
SRE_REPEAT *repeat; /* current repeat context */ SRE_REPEAT *repeat; /* current repeat context */
/* hooks */ /* hooks */
SRE_TOLOWER_HOOK lower; SRE_TOLOWER_HOOK lower;
/* debugging */
int maxlevel;
} SRE_STATE; } SRE_STATE;
typedef struct { typedef struct {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment