Fix for SF bug [ 784075 ] Fatal Python error: unknown scope

Make sure the inner function is not compiled when there is a syntax
error in the default arguments.
diff --git a/Python/compile.c b/Python/compile.c
index 38624d4..69a07af 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -3666,10 +3666,16 @@
 	   XXX if we could pop the exception still on the stack */
 }
 
+/* Return the number of default values in the argument list.
+
+   If a non-default argument follows a default argument, set an
+   exception and return -1.
+*/
+
 static int
 com_argdefs(struct compiling *c, node *n)
 {
-	int i, nch, nargs, ndefs;
+	int i, nch, ndefs;
 	if (TYPE(n) == lambdef) {
 		/* lambdef: 'lambda' [varargslist] ':' test */
 		n = CHILD(n, 1);
@@ -3686,14 +3692,12 @@
 		(fpdef ['=' test] ',')* '*' ....... |
 		fpdef ['=' test] (',' fpdef ['=' test])* [','] */
 	nch = NCH(n);
-	nargs = 0;
 	ndefs = 0;
 	for (i = 0; i < nch; i++) {
 		int t;
 		if (TYPE(CHILD(n, i)) == STAR ||
 		    TYPE(CHILD(n, i)) == DOUBLESTAR)
 			break;
-		nargs++;
 		i++;
 		if (i >= nch)
 			t = RPAR; /* Anything except EQUAL or COMMA */
@@ -3710,9 +3714,11 @@
 		}
 		else {
 			/* Treat "(a=1, b)" as an error */
-			if (ndefs)
+			if (ndefs) {
 				com_error(c, PyExc_SyntaxError,
 			    "non-default argument follows default argument");
+				return -1;
+			}
 		}
 		if (t != COMMA)
 			break;
@@ -3727,6 +3733,8 @@
 	int ndefs;
 	REQ(n, funcdef); /* funcdef: 'def' NAME parameters ':' suite */
 	ndefs = com_argdefs(c, n);
+	if (ndefs < 0)
+		return;
 	symtable_enter_scope(c->c_symtable, STR(CHILD(n, 1)), TYPE(n),
 			     n->n_lineno);
 	co = (PyObject *)icompile(n, c);