Add new parser error code, E_OVERFLOW.  This error is returned when
the number of children of a node exceeds the max possible value for
the short that is used to count them.  The Python runtime converts
this parser error into the SyntaxError "expression too long."
diff --git a/Parser/node.c b/Parser/node.c
index c2308fd..3f593c8 100644
--- a/Parser/node.c
+++ b/Parser/node.c
@@ -29,10 +29,13 @@
 
 ******************************************************************/
 
+#include <limits.h>
+
 /* Parse tree node implementation */
 
 #include "pgenheaders.h"
 #include "node.h"
+#include "errcode.h"
 
 node *
 PyNode_New(type)
@@ -52,7 +55,7 @@
 #define XXX 3 /* Node alignment factor to speed up realloc */
 #define XXXROUNDUP(n) ((n) == 1 ? 1 : ((n) + XXX - 1) / XXX * XXX)
 
-node *
+int
 PyNode_AddChild(n1, type, str, lineno)
 	register node *n1;
 	int type;
@@ -62,12 +65,14 @@
 	register int nch = n1->n_nchildren;
 	register int nch1 = nch+1;
 	register node *n;
+	if (nch == SHRT_MAX || nch < 0)
+		return E_OVERFLOW;
 	if (XXXROUNDUP(nch) < nch1) {
 		n = n1->n_child;
 		nch1 = XXXROUNDUP(nch1);
 		PyMem_RESIZE(n, node, nch1);
 		if (n == NULL)
-			return NULL;
+			return E_NOMEM;
 		n1->n_child = n;
 	}
 	n = &n1->n_child[n1->n_nchildren++];
@@ -76,7 +81,7 @@
 	n->n_lineno = lineno;
 	n->n_nchildren = 0;
 	n->n_child = NULL;
-	return n;
+	return 0;
 }
 
 /* Forward */