Mercurial > cpython-lru_cache-weakref
diff Parser/node.c @ 12970:63436719d12e legacy-trunk
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."
| author | Jeremy Hylton <jeremy@alum.mit.edu> |
|---|---|
| date | Tue, 20 Jun 2000 19:10:44 +0000 |
| parents | 1c9a84e0981d |
| children | 916fb024ce94 |
line wrap: on
line diff
--- a/Parser/node.c Tue Jun 20 18:52:57 2000 +0000 +++ b/Parser/node.c Tue Jun 20 19:10:44 2000 +0000 @@ -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 */
