summaryrefslogtreecommitdiffstats
path: root/Python/ast.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/ast.c')
-rw-r--r--Python/ast.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/Python/ast.c b/Python/ast.c
index 80e6354..ffd5679 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -2679,6 +2679,18 @@ ast_for_exec_stmt(struct compiling *c, const node *n)
expr1 = ast_for_expr(c, CHILD(n, 1));
if (!expr1)
return NULL;
+
+ if (expr1->kind == Tuple_kind && n_children < 4 &&
+ (asdl_seq_LEN(expr1->v.Tuple.elts) == 2 ||
+ asdl_seq_LEN(expr1->v.Tuple.elts) == 3)) {
+ /* Backwards compatibility: pass exec args as a tuple */
+ globals = (expr_ty) asdl_seq_GET(expr1->v.Tuple.elts, 1);
+ if (asdl_seq_LEN(expr1->v.Tuple.elts) == 3) {
+ locals = (expr_ty) asdl_seq_GET(expr1->v.Tuple.elts, 2);
+ }
+ expr1 = (expr_ty) asdl_seq_GET(expr1->v.Tuple.elts, 0);
+ }
+
if (n_children >= 4) {
globals = ast_for_expr(c, CHILD(n, 3));
if (!globals)