From a65443ee0225933367be9c7640629298882532c9 Mon Sep 17 00:00:00 2001 From: rocky Date: Sun, 14 Aug 2016 22:59:34 -0400 Subject: [PATCH] Fix pypy semantic action bug in CALL_METHOD --- test/bytecode_pypy2.7/02_call_method.pyc | Bin 0 -> 362 bytes test/simple_source/bug_pypy27/02_call_method.py | 4 ++++ uncompyle6/semantics/pysource.py | 8 +++----- 3 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 test/bytecode_pypy2.7/02_call_method.pyc create mode 100644 test/simple_source/bug_pypy27/02_call_method.py 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 0000000000000000000000000000000000000000..cd0fc2740e282aaf150a0726344de18a792ac97c GIT binary patch literal 362 zcmYL_!A`?442GR{NT?GMM;@W#u%R8s1?{r?4&4EXOSL5~4AM1P9EqYGc_AJHUV+Ep z1+cv$qWJfx#J^*u__-*)Cm;6~hLsIDUNSh|2Hp)kD6dPoU0G3yf@8@M=PXBnXMj(m zkcrP_$~m}PVFX75S5DJcmK*NAF3;GyA{L-rHO>CLRR8}I8D>8W#*(9^jz kKcv0g5XyK_h5%E_qt%$@zqL{&U!tzNwsXnjLS1|azt7P<>;M1& literal 0 HcmV?d00001 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'):