Mercurial > cpython-lru_cache-weakref
diff Parser/parser.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/parser.c Tue Jun 20 18:52:57 2000 +0000 +++ b/Parser/parser.c Tue Jun 20 19:10:44 2000 +0000 @@ -153,11 +153,11 @@ int newstate; int lineno; { + int err; assert(!s_empty(s)); - if (PyNode_AddChild(s->s_top->s_parent, type, str, lineno) == NULL) { - fprintf(stderr, "shift: no mem in addchild\n"); - return -1; - } + err = PyNode_AddChild(s->s_top->s_parent, type, str, lineno); + if (err) + return err; s->s_top->s_state = newstate; return 0; } @@ -172,13 +172,13 @@ int newstate; int lineno; { + int err; register node *n; n = s->s_top->s_parent; assert(!s_empty(s)); - if (PyNode_AddChild(n, type, (char *)NULL, lineno) == NULL) { - fprintf(stderr, "push: no mem in addchild\n"); - return -1; - } + err = PyNode_AddChild(n, type, (char *)NULL, lineno); + if (err) + return err; s->s_top->s_state = newstate; return s_push(s, d, CHILD(n, NCH(n)-1)); } @@ -233,6 +233,7 @@ int lineno; { register int ilabel; + int err; D(printf("Token %s/'%s' ... ", _PyParser_TokenNames[type], str)); @@ -260,20 +261,20 @@ int arrow = x & ((1<<7)-1); dfa *d1 = PyGrammar_FindDFA( ps->p_grammar, nt); - if (push(&ps->p_stack, nt, d1, - arrow, lineno) < 0) { + if ((err = push(&ps->p_stack, nt, d1, + arrow, lineno)) > 0) { D(printf(" MemError: push\n")); - return E_NOMEM; + return err; } D(printf(" Push ...\n")); continue; } /* Shift the token */ - if (shift(&ps->p_stack, type, str, - x, lineno) < 0) { + if ((err = shift(&ps->p_stack, type, str, + x, lineno)) > 0) { D(printf(" MemError: shift.\n")); - return E_NOMEM; + return err; } D(printf(" Shift.\n")); /* Pop while we are in an accept-only state */
