mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
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:
parent
436eadd455
commit
accb62b28e
6 changed files with 79 additions and 50 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue