diff options
Diffstat (limited to 'Parser/asdl_c.py')
-rwxr-xr-x | Parser/asdl_c.py | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py index fa43078..3a0bb95 100755 --- a/Parser/asdl_c.py +++ b/Parser/asdl_c.py @@ -954,13 +954,20 @@ PyObject* PyAST_mod2obj(mod_ty t) return ast2obj_mod(t); } -mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena) +/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */ +mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode) { mod_ty res; + PyObject *req_type[] = {(PyObject*)Module_type, (PyObject*)Expression_type, + (PyObject*)Interactive_type}; + char *req_name[] = {"Module", "Expression", "Interactive"}; + assert(0 <= mode && mode <= 2); + init_types(); - if (!PyObject_IsInstance(ast, (PyObject*)mod_type)) { - PyErr_SetString(PyExc_TypeError, "expected either Module, Interactive " - "or Expression node"); + + if (!PyObject_IsInstance(ast, req_type[mode])) { + PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s", + req_name[mode], Py_TYPE(ast)->tp_name); return NULL; } if (obj2ast_mod(ast, &res, arena) != 0) @@ -1016,7 +1023,7 @@ def main(srcfile): ) c.visit(mod) print >>f, "PyObject* PyAST_mod2obj(mod_ty t);" - print >>f, "mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena);" + print >>f, "mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);" print >>f, "int PyAST_Check(PyObject* obj);" f.close() |