diff --git a/test/bytecode_2.2/01_augmented_assign.pyc b/test/bytecode_2.2/01_augmented_assign.pyc new file mode 100644 index 00000000..bb3827c9 Binary files /dev/null and b/test/bytecode_2.2/01_augmented_assign.pyc differ diff --git a/test/bytecode_2.5/01_augmented_assign.pyc b/test/bytecode_2.5/01_augmented_assign.pyc new file mode 100644 index 00000000..cb56c8be Binary files /dev/null and b/test/bytecode_2.5/01_augmented_assign.pyc differ diff --git a/test/bytecode_2.6/01_augmented_assign.pyc b/test/bytecode_2.6/01_augmented_assign.pyc new file mode 100644 index 00000000..0577215e Binary files /dev/null and b/test/bytecode_2.6/01_augmented_assign.pyc differ diff --git a/test/bytecode_2.7/01_augmented_assign.pyc b/test/bytecode_2.7/01_augmented_assign.pyc new file mode 100644 index 00000000..0391ed74 Binary files /dev/null and b/test/bytecode_2.7/01_augmented_assign.pyc differ diff --git a/test/bytecode_3.6/01_augmented_assign.pyc b/test/bytecode_3.6/01_augmented_assign.pyc new file mode 100644 index 00000000..3ecec97d Binary files /dev/null and b/test/bytecode_3.6/01_augmented_assign.pyc differ diff --git a/test/simple_source/stmts/01_augmented_assign.py b/test/simple_source/stmts/01_augmented_assign.py new file mode 100644 index 00000000..a91f7279 --- /dev/null +++ b/test/simple_source/stmts/01_augmented_assign.py @@ -0,0 +1,71 @@ +""" +01_augmented_assign.py modified from + +augmentedAssign.py -- source test pattern for augmented assigns + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.crazy-compilers.com/decompyle/ for +for further information +""" + +raise RuntimeError("This program can't be run") + +a = 1 +b = 2 +a += b; # print a # a = a+b = 3 +a -= b; # print a # a = a-b = 1 +a *= b; # print a # a = a*b = 2 +a -= a; # print a # a = a-a = 0 +a += 7*3; # print a # == 21 + +l= [1,2,3] +l[1] *= 3; # print l[1]; # 6 +l[1][2][3] = 7 +l[1][2][3] *= 3; + +# Python 2.x +# augassign1 ::= expr expr inplace_op ROT_TWO STORE_SLICE+0 +l[:] += [9]; # print l + +# Python 2.x +# augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+2 +l[:2] += [9]; # print l + + +# Python 2.x +# augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+1 +l[1:] += [9]; # print l + +# Python 2.x +# augassign1 ::= expr expr inplace_op ROT_FOUR STORE_SLICE+3 +l[1:4] += [9]; # print l + +l += [42,43]; # print l + +a.value = 1 +a.value += 1; +a.b.val = 1 +a.b.val += 1; + +l = [] +for i in range(3): + lj = [] + for j in range(3): + lk = [] + for k in range(3): + lk.append(0) + lj.append(lk) + l.append(lj) + +i = j = k = 1 +def f(): + global i + i += 1 + return i + +l[i][j][k] = 1 +i = 1 +l[f()][j][k] += 1 +# print i, l diff --git a/uncompyle6/parsers/parse2.py b/uncompyle6/parsers/parse2.py index 3dfa8230..a29787b4 100644 --- a/uncompyle6/parsers/parse2.py +++ b/uncompyle6/parsers/parse2.py @@ -117,8 +117,6 @@ class Python2Parser(PythonParser): classdefdeco1 ::= expr classdefdeco2 CALL_FUNCTION_1 classdefdeco2 ::= LOAD_CONST expr mkfunc CALL_FUNCTION_0 BUILD_CLASS - assert2 ::= assert_expr jmp_true LOAD_ASSERT expr CALL_FUNCTION_1 RAISE_VARARGS_1 - assert_expr ::= expr assert_expr ::= assert_expr_or assert_expr ::= assert_expr_and @@ -215,10 +213,12 @@ class Python2Parser(PythonParser): designator ::= expr expr STORE_SLICE+1 designator ::= expr expr STORE_SLICE+2 designator ::= expr expr expr STORE_SLICE+3 - augassign1 ::= expr expr inplace_op ROT_TWO STORE_SLICE+0 + + augassign1 ::= expr expr inplace_op ROT_FOUR STORE_SLICE+3 augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+1 augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+2 - augassign1 ::= expr expr inplace_op ROT_FOUR STORE_SLICE+3 + augassign1 ::= expr expr inplace_op ROT_TWO STORE_SLICE+0 + slice0 ::= expr SLICE+0 slice0 ::= expr DUP_TOP SLICE+0 slice1 ::= expr expr SLICE+1 diff --git a/uncompyle6/parsers/parse27.py b/uncompyle6/parsers/parse27.py index 83ce8b24..81b62acd 100644 --- a/uncompyle6/parsers/parse27.py +++ b/uncompyle6/parsers/parse27.py @@ -91,7 +91,8 @@ class Python27Parser(Python2Parser): assert ::= assert_expr jmp_true LOAD_ASSERT RAISE_VARARGS_1 # assert condition, expr - assert2 ::= assert_expr jmp_true LOAD_ASSERT expr RAISE_VARARGS_2 + assert2 ::= assert_expr jmp_true LOAD_ASSERT expr CALL_FUNCTION_1 RAISE_VARARGS_1 + withstmt ::= expr SETUP_WITH POP_TOP suite_stmts_opt POP_BLOCK LOAD_CONST COME_FROM_WITH