diff --git a/test/Makefile b/test/Makefile index c5ac3143..3d4f2ecb 100644 --- a/test/Makefile +++ b/test/Makefile @@ -98,6 +98,11 @@ check-bytecode-2.4: check-bytecode-2.5: $(PYTHON) test_pythonlib.py --bytecode-2.5 +#: Get grammar coverage for Python 2.5 +grammar-coverage-2.5: + SPARK_PARSER_COVERAGE=/tmp/spark-grammar-25.cover $(PYTHON) test_pythonlib.py --bytecode-2.5 + SPARK_PARSER_COVERAGE=/tmp/spark-grammar-25.cover $(PYTHON) test_pyenvlib.py --2.5.6 + #: Get grammar coverage for Python 2.6 grammar-coverage-2.6: SPARK_PARSER_COVERAGE=/tmp/spark-grammar-26.cover $(PYTHON) test_pythonlib.py --bytecode-2.6 diff --git a/test/simple_source/bug22/01_ops.py b/test/simple_source/bug22/01_ops.py index 65f0965f..8931cb4d 100644 --- a/test/simple_source/bug22/01_ops.py +++ b/test/simple_source/bug22/01_ops.py @@ -7,4 +7,7 @@ y **= 1 # INPLACE POWER y >>= 2 # INPLACE_RSHIFT y <<= 2 # INPLACE_LSHIFT y //= 1 # INPLACE_TRUE_DIVIDE +y &= 1 # INPLACE_AND +y ^= 1 # INPLACE_XOR + `y` # UNARY_CONVERT - No in Python 3.x diff --git a/uncompyle6/parsers/parse25.py b/uncompyle6/parsers/parse25.py index 195d15df..4d17dc9a 100644 --- a/uncompyle6/parsers/parse25.py +++ b/uncompyle6/parsers/parse25.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Rocky Bernstein +# Copyright (c) 2016-2017 Rocky Bernstein """ spark grammar differences over Python2.6 for Python 2.5. """ @@ -20,6 +20,7 @@ class Python25Parser(Python26Parser): return_if_stmt ::= ret_expr RETURN_END_IF JUMP_BACK # Python 2.6 uses ROT_TWO instead of the STORE_xxx + # withas is allowed as a "from future" in 2.5 setupwithas ::= DUP_TOP LOAD_ATTR store LOAD_ATTR CALL_FUNCTION_0 setup_finally @@ -27,6 +28,7 @@ class Python25Parser(Python26Parser): store ::= STORE_NAME # Python 2.6 omits ths LOAD_FAST DELETE_FAST below + # withas is allowed as a "from future" in 2.5 withasstmt ::= expr setupwithas designator suite_stmts_opt POP_BLOCK LOAD_CONST COME_FROM with_cleanup diff --git a/uncompyle6/semantics/consts.py b/uncompyle6/semantics/consts.py index 0790fb1b..46b21037 100644 --- a/uncompyle6/semantics/consts.py +++ b/uncompyle6/semantics/consts.py @@ -251,8 +251,6 @@ TABLE_DIRECT = { 'except_cond1': ( '%|except %c:\n', 1 ), 'except_suite': ( '%+%c%-%C', 0, (1, maxint, '') ), 'except_suite_finalize': ( '%+%c%-%C', 1, (3, maxint, '') ), - 'withstmt': ( '%|with %c:\n%+%c%-', 0, 3), - 'withasstmt': ( '%|with %c as %c:\n%+%c%-', 0, 2, 3), 'passstmt': ( '%|pass\n', ), 'STORE_FAST': ( '%{pattr}', ), 'kv': ( '%c: %c', 3, 1 ), diff --git a/uncompyle6/semantics/pysource.py b/uncompyle6/semantics/pysource.py index 6359b4a7..d893d7d2 100644 --- a/uncompyle6/semantics/pysource.py +++ b/uncompyle6/semantics/pysource.py @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016 by Rocky Bernstein +# Copyright (c) 2015-2017 by Rocky Bernstein # Copyright (c) 2005 by Dan Pascu # Copyright (c) 2000-2002 by hartmut Goebel # Copyright (c) 1999 John Aycock @@ -241,6 +241,9 @@ class SourceWalker(GenericASTTraversal, object): TABLE_DIRECT.update({ 'importmultiple': ( '%|import %c%c\n', 2, 3 ), 'import_cont' : ( ', %c', 2 ), + # With/as is allowed as "from future" thing in 2.5 + 'withstmt': ( '%|with %c:\n%+%c%-', 0, 3), + 'withasstmt': ( '%|with %c as %c:\n%+%c%-', 0, 2, 3), }) ########################################