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) && PY_VERSION_HEX >= 0x03000000 
   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#    if PY_VERSION_HEX >= 0x03040000 
  137    FILE *f = _Py_fopen_obj(fname.
ptr(), 
"r");
 
  138#    elif PY_VERSION_HEX >= 0x03000000 
  139    FILE *f = _Py_fopen(fname.
ptr(), 
"r");
 
  142    auto fobj = reinterpret_steal<object>(
 
  143        PyFile_FromString(
const_cast<char *
>(fname_str.c_str()), 
const_cast<char *
>(
"r")));
 
  146        f = PyFile_AsFile(fobj.ptr());
 
  151        pybind11_fail(
"File \"" + fname_str + 
"\" could not be opened!");
 
  157#    if PY_VERSION_HEX >= 0x03000000 
  158    if (!global.contains(
"__file__")) {
 
  159        global[
"__file__"] = std::move(fname);
 
  163#    if PY_VERSION_HEX < 0x03000000 && defined(PYPY_VERSION) 
  164    PyObject *result = PyRun_File(f, fname_str.c_str(), start, global.ptr(), local.ptr());
 
  168        = PyRun_FileEx(f, fname_str.c_str(), start, global.ptr(), local.ptr(), closeFile);
 
  174    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())