22#if defined(PYPY_VERSION) || PY_VERSION_HEX < 0x03080000
27 if (!global.contains(
"__builtins__"))
47template <eval_mode mode = eval_expr>
48object eval(
const str &expr,
object global =
globals(),
object local =
object()) {
53 detail::ensure_builtins_in_globals(global);
57 std::string
buffer =
"# -*- coding: utf-8 -*-\n" + (std::string) expr;
62 start = Py_eval_input;
65 start = Py_single_input;
68 start = Py_file_input;
74 PyObject *result = PyRun_String(
buffer.c_str(), start, global.
ptr(), local.ptr());
78 return reinterpret_steal<object>(result);
81template <eval_mode mode = eval_expr,
size_t N>
82object eval(
const char (&s)[N],
object global =
globals(),
object local =
object()) {
85 return eval<mode>(expr, std::move(global), std::move(local));
88inline void exec(
const str &expr,
object global =
globals(),
object local =
object()) {
89 eval<eval_statements>(expr, std::move(global), std::move(local));
93void exec(
const char (&s)[N],
object global =
globals(),
object local =
object()) {
94 eval<eval_statements>(s, std::move(global), std::move(local));
97#if defined(PYPY_VERSION)
98template <eval_mode mode = eval_statements>
102template <eval_mode mode = eval_statements>
106template <eval_mode mode = eval_statements>
111template <eval_mode mode = eval_statements>
117 detail::ensure_builtins_in_globals(global);
122 start = Py_eval_input;
125 start = Py_single_input;
128 start = Py_file_input;
135 std::string fname_str = (std::string) fname;
136 FILE *f = _Py_fopen_obj(fname.
ptr(),
"r");
139 pybind11_fail(
"File \"" + fname_str +
"\" could not be opened!");
142 if (!global.contains(
"__file__")) {
143 global[
"__file__"] = std::move(fname);
147 = PyRun_FileEx(f, fname_str.c_str(), start, global.ptr(), local.ptr(), closeFile);
152 return reinterpret_steal<object>(result);
Fetch and hold an error which was already set in Python.
PyObject * ptr() const
Return the underlying PyObject * pointer.
static module_ import(const char *name)
Import and return a module or throws error_already_set.
dict globals()
Return a dictionary representing the global variables in the current execution frame,...
PYBIND11_NOINLINE void pybind11_fail(const char *reason)
Thrown when pybind11::cast or.
#define PYBIND11_BUILTINS_MODULE
#define PYBIND11_NAMESPACE_END(name)
#define PYBIND11_NAMESPACE_BEGIN(name)
@ eval_expr
Evaluate a string containing an isolated expression.
@ eval_statements
Evaluate a string containing a sequence of statement. Returns none.
@ eval_single_statement
Evaluate a string containing a single statement. Returns none.
void ensure_builtins_in_globals(object &global)
object eval(const str &expr, object global=globals(), object local=object())
void exec(const str &expr, object global=globals(), object local=object())
object eval_file(str fname, object global=globals(), object local=object())