diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2008-03-31 04:20:05 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2008-03-31 04:20:05 (GMT) |
commit | db4115ffc063f20da2c6078bb93187ee8753d4ec (patch) | |
tree | aefc108acfa75b71a627cb7fa3c0cfd6428a8e07 /Python | |
parent | 9367c78c84efaa3f2d6797ca7e18dc78e838c531 (diff) | |
download | cpython-db4115ffc063f20da2c6078bb93187ee8753d4ec.zip cpython-db4115ffc063f20da2c6078bb93187ee8753d4ec.tar.gz cpython-db4115ffc063f20da2c6078bb93187ee8753d4ec.tar.bz2 |
Merged revisions 62039-62042 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62039 | georg.brandl | 2008-03-29 06:24:23 -0700 (Sat, 29 Mar 2008) | 3 lines
Properly check for consistency with the third argument of
compile() when compiling an AST node.
........
r62040 | amaury.forgeotdarc | 2008-03-29 06:47:05 -0700 (Sat, 29 Mar 2008) | 5 lines
The buildbot "x86 W2k8 trunk" seems to hang in test_socket.
http://www.python.org/dev/buildbot/trunk/x86%20W2k8%20trunk/builds/255/step-test/0
Temporarily increase verbosity of this test.
........
r62042 | amaury.forgeotdarc | 2008-03-29 07:53:05 -0700 (Sat, 29 Mar 2008) | 3 lines
Still investigating on the hanging test_socket.
the test itself doesn't do anything on windows, focus on setUp and tearDown.
........
Diffstat (limited to 'Python')
-rw-r--r-- | Python/Python-ast.c | 15 | ||||
-rw-r--r-- | Python/bltinmodule.c | 33 |
2 files changed, 27 insertions, 21 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 464d28d..9f85581 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -6415,13 +6415,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) diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index ccfce06..199ebc0 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -513,13 +513,14 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) char *str; char *filename; char *startstr; - int start; + int mode = -1; int dont_inherit = 0; int supplied_flags = 0; PyCompilerFlags cf; PyObject *cmd; static char *kwlist[] = {"source", "filename", "mode", "flags", "dont_inherit", NULL}; + int start[] = {Py_file_input, Py_eval_input, Py_single_input}; if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oss|ii:compile", kwlist, &cmd, &filename, &startstr, @@ -541,6 +542,18 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) PyEval_MergeCompilerFlags(&cf); } + if (strcmp(startstr, "exec") == 0) + mode = 0; + else if (strcmp(startstr, "eval") == 0) + mode = 1; + else if (strcmp(startstr, "single") == 0) + mode = 2; + else { + PyErr_SetString(PyExc_ValueError, + "compile() arg 3 must be 'exec', 'eval' or 'single'"); + return NULL; + } + if (PyAST_Check(cmd)) { PyObject *result; if (supplied_flags & PyCF_ONLY_AST) { @@ -552,7 +565,7 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) mod_ty mod; arena = PyArena_New(); - mod = PyAST_obj2mod(cmd, arena); + mod = PyAST_obj2mod(cmd, arena, mode); if (mod == NULL) { PyArena_Free(arena); return NULL; @@ -564,25 +577,11 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) return result; } - /* XXX: is it possible to pass start to the PyAST_ branch? */ - if (strcmp(startstr, "exec") == 0) - start = Py_file_input; - else if (strcmp(startstr, "eval") == 0) - start = Py_eval_input; - else if (strcmp(startstr, "single") == 0) - start = Py_single_input; - else { - PyErr_SetString(PyExc_ValueError, - "compile() arg 3 must be 'exec'" - "or 'eval' or 'single'"); - return NULL; - } - str = source_as_string(cmd); if (str == NULL) return NULL; - return Py_CompileStringFlags(str, filename, start, &cf); + return Py_CompileStringFlags(str, filename, start[mode], &cf); } PyDoc_STRVAR(compile_doc, |