SF patch 103589: Fix handling of cell vars that are either * or ** parameters.
(Nick Mathewson)

Remove to XXX comments
diff --git a/Python/compile.c b/Python/compile.c
index eb2ba90..8370e09 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2486,10 +2486,6 @@
 	   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 @@
 	}
 }
 
-/* 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 @@
 			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 @@
 		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