diff --git a/test/bytecode_pypy2.7/02_call_method.pyc b/test/bytecode_pypy2.7/02_call_method.pyc new file mode 100644 index 00000000..cd0fc274 Binary files /dev/null and b/test/bytecode_pypy2.7/02_call_method.pyc differ diff --git a/test/simple_source/bug_pypy27/02_call_method.py b/test/simple_source/bug_pypy27/02_call_method.py new file mode 100644 index 00000000..24227be8 --- /dev/null +++ b/test/simple_source/bug_pypy27/02_call_method.py @@ -0,0 +1,4 @@ +# Bug in PyPy was not hacndling CALL_METHOD_xxx like +# CALL_FUNCTION_XXX +def truncate(self, size=None): + self.db.put(self.key, '', txn=self.txn, dlen=self.len - size, doff=size) diff --git a/uncompyle6/semantics/pysource.py b/uncompyle6/semantics/pysource.py index d22e176c..69878644 100644 --- a/uncompyle6/semantics/pysource.py +++ b/uncompyle6/semantics/pysource.py @@ -1730,8 +1730,7 @@ class SourceWalker(GenericASTTraversal, object): %c, %C, and so on. """ - # self.println("-----") - # self.print(startnode) + # self.println("----> ", startnode.type) fmt = entry[0] arg = 1 @@ -1850,11 +1849,10 @@ class SourceWalker(GenericASTTraversal, object): continue op = k[ :k.rfind('_') ] - if k == 'CALL_METHOD': + if k.startswith('CALL_METHOD'): # This happens in PyPy only TABLE_R[k] = ('%c(%P)', 0, (1, -1, ', ', 100)) - - if op == 'CALL_FUNCTION': + elif op == 'CALL_FUNCTION': TABLE_R[k] = ('%c(%P)', 0, (1, -1, ', ', 100)) elif op in ('CALL_FUNCTION_VAR', 'CALL_FUNCTION_VAR_KW', 'CALL_FUNCTION_KW'):