]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39890: Don't mutate the AST when compiling starred assignments (GH-18833)
authorBrandt Bucher <brandtbucher@gmail.com>
Sun, 8 Mar 2020 03:44:18 +0000 (19:44 -0800)
committerGitHub <noreply@github.com>
Sun, 8 Mar 2020 03:44:18 +0000 (03:44 +0000)
Python/compile.c

index f603e3d29e539d17ebdfab7815186fa8df7d3cf8..f228e16079b2899c352273006485b49040d87fd8 100644 (file)
@@ -3765,7 +3765,6 @@ assignment_helper(struct compiler *c, asdl_seq *elts)
                     "star-unpacking assignment");
             ADDOP_I(c, UNPACK_EX, (i + ((n-i-1) << 8)));
             seen_star = 1;
-            asdl_seq_SET(elts, i, elt->v.Starred.value);
         }
         else if (elt->kind == Starred_kind) {
             return compiler_error(c,
@@ -3775,7 +3774,10 @@ assignment_helper(struct compiler *c, asdl_seq *elts)
     if (!seen_star) {
         ADDOP_I(c, UNPACK_SEQUENCE, n);
     }
-    VISIT_SEQ(c, expr, elts);
+    for (i = 0; i < n; i++) {
+        expr_ty elt = asdl_seq_GET(elts, i);
+        VISIT(c, expr, elt->kind != Starred_kind ? elt : elt->v.Starred.value);
+    }
     return 1;
 }