diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2002-12-31 18:17:44 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2002-12-31 18:17:44 (GMT) |
commit | accb62b28e1d592733b2f678d5737ca3e8c64fc2 (patch) | |
tree | 0b892dc477d250aba141fbf29f63004ac027c8c7 /Modules/parsermodule.c | |
parent | 436eadd4555b3172ab366b5a2381085ffc941614 (diff) | |
download | cpython-accb62b28e1d592733b2f678d5737ca3e8c64fc2.zip cpython-accb62b28e1d592733b2f678d5737ca3e8c64fc2.tar.gz cpython-accb62b28e1d592733b2f678d5737ca3e8c64fc2.tar.bz2 |
SF patch [ 597919 ] compiler package and SET_LINENO
A variety of changes from Michael Hudson to get the compiler working
with 2.3. The primary change is the handling of SET_LINENO:
# The set_lineno() function and the explicit emit() calls for
# SET_LINENO below are only used to generate the line number table.
# As of Python 2.3, the interpreter does not have a SET_LINENO
# instruction. pyassem treats SET_LINENO opcodes as a special case.
A few other small changes:
- Remove unused code from pycodegen and pyassem.
- Fix error handling in parsermodule. When PyParser_SimplerParseString()
fails, it sets an exception with detailed info. The parsermodule
was clobbering that exception and replacing it was a generic
"could not parse string" exception. Keep the original exception.
Diffstat (limited to 'Modules/parsermodule.c')
-rw-r--r-- | Modules/parsermodule.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 203786e..e0c7431 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -89,7 +89,7 @@ node2tuple(node *n, /* node to convert */ PyObject *v; PyObject *w; - v = mkseq(1 + NCH(n)); + v = mkseq(1 + NCH(n) + (TYPE(n) == encoding_decl)); if (v == NULL) return (v); w = PyInt_FromLong(TYPE(n)); @@ -106,6 +106,9 @@ node2tuple(node *n, /* node to convert */ } (void) addelem(v, i+1, w); } + + if (TYPE(n) == encoding_decl) + (void) addelem(v, i+1, PyString_FromString(STR(n))); return (v); } else if (ISTERMINAL(TYPE(n))) { @@ -478,7 +481,7 @@ err_string(char *message) /* PyObject* parser_do_parse(PyObject* args, int type) * * Internal function to actually execute the parse and return the result if - * successful, or set an exception if not. + * successful or set an exception if not. * */ static PyObject* @@ -494,10 +497,8 @@ parser_do_parse(PyObject *args, PyObject *kw, char *argspec, int type) (type == PyST_EXPR) ? eval_input : file_input); - if (n != 0) - res = parser_newstobject(n, type); - else - err_string("could not parse string"); + if (n) + res = parser_newstobject(n, type); } return (res); } |