From ad755b27a3b377175431260ca767cc36233a0239 Mon Sep 17 00:00:00 2001 From: rocky Date: Sun, 26 Nov 2017 07:13:04 -0500 Subject: [PATCH] Isolaate kv, kv2 and kv3 better --- test/bytecode_3.2/03_map.pyc | Bin 0 -> 742 bytes test/bytecode_3.3/03_map.pyc | Bin 0 -> 746 bytes test/bytecode_3.5/03_map.pyc | Bin 0 -> 598 bytes uncompyle6/parser.py | 6 +----- uncompyle6/parsers/parse22.py | 9 ++++++--- uncompyle6/parsers/parse24.py | 9 +++++++++ uncompyle6/parsers/parse25.py | 4 ++++ uncompyle6/parsers/parse26.py | 2 ++ uncompyle6/parsers/parse27.py | 2 ++ uncompyle6/parsers/parse32.py | 1 + 10 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 test/bytecode_3.2/03_map.pyc create mode 100644 test/bytecode_3.3/03_map.pyc create mode 100644 test/bytecode_3.5/03_map.pyc diff --git a/test/bytecode_3.2/03_map.pyc b/test/bytecode_3.2/03_map.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85712a6ea2edf4227a008146fabcd466c6aa68aa GIT binary patch literal 742 zcmYk(X-^YT7{&2Z%3501mbHMO#kx^!p|~J|;>zNJ3-YEZJd=2m)=n5F(XZ^M@J!94 z&SdWYcVFC@+_|l6E>p^vPA~A^m6mt)M87of3JkCm>ed5GE4{Ejr5`q+48n$#3~X4* z!g9(8Y*ZP8jVlwdNhJ>}C{wU$Wd=5@%)#cBB5Xlfge@uhQ*nQ;z?4hy^d!+2Z9;1Gy{q5qUyr=EP zDGhtn@Q1HCs)j`W3Tg=Ip=3iIk&jve9k`S8;&?nIqiJGe&<_`I=^tn`H}<9cN}w`an|{Y zgUuzSjV*aKw?_E6b|Jwp9N>)XLm zc~{GgwHer@hD+{qzZ^UCQ$}Wp)8t4IW&XvXco<(d9;8Q(GprlE9e|rMd#54w1zICOXxBx zpeyJqx`wW!byP$f=msjGGTKC2XdCUIo9Gt0jqadbbQkTReHtrN;|K>F6)G0z;Vh`w zi2KYk?vc&AWs83zp5L>i``o77cedbeTAzF0M%@>db>G{fyJh|E153FtZQA`{OYXJ} zxDPGu9$L=*Xv^-74Z4qP%zb4u?y(KIk8Rw2ZF%>T4ZBZl!hK`2Zq*X*Q=4?(+MHWD zECkh5?WA0)H#=YIC*ilBbSv@5+n?2_(dsnATGT%6eh!P__f9vAqDK2`aid&o)jR8* ZA7_c(R$HgdaIcp%>OGqe{#7RE)n8hhg?0b{ literal 0 HcmV?d00001 diff --git a/uncompyle6/parser.py b/uncompyle6/parser.py index 71d074eb..e09ff429 100644 --- a/uncompyle6/parser.py +++ b/uncompyle6/parser.py @@ -516,13 +516,9 @@ class PythonParser(GenericASTBuilder): mapexpr ::= BUILD_MAP kvlist - kvlist ::= kvlist kv2 - kvlist ::= kvlist kv3 + # Non-null kvlist items are broken out in the indiviual grammars kvlist ::= - kv2 ::= DUP_TOP expr expr ROT_THREE STORE_SUBSCR - kv3 ::= expr expr STORE_MAP - exprlist ::= exprlist expr exprlist ::= expr diff --git a/uncompyle6/parsers/parse22.py b/uncompyle6/parsers/parse22.py index ed0aa2e3..ffa8aafb 100644 --- a/uncompyle6/parsers/parse22.py +++ b/uncompyle6/parsers/parse22.py @@ -18,11 +18,14 @@ class Python22Parser(Python23Parser): COME_FROM POP_TOP COME_FROM list_for ::= expr _for designator list_iter CONTINUE JUMP_FORWARD COME_FROM POP_TOP COME_FROM - - kvlist ::= kvlist kv - kv ::= DUP_TOP expr ROT_TWO expr STORE_SUBSCR ''' + def add_custom_rules(self, tokens, customize): + super(Python22Parser, self).add_custom_rules(tokens, customize) + self.remove_rules(""" + kvlist ::= kvlist kv2 + """) + class Python22ParserSingle(Python23Parser, PythonParserSingle): pass diff --git a/uncompyle6/parsers/parse24.py b/uncompyle6/parsers/parse24.py index 2a904a15..2ce50cf4 100644 --- a/uncompyle6/parsers/parse24.py +++ b/uncompyle6/parsers/parse24.py @@ -47,9 +47,18 @@ class Python24Parser(Python25Parser): # Python 2.5+ adds POP_TOP at the end gen_comp_body ::= expr YIELD_VALUE + + # Python 2.4 + # Python 2.6, 2.7 and 3.3+ use kv3 + # Python 2.3- use kv + kvlist ::= kvlist kv2 + kv2 ::= DUP_TOP expr expr ROT_THREE STORE_SUBSCR ''' def add_custom_rules(self, tokens, customize): + self.remove_rules(""" + kvlist ::= kvlist kv3 + """) super(Python24Parser, self).add_custom_rules(tokens, customize) if self.version == 2.4: self.check_reduce['nop_stmt'] = 'tokens' diff --git a/uncompyle6/parsers/parse25.py b/uncompyle6/parsers/parse25.py index 9e013712..adecc40c 100644 --- a/uncompyle6/parsers/parse25.py +++ b/uncompyle6/parsers/parse25.py @@ -43,6 +43,10 @@ class Python25Parser(Python26Parser): with_cleanup ::= LOAD_FAST DELETE_FAST WITH_CLEANUP END_FINALLY with_cleanup ::= LOAD_NAME DELETE_NAME WITH_CLEANUP END_FINALLY + + + kvlist ::= kvlist kv + kv ::= DUP_TOP expr ROT_TWO expr STORE_SUBSCR """ def add_custom_rules(self, tokens, customize): diff --git a/uncompyle6/parsers/parse26.py b/uncompyle6/parsers/parse26.py index 916f2da9..c9571475 100644 --- a/uncompyle6/parsers/parse26.py +++ b/uncompyle6/parsers/parse26.py @@ -254,6 +254,8 @@ class Python26Parser(Python2Parser): return_if_lambda ::= RETURN_END_IF_LAMBDA POP_TOP conditional_lambda ::= expr jmp_false_then expr return_if_lambda return_stmt_lambda LAMBDA_MARKER + kvlist ::= kvlist kv3 + kv3 ::= expr expr STORE_MAP """ def add_custom_rules(self, tokens, customize): diff --git a/uncompyle6/parsers/parse27.py b/uncompyle6/parsers/parse27.py index 40efe9a3..fc3a5f19 100644 --- a/uncompyle6/parsers/parse27.py +++ b/uncompyle6/parsers/parse27.py @@ -115,6 +115,8 @@ class Python27Parser(Python2Parser): return_if_lambda ::= RETURN_END_IF_LAMBDA COME_FROM conditional_lambda ::= expr jmp_false expr return_if_lambda return_stmt_lambda LAMBDA_MARKER + kvlist ::= kvlist kv3 + kv3 ::= expr expr STORE_MAP """ def add_custom_rules(self, tokens, customize): diff --git a/uncompyle6/parsers/parse32.py b/uncompyle6/parsers/parse32.py index abe1a38b..122d7d1e 100644 --- a/uncompyle6/parsers/parse32.py +++ b/uncompyle6/parsers/parse32.py @@ -49,6 +49,7 @@ class Python32Parser(Python3Parser): stmt ::= del_deref_stmt del_deref_stmt ::= DELETE_DEREF + kv3 ::= expr expr STORE_MAP """ pass