You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 01:09:52 +08:00
@@ -31,7 +31,7 @@ def test_grammar():
|
|||||||
expect_lhs.add('kv3')
|
expect_lhs.add('kv3')
|
||||||
|
|
||||||
unused_rhs = unused_rhs.union(set("""
|
unused_rhs = unused_rhs.union(set("""
|
||||||
except_pop_except generator_exp classdefdeco2
|
except_pop_except generator_exp
|
||||||
dict
|
dict
|
||||||
""".split()))
|
""".split()))
|
||||||
if PYTHON_VERSION >= 3.0:
|
if PYTHON_VERSION >= 3.0:
|
||||||
@@ -39,6 +39,8 @@ def test_grammar():
|
|||||||
expect_lhs.add("annotate_tuple")
|
expect_lhs.add("annotate_tuple")
|
||||||
unused_rhs.add("mkfunc_annotate")
|
unused_rhs.add("mkfunc_annotate")
|
||||||
unused_rhs.add('call')
|
unused_rhs.add('call')
|
||||||
|
unused_rhs.add("dict_comp")
|
||||||
|
unused_rhs.add("classdefdeco1")
|
||||||
if PYTHON_VERSION < 3.6:
|
if PYTHON_VERSION < 3.6:
|
||||||
# 3.6 has at least one non-custom call rule
|
# 3.6 has at least one non-custom call rule
|
||||||
# the others don't
|
# the others don't
|
||||||
|
@@ -298,19 +298,8 @@ class Python2Parser(PythonParser):
|
|||||||
# The order of opname listed is roughly sorted below
|
# The order of opname listed is roughly sorted below
|
||||||
if opname_base in ('BUILD_LIST', 'BUILD_SET', 'BUILD_TUPLE'):
|
if opname_base in ('BUILD_LIST', 'BUILD_SET', 'BUILD_TUPLE'):
|
||||||
v = token.attr
|
v = token.attr
|
||||||
thousands = (v//1024)
|
|
||||||
thirty32s = ((v//32) % 32)
|
|
||||||
if thirty32s > 0:
|
|
||||||
rule = "expr32 ::=%s" % (' expr' * 32)
|
|
||||||
self.add_unique_rule(rule, opname_base, v, customize)
|
|
||||||
self.seen32 = True
|
|
||||||
if thousands > 0:
|
|
||||||
self.add_unique_rule("expr1024 ::=%s" % (' expr32' * 32),
|
|
||||||
opname_base, v, customize)
|
|
||||||
self.seen1024 = True
|
|
||||||
collection = opname_base[opname_base.find('_')+1:].lower()
|
collection = opname_base[opname_base.find('_')+1:].lower()
|
||||||
rule = (('%s ::= ' % collection) + 'expr1024 '*thousands +
|
rule = '%s ::= %s%s' % (collection, (token.attr * 'expr '), opname)
|
||||||
'expr32 '*thirty32s + 'expr '*(v % 32) + opname)
|
|
||||||
self.add_unique_rules([
|
self.add_unique_rules([
|
||||||
"expr ::= %s" % collection,
|
"expr ::= %s" % collection,
|
||||||
rule], customize)
|
rule], customize)
|
||||||
|
@@ -83,8 +83,6 @@ class Python3Parser(PythonParser):
|
|||||||
stmt ::= dict_comp_func
|
stmt ::= dict_comp_func
|
||||||
dict_comp_func ::= BUILD_MAP_0 LOAD_FAST FOR_ITER store
|
dict_comp_func ::= BUILD_MAP_0 LOAD_FAST FOR_ITER store
|
||||||
comp_iter JUMP_BACK RETURN_VALUE RETURN_LAST
|
comp_iter JUMP_BACK RETURN_VALUE RETURN_LAST
|
||||||
dict_comp ::= LOAD_DICTCOMP LOAD_CONST MAKE_FUNCTION_0 expr
|
|
||||||
GET_ITER CALL_FUNCTION_1
|
|
||||||
|
|
||||||
comp_iter ::= comp_if
|
comp_iter ::= comp_if
|
||||||
comp_iter ::= comp_if_not
|
comp_iter ::= comp_if_not
|
||||||
@@ -124,8 +122,6 @@ class Python3Parser(PythonParser):
|
|||||||
|
|
||||||
stmt ::= classdefdeco
|
stmt ::= classdefdeco
|
||||||
classdefdeco ::= classdefdeco1 store
|
classdefdeco ::= classdefdeco1 store
|
||||||
classdefdeco1 ::= expr classdefdeco1 CALL_FUNCTION_1
|
|
||||||
classdefdeco1 ::= expr classdefdeco2 CALL_FUNCTION_1
|
|
||||||
|
|
||||||
assert ::= assert_expr jmp_true LOAD_ASSERT RAISE_VARARGS_1 COME_FROM
|
assert ::= assert_expr jmp_true LOAD_ASSERT RAISE_VARARGS_1 COME_FROM
|
||||||
|
|
||||||
@@ -718,6 +714,16 @@ class Python3Parser(PythonParser):
|
|||||||
'CALL_FUNCTION_VAR',
|
'CALL_FUNCTION_VAR',
|
||||||
'CALL_FUNCTION_VAR_KW'))
|
'CALL_FUNCTION_VAR_KW'))
|
||||||
or opname.startswith('CALL_FUNCTION_KW')):
|
or opname.startswith('CALL_FUNCTION_KW')):
|
||||||
|
|
||||||
|
if opname == 'CALL_FUNCTION' and token.attr == 1:
|
||||||
|
rule = """
|
||||||
|
dict_comp ::= LOAD_DICTCOMP LOAD_CONST MAKE_FUNCTION_0 expr
|
||||||
|
GET_ITER CALL_FUNCTION_1
|
||||||
|
classdefdeco1 ::= expr classdefdeco1 CALL_FUNCTION_1
|
||||||
|
classdefdeco1 ::= expr classdefdeco2 CALL_FUNCTION_1
|
||||||
|
"""
|
||||||
|
self.addRule(rule, nop_func)
|
||||||
|
|
||||||
self.custom_classfunc_rule(opname, token, customize,
|
self.custom_classfunc_rule(opname, token, customize,
|
||||||
seen_LOAD_BUILD_CLASS,
|
seen_LOAD_BUILD_CLASS,
|
||||||
seen_GET_AWAITABLE_YIELD_FROM, tokens[i+1])
|
seen_GET_AWAITABLE_YIELD_FROM, tokens[i+1])
|
||||||
@@ -884,9 +890,11 @@ class Python3Parser(PythonParser):
|
|||||||
% ('expr ' * args_pos, kwargs_str, opname))
|
% ('expr ' * args_pos, kwargs_str, opname))
|
||||||
|
|
||||||
self.add_unique_rule(rule, opname, token.attr, customize)
|
self.add_unique_rule(rule, opname, token.attr, customize)
|
||||||
rule = ('mkfunc ::= %sload_closure load_genexpr %s'
|
|
||||||
% ('pos_arg ' * args_pos, opname))
|
if args_kw == 0:
|
||||||
self.add_unique_rule(rule, opname, token.attr, customize)
|
rule = ('mkfunc ::= %sload_closure load_genexpr %s'
|
||||||
|
% ('pos_arg ' * args_pos, opname))
|
||||||
|
self.add_unique_rule(rule, opname, token.attr, customize)
|
||||||
|
|
||||||
if self.version < 3.4:
|
if self.version < 3.4:
|
||||||
rule = ('mkfunc ::= %sload_closure LOAD_CONST %s'
|
rule = ('mkfunc ::= %sload_closure LOAD_CONST %s'
|
||||||
|
Reference in New Issue
Block a user