Back off of previous refactor a little bit

This commit is contained in:
rocky 2017-12-13 21:26:52 -05:00
parent 303e134359
commit 94a18c1a95
2 changed files with 26 additions and 12 deletions

View File

@ -250,19 +250,23 @@ class Python2Parser(PythonParser):
JUMP_BACK
""", nop_func)
# For a rough break out on the first word. This may
# include instructions that don't need customization,
# but we'll do a finer check after the rough breakout.
customize_instruction_basenames = frozenset(
('BUILD', 'CALL', 'CONTINUE',
'DELETE', 'DUP', 'EXEC', 'JUMP',
'LOAD', 'LOOKUP', 'MAKE', 'SETUP',
'RAISE', 'UNPACK'))
# # For a rough break out on the first word. This may
# # include instructions that don't need customization,
# # but we'll do a finer check after the rough breakout.
# customize_instruction_basenames = frozenset(
# ('BUILD', 'CALL', 'CONTINUE',
# 'DELETE', 'DUP', 'EXEC', 'JUMP',
# 'LOAD', 'LOOKUP', 'MAKE', 'SETUP',
# 'RAISE', 'UNPACK'))
for i, token in enumerate(tokens):
opname = token.kind
if opname[:opname.find('_')] not in customize_instruction_basenames:
# FIXME
# if (opname[:opname.find('_')]
# not in customize_instruction_basenames):
if opname not in customize:
continue
opname_base = opname[:opname.rfind('_')]

View File

@ -98,8 +98,7 @@ class Scanner2(Scanner):
# list of tokens/instructions
tokens = []
# "customize" is ny pretty much legacy.
# We still use it though to signal we have a PyPy program
# "customize" is in the process of going away here
customize = {}
if self.is_pypy:
@ -246,6 +245,17 @@ class Scanner2(Scanner):
op_name = 'BUILD_MAP_n'
else:
op_name = '%s_%d' % (op_name, oparg)
customize[op_name] = oparg
elif self.is_pypy and op_name in frozenset(
"""LOOKUP_METHOD JUMP_IF_NOT_DEBUG SETUP_EXCEPT SETUP_FINALLY""".split()):
# The value in the dict is in special cases in semantic actions, such
# as CALL_FUNCTION. The value is not used in these cases, so we put
# in arbitrary value 0.
customize[op_name] = 0
elif op_name in """
CONTINUE_LOOP EXEC_STMT LOAD_LISTCOMP LOAD_SETCOMP
""".split():
customize[op_name] = 0
elif op == self.opc.JUMP_ABSOLUTE:
# Further classify JUMP_ABSOLUTE into backward jumps
# which are used in loops, and "CONTINUE" jumps which