summaryrefslogtreecommitdiffstats
path: root/Modules/parsermodule.c
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2002-12-31 18:17:44 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2002-12-31 18:17:44 (GMT)
commitaccb62b28e1d592733b2f678d5737ca3e8c64fc2 (patch)
tree0b892dc477d250aba141fbf29f63004ac027c8c7 /Modules/parsermodule.c
parent436eadd4555b3172ab366b5a2381085ffc941614 (diff)
downloadcpython-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.c13
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);
}