More PyPy LOOKUP_METHOD rules

This commit is contained in:
rocky
2016-07-24 20:59:44 -04:00
parent 1c50e34c30
commit aed4d23c34
6 changed files with 10 additions and 3 deletions

View File

@@ -42,7 +42,7 @@ check-2.6:
#:PyPy of some sort. E.g. [PyPy 5.0.1 with GCC 4.8.4]
# Skip for now
2.6 5.0:
2.4 2.6 5.0:
#: Run py.test tests
pytest:

View File

@@ -112,7 +112,7 @@ check-3.4-ok:
#:PyPy of some sort. E.g. [PyPy 5.0.1 with GCC 4.8.4]
# Skip for now
2.6 5.0:
2.4 2.6 5.0:
clean: clean-py-dis clean-dis clean-unverified

View File

@@ -270,6 +270,8 @@ class Python2Parser(PythonParser):
# A PyPy speciality
self.add_unique_rule("load_attr ::= LOAD_FAST LOOKUP_METHOD",
op, v, customize)
self.add_unique_rule("load_attr ::= LOAD_NAME LOOKUP_METHOD",
op, v, customize)
self.add_unique_rule("call_function ::= expr CALL_METHOD",
op, v, customize)
continue

View File

@@ -470,6 +470,8 @@ class Python3Parser(PythonParser):
# A PyPy speciality
self.add_unique_rule("load_attr ::= LOAD_FAST LOOKUP_METHOD",
opname, token.attr, customize)
self.add_unique_rule("load_attr ::= LOAD_NAME LOOKUP_METHOD",
opname, token.attr, customize)
self.add_unique_rule("call_function ::= expr CALL_METHOD",
opname, token.attr, customize)
continue

View File

@@ -128,6 +128,7 @@ class Scanner3(scan.Scanner):
for instr in bytecode.get_instructions(co):
print(instr._disassemble())
customize = {}
# Container for tokens
tokens = []
@@ -235,6 +236,8 @@ class Scanner3(scan.Scanner):
elif op in self.varargs:
pos_args = inst.argval
opname = '%s_%d' % (opname, pos_args)
elif self.is_pypy and opname == 'CALL_METHOD':
customize['CALL_METHOD'] = argval
elif opname == 'UNPACK_EX':
# FIXME: try with scanner and parser by
# changing inst.argval
@@ -296,7 +299,7 @@ class Scanner3(scan.Scanner):
for t in tokens:
print(t.format())
print()
return tokens, {}
return tokens, customize
def build_lines_data(self, code_obj):
"""