You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 09:22:40 +08:00
cmp_list -> compare_chained ...
to better match the Python AST name Compare. Relates to Issue #29
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
# In Python 3.3+ this uses grammar rule
|
# In Python 3.3+ this uses grammar rule
|
||||||
# cmp_list2 ::= expr COMPARE_OP RETURN_VALUE
|
# compare_chained2 ::= expr COMPARE_OP RETURN_VALUE
|
||||||
|
|
||||||
def _is_valid_netmask(self, netmask):
|
def _is_valid_netmask(self, netmask):
|
||||||
return 0 <= netmask <= self._max_prefixlen
|
return 0 <= netmask <= self._max_prefixlen
|
||||||
|
@@ -504,14 +504,17 @@ class PythonParser(GenericASTBuilder):
|
|||||||
return_lambda ::= ret_expr RETURN_VALUE_LAMBDA LAMBDA_MARKER
|
return_lambda ::= ret_expr RETURN_VALUE_LAMBDA LAMBDA_MARKER
|
||||||
return_lambda ::= ret_expr RETURN_VALUE_LAMBDA
|
return_lambda ::= ret_expr RETURN_VALUE_LAMBDA
|
||||||
|
|
||||||
# Doesn't seemt to be used anymore, but other conditional_lambda's are
|
# Doesn't seem to be used anymore, but other conditional_lambda's are
|
||||||
# conditional_lambda ::= expr jmp_false return_if_stmt return_stmt LAMBDA_MARKER
|
# conditional_lambda ::= expr jmp_false return_if_stmt return_stmt LAMBDA_MARKER
|
||||||
|
|
||||||
cmp ::= cmp_list
|
cmp ::= compare_chained
|
||||||
cmp ::= compare
|
cmp ::= compare
|
||||||
compare ::= expr expr COMPARE_OP
|
compare ::= expr expr COMPARE_OP
|
||||||
cmp_list ::= expr cmp_list1 ROT_TWO POP_TOP _come_from
|
|
||||||
cmp_list2 ::= expr COMPARE_OP JUMP_FORWARD
|
# A compare_chained is two comparisions like x <= y <= z
|
||||||
|
compare_chained ::= expr compare_chained1 ROT_TWO POP_TOP _come_from
|
||||||
|
compare_chained2 ::= expr COMPARE_OP JUMP_FORWARD
|
||||||
|
|
||||||
mapexpr ::= BUILD_MAP kvlist
|
mapexpr ::= BUILD_MAP kvlist
|
||||||
|
|
||||||
kvlist ::= kvlist kv
|
kvlist ::= kvlist kv
|
||||||
|
@@ -203,8 +203,10 @@ class Python2Parser(PythonParser):
|
|||||||
binary_subscr2 ::= expr expr DUP_TOPX_2 BINARY_SUBSCR
|
binary_subscr2 ::= expr expr DUP_TOPX_2 BINARY_SUBSCR
|
||||||
|
|
||||||
conditional ::= expr jmp_false expr JUMP_ABSOLUTE expr
|
conditional ::= expr jmp_false expr JUMP_ABSOLUTE expr
|
||||||
cmp_list2 ::= expr COMPARE_OP RETURN_VALUE
|
|
||||||
cmp_list2 ::= expr COMPARE_OP RETURN_VALUE_LAMBDA
|
# compare_chained2 is used in a "chained_compare": x <= y <= z
|
||||||
|
compare_chained2 ::= expr COMPARE_OP RETURN_VALUE
|
||||||
|
compare_chained2 ::= expr COMPARE_OP RETURN_VALUE_LAMBDA
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def p_slice2(self, args):
|
def p_slice2(self, args):
|
||||||
|
@@ -244,9 +244,11 @@ class Python26Parser(Python2Parser):
|
|||||||
"""
|
"""
|
||||||
conditional ::= expr jmp_false expr jf_cf_pop expr come_from_opt
|
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
|
and ::= expr JUMP_IF_FALSE POP_TOP expr JUMP_IF_FALSE POP_TOP
|
||||||
cmp_list ::= expr cmp_list1 ROT_TWO COME_FROM POP_TOP _come_from
|
|
||||||
cmp_list1 ::= expr DUP_TOP ROT_THREE COMPARE_OP jmp_false cmp_list1 _come_from
|
# compare_chained is like x <= y <= z
|
||||||
cmp_list1 ::= expr DUP_TOP ROT_THREE COMPARE_OP jmp_false cmp_list2 _come_from
|
compare_chained ::= expr compare_chained1 ROT_TWO COME_FROM POP_TOP _come_from
|
||||||
|
compare_chained1 ::= expr DUP_TOP ROT_THREE COMPARE_OP jmp_false compare_chained1 _come_from
|
||||||
|
compare_chained1 ::= expr DUP_TOP ROT_THREE COMPARE_OP jmp_false compare_chained2 _come_from
|
||||||
|
|
||||||
return_if_lambda ::= RETURN_END_IF_LAMBDA POP_TOP
|
return_if_lambda ::= RETURN_END_IF_LAMBDA POP_TOP
|
||||||
conditional_lambda ::= expr jmp_false_then expr return_if_lambda
|
conditional_lambda ::= expr jmp_false_then expr return_if_lambda
|
||||||
|
@@ -77,12 +77,11 @@ class Python27Parser(Python2Parser):
|
|||||||
or ::= expr JUMP_IF_TRUE_OR_POP expr COME_FROM
|
or ::= expr JUMP_IF_TRUE_OR_POP expr COME_FROM
|
||||||
and ::= expr JUMP_IF_FALSE_OR_POP expr COME_FROM
|
and ::= expr JUMP_IF_FALSE_OR_POP expr COME_FROM
|
||||||
|
|
||||||
cmp_list1 ::= expr DUP_TOP ROT_THREE
|
# compare_chained1 is used exclusively in chained_compare
|
||||||
COMPARE_OP JUMP_IF_FALSE_OR_POP
|
compare_chained1 ::= expr DUP_TOP ROT_THREE COMPARE_OP JUMP_IF_FALSE_OR_POP
|
||||||
cmp_list1 COME_FROM
|
compare_chained1 COME_FROM
|
||||||
cmp_list1 ::= expr DUP_TOP ROT_THREE
|
compare_chained1 ::= expr DUP_TOP ROT_THREE COMPARE_OP JUMP_IF_FALSE_OR_POP
|
||||||
COMPARE_OP JUMP_IF_FALSE_OR_POP
|
compare_chained2 COME_FROM
|
||||||
cmp_list2 COME_FROM
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def p_stmt27(self, args):
|
def p_stmt27(self, args):
|
||||||
|
@@ -334,10 +334,11 @@ class Python3Parser(PythonParser):
|
|||||||
or ::= expr JUMP_IF_TRUE_OR_POP expr COME_FROM
|
or ::= expr JUMP_IF_TRUE_OR_POP expr COME_FROM
|
||||||
and ::= expr JUMP_IF_FALSE_OR_POP expr COME_FROM
|
and ::= expr JUMP_IF_FALSE_OR_POP expr COME_FROM
|
||||||
|
|
||||||
cmp_list1 ::= expr DUP_TOP ROT_THREE COMPARE_OP JUMP_IF_FALSE_OR_POP
|
# compare_chained1 is used exclusively in chained_compare
|
||||||
cmp_list1 COME_FROM
|
compare_chained1 ::= expr DUP_TOP ROT_THREE COMPARE_OP JUMP_IF_FALSE_OR_POP
|
||||||
cmp_list1 ::= expr DUP_TOP ROT_THREE COMPARE_OP JUMP_IF_FALSE_OR_POP
|
compare_chained1 COME_FROM
|
||||||
cmp_list2 COME_FROM
|
compare_chained1 ::= expr DUP_TOP ROT_THREE COMPARE_OP JUMP_IF_FALSE_OR_POP
|
||||||
|
compare_chained2 COME_FROM
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def p_stmt3(self, args):
|
def p_stmt3(self, args):
|
||||||
|
@@ -11,7 +11,8 @@ class Python32Parser(Python3Parser):
|
|||||||
def p_32to35(self, args):
|
def p_32to35(self, args):
|
||||||
"""
|
"""
|
||||||
conditional ::= expr jmp_false expr jump_forward_else expr COME_FROM
|
conditional ::= expr jmp_false expr jump_forward_else expr COME_FROM
|
||||||
cmp_list2 ::= expr COMPARE_OP RETURN_VALUE
|
# used exclusively in compare_chained
|
||||||
|
compare_chained2 ::= expr COMPARE_OP RETURN_VALUE
|
||||||
|
|
||||||
# Store locals is only in Python 3.0 to 3.3
|
# Store locals is only in Python 3.0 to 3.3
|
||||||
stmt ::= store_locals
|
stmt ::= store_locals
|
||||||
@@ -57,7 +58,7 @@ class Python32Parser(Python3Parser):
|
|||||||
|
|
||||||
def add_custom_rules(self, tokens, customize):
|
def add_custom_rules(self, tokens, customize):
|
||||||
# self.remove_rules("""
|
# self.remove_rules("""
|
||||||
# cmp_list2 ::= expr COMPARE_OP RETURN_VALUE
|
# compare_chained2 ::= expr COMPARE_OP RETURN_VALUE
|
||||||
# """)
|
# """)
|
||||||
super(Python32Parser, self).add_custom_rules(tokens, customize)
|
super(Python32Parser, self).add_custom_rules(tokens, customize)
|
||||||
for i, token in enumerate(tokens):
|
for i, token in enumerate(tokens):
|
||||||
|
@@ -193,9 +193,9 @@ TABLE_DIRECT = {
|
|||||||
'conditional_lambda': ( '%c if %c else %c', 2, 0, 4),
|
'conditional_lambda': ( '%c if %c else %c', 2, 0, 4),
|
||||||
|
|
||||||
'compare': ( '%p %[-1]{pattr.replace("-", " ")} %p', (0, 19), (1, 19) ),
|
'compare': ( '%p %[-1]{pattr.replace("-", " ")} %p', (0, 19), (1, 19) ),
|
||||||
'cmp_list': ( '%p %p', (0, 29), (1, 30)),
|
'compare_chained': ( '%p %p', (0, 29), (1, 30)),
|
||||||
'cmp_list1': ( '%[3]{pattr} %p %p', (0, 19), (-2, 19)),
|
'compare_chained1': ( '%[3]{pattr} %p %p', (0, 19), (-2, 19)),
|
||||||
'cmp_list2': ( '%[1]{pattr} %p', (0, 19)),
|
'compare_chained2': ( '%[1]{pattr} %p', (0, 19)),
|
||||||
# 'classdef': (), # handled by n_classdef()
|
# 'classdef': (), # handled by n_classdef()
|
||||||
'funcdef': ( '\n\n%|def %c\n', -2), # -2 to handle closures
|
'funcdef': ( '\n\n%|def %c\n', -2), # -2 to handle closures
|
||||||
'funcdefdeco': ( '\n\n%c', 0),
|
'funcdefdeco': ( '\n\n%c', 0),
|
||||||
|
Reference in New Issue
Block a user