Mercurial > cpython-lru_cache-weakref
diff Python/bltinmodule.c @ 46193:b0bf06d49647 legacy-trunk
Properly check for consistency with the third argument of
compile() when compiling an AST node.
| author | Georg Brandl <georg@python.org> |
|---|---|
| date | Sat, 29 Mar 2008 13:24:23 +0000 |
| parents | ca38f7a4b4c9 |
| children | aef3501d8e77 |
line wrap: on
line diff
--- a/Python/bltinmodule.c Sat Mar 29 13:14:52 2008 +0000 +++ b/Python/bltinmodule.c Sat Mar 29 13:24:23 2008 +0000 @@ -466,7 +466,7 @@ char *str; char *filename; char *startstr; - int start; + int mode = -1; int dont_inherit = 0; int supplied_flags = 0; PyCompilerFlags cf; @@ -474,6 +474,7 @@ Py_ssize_t length; 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, @@ -495,6 +496,18 @@ 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)) { if (supplied_flags & PyCF_ONLY_AST) { Py_INCREF(cmd); @@ -505,7 +518,7 @@ 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; @@ -526,19 +539,6 @@ cf.cf_flags |= PyCF_SOURCE_IS_UTF8; } #endif - /* 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'"); - goto cleanup; - } if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length)) goto cleanup; @@ -547,7 +547,7 @@ "compile() expected string without null bytes"); goto cleanup; } - result = Py_CompileStringFlags(str, filename, start, &cf); + result = Py_CompileStringFlags(str, filename, start[mode], &cf); cleanup: Py_XDECREF(tmp); return result;
