mirror of
https://github.com/python/cpython.git
synced 2025-08-27 12:16:04 +00:00
Complete the previous effort to factor out constant expressions
and improve the speed of the if/elif/else blocks.
This commit is contained in:
parent
9533e34024
commit
049ade2997
2 changed files with 34 additions and 12 deletions
|
@ -24,14 +24,25 @@ else:
|
||||||
def _identityfunction(x):
|
def _identityfunction(x):
|
||||||
return x
|
return x
|
||||||
|
|
||||||
|
def set(seq):
|
||||||
|
s = {}
|
||||||
|
for elem in seq:
|
||||||
|
s[elem] = 1
|
||||||
|
return s
|
||||||
|
|
||||||
|
_LITERAL_CODES = set([LITERAL, NOT_LITERAL])
|
||||||
|
_REPEATING_CODES = set([REPEAT, MIN_REPEAT, MAX_REPEAT])
|
||||||
|
_SUCCESS_CODES = set([SUCCESS, FAILURE])
|
||||||
|
_ASSERT_CODES = set([ASSERT, ASSERT_NOT])
|
||||||
|
|
||||||
def _compile(code, pattern, flags):
|
def _compile(code, pattern, flags):
|
||||||
# internal: compile a (sub)pattern
|
# internal: compile a (sub)pattern
|
||||||
emit = code.append
|
emit = code.append
|
||||||
_len = len
|
_len = len
|
||||||
LITERAL_CODES = {LITERAL:1, NOT_LITERAL:1}
|
LITERAL_CODES = _LITERAL_CODES
|
||||||
REPEATING_CODES = {REPEAT:1, MIN_REPEAT:1, MAX_REPEAT:1}
|
REPEATING_CODES = _REPEATING_CODES
|
||||||
SUCCESS_CODES = {SUCCESS:1, FAILURE:1}
|
SUCCESS_CODES = _SUCCESS_CODES
|
||||||
ASSERT_CODES = {ASSERT:1, ASSERT_NOT:1}
|
ASSERT_CODES = _ASSERT_CODES
|
||||||
for op, av in pattern:
|
for op, av in pattern:
|
||||||
if op in LITERAL_CODES:
|
if op in LITERAL_CODES:
|
||||||
if flags & SRE_FLAG_IGNORECASE:
|
if flags & SRE_FLAG_IGNORECASE:
|
||||||
|
|
|
@ -16,15 +16,21 @@ import sys
|
||||||
|
|
||||||
from sre_constants import *
|
from sre_constants import *
|
||||||
|
|
||||||
|
def set(seq):
|
||||||
|
s = {}
|
||||||
|
for elem in seq:
|
||||||
|
s[elem] = 1
|
||||||
|
return s
|
||||||
|
|
||||||
SPECIAL_CHARS = ".\\[{()*+?^$|"
|
SPECIAL_CHARS = ".\\[{()*+?^$|"
|
||||||
REPEAT_CHARS = "*+?{"
|
REPEAT_CHARS = "*+?{"
|
||||||
|
|
||||||
DIGITS = tuple("0123456789")
|
DIGITS = set("0123456789")
|
||||||
|
|
||||||
OCTDIGITS = tuple("01234567")
|
OCTDIGITS = set("01234567")
|
||||||
HEXDIGITS = tuple("0123456789abcdefABCDEF")
|
HEXDIGITS = set("0123456789abcdefABCDEF")
|
||||||
|
|
||||||
WHITESPACE = tuple(" \t\n\r\v\f")
|
WHITESPACE = set(" \t\n\r\v\f")
|
||||||
|
|
||||||
ESCAPES = {
|
ESCAPES = {
|
||||||
r"\a": (LITERAL, ord("\a")),
|
r"\a": (LITERAL, ord("\a")),
|
||||||
|
@ -371,6 +377,11 @@ def _parse_sub_cond(source, state, condgroup):
|
||||||
subpattern.append((GROUPREF_EXISTS, (condgroup, item_yes, item_no)))
|
subpattern.append((GROUPREF_EXISTS, (condgroup, item_yes, item_no)))
|
||||||
return subpattern
|
return subpattern
|
||||||
|
|
||||||
|
_PATTERNENDERS = set("|)")
|
||||||
|
_ASSERTCHARS = set("=!<")
|
||||||
|
_LOOKBEHINDASSERTCHARS = set("=!")
|
||||||
|
_REPEATCODES = set([MIN_REPEAT, MAX_REPEAT])
|
||||||
|
|
||||||
def _parse(source, state):
|
def _parse(source, state):
|
||||||
# parse a simple pattern
|
# parse a simple pattern
|
||||||
subpattern = SubPattern(state)
|
subpattern = SubPattern(state)
|
||||||
|
@ -380,10 +391,10 @@ def _parse(source, state):
|
||||||
sourceget = source.get
|
sourceget = source.get
|
||||||
sourcematch = source.match
|
sourcematch = source.match
|
||||||
_len = len
|
_len = len
|
||||||
PATTERNENDERS = ("|", ")")
|
PATTERNENDERS = _PATTERNENDERS
|
||||||
ASSERTCHARS = ("=", "!", "<")
|
ASSERTCHARS = _ASSERTCHARS
|
||||||
LOOKBEHINDASSERTCHARS = ("=", "!")
|
LOOKBEHINDASSERTCHARS = _LOOKBEHINDASSERTCHARS
|
||||||
REPEATCODES = (MIN_REPEAT, MAX_REPEAT)
|
REPEATCODES = _REPEATCODES
|
||||||
|
|
||||||
while 1:
|
while 1:
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue