3.8 needs call_stmt -> call

Simplify/regularize how "return" works
This commit is contained in:
rocky
2020-05-18 22:26:18 -04:00
parent 3fb8d90407
commit d7c3b8454b
4 changed files with 15 additions and 6 deletions

View File

@@ -47,8 +47,9 @@ class Python38Parser(Python37Parser):
stmt ::= try_except38
stmt ::= whilestmt38
stmt ::= whileTruestmt38
stmt ::= call
stmt ::= call_stmt
call_stmt ::= call
break ::= POP_BLOCK BREAK_LOOP
break ::= POP_BLOCK POP_TOP BREAK_LOOP
break ::= POP_TOP BREAK_LOOP

View File

@@ -339,7 +339,11 @@ TABLE_DIRECT = {
"raise_stmt1": ("%|raise %c\n", 0),
"raise_stmt3": ("%|raise %c, %c, %c\n", 0, 1, 2),
# "yield": ( "yield %c", 0),
# "return": ( "%|return %c\n", 0),
# Note: we have a custom rule, which calls when we don't
# have "return None"
"return": ( "%|return %c\n", 0),
"return_if_stmt": ("return %c\n", 0),
"ifstmt": (
"%|if %c:\n%+%c%-",

View File

@@ -46,6 +46,10 @@ def customize_for_version38(self, version):
(0, 'expr'), (6, 'store'),
(7, 'suite_stmts') ),
"call_stmt": (
"%|%c\n", 0
),
'except_handler38': (
'%c', (2, 'except_stmts') ),

View File

@@ -510,14 +510,14 @@ class SourceWalker(GenericASTTraversal, object):
self.preorder(node[0])
self.prune()
else:
self.write(self.indent, "return")
# One reason we worry over whether we use "return None" or "return"
# is that inside a generator, "return None" is illegal.
# Thank you, Python!
if self.return_none or not self.is_return_none(node):
self.write(" ")
self.preorder(node[0])
self.println()
self.default(node)
else:
self.template_engine(("return\n"), node)
self.prune() # stop recursing
def n_return_if_stmt(self, node):