]> granicus.if.org Git - python/commitdiff
SF patch 103589: Fix handling of cell vars that are either * or ** parameters.
authorJeremy Hylton <jeremy@alum.mit.edu>
Fri, 9 Feb 2001 22:55:26 +0000 (22:55 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Fri, 9 Feb 2001 22:55:26 +0000 (22:55 +0000)
(Nick Mathewson)

Remove to XXX comments

Python/compile.c

index eb2ba908ca976f51edfe1ee4f87ab02c1096ad8f..8370e0917517c73c0fdbfb2d5ac78b29aa6f3499 100644 (file)
@@ -2486,10 +2486,6 @@ com_assert_stmt(struct compiling *c, node *n)
           where <message> is the second test, if present.
        */
 
-       /* XXX should __debug__ and AssertionError get inserted into
-          the symbol table?  they don't follow the normal rules
-          because they are always loaded as globals */
-
        if (Py_OptimizeFlag)
                return;
        com_addop_name(c, LOAD_GLOBAL, "__debug__");
@@ -3524,10 +3520,6 @@ com_fplist(struct compiling *c, node *n)
        }
 }
 
-/* XXX This function could probably be made simpler, because it
-   doesn't do anything except generate code for complex arguments. 
-*/
-
 static void
 com_arglist(struct compiling *c, node *n)
 {
@@ -3579,12 +3571,22 @@ com_arglist(struct compiling *c, node *n)
                        REQ(ch, STAR);
                        ch = CHILD(n, i+1);
                        if (TYPE(ch) == NAME) {
+                               PyObject *v;
                                i += 3;
+                               v = PyDict_GetItemString(c->c_cellvars,
+                                                        STR(ch));
+                               if (v) {
+                                       com_addoparg(c, LOAD_FAST, narg);
+                                       com_addoparg(c, STORE_DEREF, 
+                                                    PyInt_AS_LONG(v));
                        }
+                               narg++;
                }
        }
+       }
        /* Handle **keywords */
        if (i < nch) {
+               PyObject *v;
                node *ch;
                ch = CHILD(n, i);
                if (TYPE(ch) != DOUBLESTAR) {
@@ -3596,6 +3598,11 @@ com_arglist(struct compiling *c, node *n)
                else
                        ch = CHILD(n, i+1);
                REQ(ch, NAME);
+               v = PyDict_GetItemString(c->c_cellvars, STR(ch));
+               if (v) {
+                       com_addoparg(c, LOAD_FAST, narg);
+                       com_addoparg(c, STORE_DEREF, PyInt_AS_LONG(v));
+               }                       
        }
        if (complex) {
                /* Generate code for complex arguments only after