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.
This commit is contained in:
Jeremy Hylton 2002-12-31 18:17:44 +00:00
parent 436eadd455
commit accb62b28e
6 changed files with 79 additions and 50 deletions

View file

@ -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);
}