diff --git a/test/Makefile b/test/Makefile index 1e48c9fd..b73cfe00 100644 --- a/test/Makefile +++ b/test/Makefile @@ -139,7 +139,7 @@ grammar-coverage-2.6: grammar-coverage-2.7: -rm $(COVER_DIR)/spark-grammar-2.7.cover || true SPARK_PARSER_COVERAGE=$(COVER_DIR)/spark-grammar-2.7.cover $(PYTHON) test_pythonlib.py --bytecode-2.7 - SPARK_PARSER_COVERAGE=$(COVER_DIR)/spark-grammar-2.7.cover $(PYTHON) test_pyenvlib.py --2.7.14 --max=400 + SPARK_PARSER_COVERAGE=$(COVER_DIR)/spark-grammar-2.7.cover $(PYTHON) test_pyenvlib.py --2.7.14 --max=600 #: Get grammar coverage for Python 3.0 grammar-coverage-3.0: diff --git a/test/bytecode_2.7/03_if_elif.pyc b/test/bytecode_2.7/03_if_elif.pyc index 085dd093..cae0ce45 100644 Binary files a/test/bytecode_2.7/03_if_elif.pyc and b/test/bytecode_2.7/03_if_elif.pyc differ diff --git a/test/bytecode_2.7/09_whiletrue_bug.pyc b/test/bytecode_2.7/09_whiletrue_bug.pyc index cd16276a..941c7cc4 100644 Binary files a/test/bytecode_2.7/09_whiletrue_bug.pyc and b/test/bytecode_2.7/09_whiletrue_bug.pyc differ diff --git a/test/bytecode_3.6/03_if_elif.pyc b/test/bytecode_3.6/03_if_elif.pyc new file mode 100644 index 00000000..a4e8a248 Binary files /dev/null and b/test/bytecode_3.6/03_if_elif.pyc differ diff --git a/test/grammar-cover/grammar.sh b/test/grammar-cover/grammar.sh index 5f12d5be..2fa178b0 100755 --- a/test/grammar-cover/grammar.sh +++ b/test/grammar-cover/grammar.sh @@ -21,6 +21,7 @@ while [[ -n $1 ]] ; do fi tmpdir=$workdir/../../tmp/grammar-cover + COVER_FILE=${tmpdir}/spark-grammar-${SHORT_VERSION}.cover [[ -d $tmpdir ]] || mkdir $tmpdir cd $workdir/../.. if [[ $SHORT_VERSION > 2.5 ]] ; then @@ -31,10 +32,13 @@ while [[ -n $1 ]] ; do GRAMMAR_TXT=$tmpdir/grammar-${SHORT_VERSION}.txt pyenv local ${LONG_VERSION} cd ./test + if [[ -r $COVER_FILE ]]; then + rm $COVER_FILE + fi if [[ -r $GRAMMAR_TXT ]]; then GRAMMAR_SAVE_TXT=${tmpdir}/grammar-${SHORT_VERSION}-save.txt cp $GRAMMAR_TXT $GRAMMAR_SAVE_TXT fi make grammar-coverage-${SHORT_VERSION}; - spark-parser-coverage --path ${tmpdir}/spark-grammar-${SHORT_VERSION}.cover > $GRAMMAR_TXT + spark-parser-coverage --max-count=3000 --path $COVER_FILE > $GRAMMAR_TXT done diff --git a/uncompyle6/parser.py b/uncompyle6/parser.py index 575aba16..d7fff593 100644 --- a/uncompyle6/parser.py +++ b/uncompyle6/parser.py @@ -567,9 +567,6 @@ class PythonParser(GenericASTBuilder): # Positional arguments in make_function pos_arg ::= expr - - expr32 ::= expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr expr - expr1024 ::= expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 expr32 ''' def p_store(self, args): diff --git a/uncompyle6/parsers/parse2.py b/uncompyle6/parsers/parse2.py index adc67f6a..35f7740b 100644 --- a/uncompyle6/parsers/parse2.py +++ b/uncompyle6/parsers/parse2.py @@ -109,11 +109,8 @@ class Python2Parser(PythonParser): _mklambda ::= load_closure mklambda kwarg ::= LOAD_CONST expr - kvlist ::= kvlist kv3 kv3 ::= expr expr STORE_MAP - dict ::= BUILD_MAP kvlist - classdef ::= buildclass store buildclass ::= LOAD_CONST expr mkfunc diff --git a/uncompyle6/parsers/parse25.py b/uncompyle6/parsers/parse25.py index 1e5f6981..a60ce46b 100644 --- a/uncompyle6/parsers/parse25.py +++ b/uncompyle6/parsers/parse25.py @@ -65,7 +65,6 @@ class Python25Parser(Python26Parser): classdefdeco1 ::= expr classdefdeco2 CALL_FUNCTION_1 classdefdeco2 ::= LOAD_CONST expr mkfunc CALL_FUNCTION_0 BUILD_CLASS kv3 ::= expr expr STORE_MAP - kvlist ::= kvlist kv3 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 diff --git a/uncompyle6/parsers/parse26.py b/uncompyle6/parsers/parse26.py index cf0c45f4..0b680d27 100644 --- a/uncompyle6/parsers/parse26.py +++ b/uncompyle6/parsers/parse26.py @@ -261,6 +261,9 @@ class Python26Parser(Python2Parser): def p_misc26(self, args): """ + dict ::= BUILD_MAP kvlist + kvlist ::= kvlist kv3 + conditional ::= expr jmp_false expr jf_cf_pop expr come_from_opt and ::= expr JUMP_IF_FALSE POP_TOP expr JUMP_IF_FALSE POP_TOP diff --git a/uncompyle6/parsers/parse27.py b/uncompyle6/parsers/parse27.py index f9f7753e..9b5c1819 100644 --- a/uncompyle6/parsers/parse27.py +++ b/uncompyle6/parsers/parse27.py @@ -38,8 +38,6 @@ class Python27Parser(Python2Parser): comp_for ::= expr for_iter store comp_iter JUMP_BACK comp_iter ::= comp_if - comp_iter ::= comp_if_not - comp_if_not ::= expr jmp_true comp_iter comp_iter ::= comp_body dict_comp_body ::= expr expr MAP_ADD diff --git a/uncompyle6/parsers/parse3.py b/uncompyle6/parsers/parse3.py index f93a7a8a..5784f7bb 100644 --- a/uncompyle6/parsers/parse3.py +++ b/uncompyle6/parsers/parse3.py @@ -620,9 +620,7 @@ class Python3Parser(PythonParser): self.addRule(rule, nop_func) elif opname.startswith('BUILD_LIST_UNPACK'): v = token.attr - rule = ('build_list_unpack ::= ' + 'expr1024 ' * int(v//1024) + - 'expr32 ' * int((v//32) % 32) + - 'expr ' * (v % 32) + opname) + rule = 'build_list_unpack ::= %s%s' % ('expr ' * v, opname) self.addRule(rule, nop_func) rule = 'expr ::= build_list_unpack' self.addRule(rule, nop_func) @@ -665,9 +663,7 @@ class Python3Parser(PythonParser): self.add_unique_rule(rule, opname, token.attr, customize) elif opname.startswith('BUILD_MAP_UNPACK_WITH_CALL'): v = token.attr - rule = ('build_map_unpack_with_call ::= ' + 'expr1024 ' * int(v//1024) + - 'expr32 ' * int((v//32) % 32) + - 'expr ' * (v % 32) + opname) + rule = 'build_map_unpack_with_call ::= %s%s' % ('expr ' * v, opname) self.addRule(rule, nop_func) elif opname.startswith('BUILD_TUPLE_UNPACK_WITH_CALL'): v = token.attr @@ -690,9 +686,7 @@ class Python3Parser(PythonParser): self.add_unique_rule(rule, opname, token.attr, customize) if not is_LOAD_CLOSURE or v == 0: collection = opname_base[opname_base.find('_')+1:].lower() - rule = (('%s ::= ' % collection) + 'expr1024 ' * int(v//1024) + - 'expr32 ' * int((v//32) % 32) + - 'expr ' * (v % 32) + opname) + rule = '%s ::= %s%s' % (collection, 'expr ' * v, opname) self.add_unique_rules([ 'expr ::= %s' % collection, rule], customize)