Commit 5bb27ff1 authored by Andrey Plotnikov's avatar Andrey Plotnikov

code object support in exec statement

parent a5e49f6e
...@@ -182,27 +182,34 @@ static PyObject* __Pyx_PyRun(PyObject* o, PyObject* globals, PyObject* locals) { ...@@ -182,27 +182,34 @@ static PyObject* __Pyx_PyRun(PyObject* o, PyObject* globals, PyObject* locals) {
globals = locals; globals = locals;
} }
if (PyUnicode_Check(o)) { if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
s = PyUnicode_AsUTF8String(o); PyDict_SetItemString(globals, "__builtins__", PyEval_GetBuiltins());
if (!s) goto bad; }
o = s;
#if PY_MAJOR_VERSION >= 3 if (PyCode_Check(o)) {
} else if (!PyBytes_Check(o)) { result = PyEval_EvalCode((PyCodeObject *)o, globals, locals);
#else }
} else if (!PyString_Check(o)) { else {
#endif if (PyUnicode_Check(o)) {
/* FIXME: support file objects and code objects */ s = PyUnicode_AsUTF8String(o);
PyErr_SetString(PyExc_TypeError, if (!s) goto bad;
"exec currently requires a string as code input."); o = s;
goto bad; #if PY_MAJOR_VERSION >= 3
} else if (!PyBytes_Check(o)) {
#else
} else if (!PyString_Check(o)) {
#endif
PyErr_SetString(PyExc_TypeError,
"exec: arg 1 must be string, bytes or code object");
goto bad;
}
#if PY_MAJOR_VERSION >= 3
code = PyBytes_AS_STRING(o);
#else
code = PyString_AS_STRING(o);
#endif
result = PyRun_String(code, Py_file_input, globals, locals);
} }
#if PY_MAJOR_VERSION >= 3
code = PyBytes_AS_STRING(o);
#else
code = PyString_AS_STRING(o);
#endif
result = PyRun_String(code, Py_file_input, globals, locals);
Py_XDECREF(s); Py_XDECREF(s);
return result; return result;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment