diff --git a/__pkginfo__.py b/__pkginfo__.py index ab9268cd..486d5a36 100644 --- a/__pkginfo__.py +++ b/__pkginfo__.py @@ -39,7 +39,7 @@ entry_points = { 'pydisassemble=uncompyle6.bin.pydisassemble:main', ]} ftp_url = None -install_requires = ['spark-parser >= 1.8.2, < 1.9.0', +install_requires = ['spark-parser >= 1.8.4, < 1.9.0', 'xdis >= 3.6.1, < 3.7.0', 'six'] license = 'MIT' mailing_list = 'python-debugger@googlegroups.com' diff --git a/test/simple_source/bug25/01_inplace_true_divide.py b/test/simple_source/bug25/01_inplace_true_divide.py new file mode 100644 index 00000000..6d7797d2 --- /dev/null +++ b/test/simple_source/bug25/01_inplace_true_divide.py @@ -0,0 +1,4 @@ +# Force INPLACE_TRUE_DIVIDE opcode +from __future__ import division +x = len(__file__) +x /= 2 diff --git a/uncompyle6/parser.py b/uncompyle6/parser.py index ce303056..310ea0c3 100644 --- a/uncompyle6/parser.py +++ b/uncompyle6/parser.py @@ -411,12 +411,12 @@ class PythonParser(GenericASTBuilder): def p_setcomp(self, args): """ - comp_iter ::= comp_if comp_iter ::= comp_for comp_iter ::= comp_body comp_body ::= gen_comp_body gen_comp_body ::= expr YIELD_VALUE POP_TOP + comp_iter ::= comp_if comp_if ::= expr jmp_false comp_iter """ diff --git a/uncompyle6/parsers/parse25.py b/uncompyle6/parsers/parse25.py index 8fc9be6a..aa1bb6ba 100644 --- a/uncompyle6/parsers/parse25.py +++ b/uncompyle6/parsers/parse25.py @@ -58,19 +58,22 @@ class Python25Parser(Python26Parser): withasstmt ::= expr setupwithas designator suite_stmts_opt POP_BLOCK LOAD_CONST COME_FROM WITH_CLEANUP END_FINALLY assert2 ::= assert_expr jmp_true LOAD_ASSERT expr CALL_FUNCTION_1 RAISE_VARARGS_1 - stmt ::= classdefdeco classdefdeco ::= classdefdeco1 designator classdefdeco1 ::= expr classdefdeco1 CALL_FUNCTION_1 classdefdeco1 ::= expr classdefdeco2 CALL_FUNCTION_1 classdefdeco2 ::= LOAD_CONST expr mkfunc CALL_FUNCTION_0 BUILD_CLASS + kv3 ::= expr expr STORE_MAP + kvlist ::= kvlist kv3 mkfuncdeco ::= expr mkfuncdeco CALL_FUNCTION_1 ret_cond ::= expr jmp_false_then expr RETURN_END_IF POP_TOP ret_expr_or_cond + return_if_lambda ::= RETURN_END_IF_LAMBDA POP_TOP return_if_stmt ::= ret_expr RETURN_END_IF POP_TOP return_if_stmts ::= return_if_stmt return_stmt ::= ret_expr RETURN_END_IF POP_TOP return_stmt ::= ret_expr RETURN_VALUE POP_TOP - stmt ::= conditional_lambda setupwithas ::= DUP_TOP LOAD_ATTR ROT_TWO LOAD_ATTR CALL_FUNCTION_0 setup_finally + stmt ::= classdefdeco + stmt ::= conditional_lambda """) super(Python25Parser, self).add_custom_rules(tokens, customize) if self.version == 2.5: