diff options
Diffstat (limited to 'ext/pybind11/include/pybind11/eval.h')
-rw-r--r-- | ext/pybind11/include/pybind11/eval.h | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/ext/pybind11/include/pybind11/eval.h b/ext/pybind11/include/pybind11/eval.h index 5b2b98272..ea85ba1db 100644 --- a/ext/pybind11/include/pybind11/eval.h +++ b/ext/pybind11/include/pybind11/eval.h @@ -11,11 +11,9 @@ #pragma once -#pragma once - #include "pybind11.h" -NAMESPACE_BEGIN(pybind11) +NAMESPACE_BEGIN(PYBIND11_NAMESPACE) enum eval_mode { /// Evaluate a string containing an isolated expression @@ -29,12 +27,7 @@ enum eval_mode { }; template <eval_mode mode = eval_expr> -object eval(str expr, object global = object(), object local = object()) { - if (!global) { - global = reinterpret_borrow<object>(PyEval_GetGlobals()); - if (!global) - global = dict(); - } +object eval(str expr, object global = globals(), object local = object()) { if (!local) local = global; @@ -56,13 +49,25 @@ object eval(str expr, object global = object(), object local = object()) { return reinterpret_steal<object>(result); } +template <eval_mode mode = eval_expr, size_t N> +object eval(const char (&s)[N], object global = globals(), object local = object()) { + /* Support raw string literals by removing common leading whitespace */ + auto expr = (s[0] == '\n') ? str(module::import("textwrap").attr("dedent")(s)) + : str(s); + return eval<mode>(expr, global, local); +} + +inline void exec(str expr, object global = globals(), object local = object()) { + eval<eval_statements>(expr, global, local); +} + +template <size_t N> +void exec(const char (&s)[N], object global = globals(), object local = object()) { + eval<eval_statements>(s, global, local); +} + template <eval_mode mode = eval_statements> -object eval_file(str fname, object global = object(), object local = object()) { - if (!global) { - global = reinterpret_borrow<object>(PyEval_GetGlobals()); - if (!global) - global = dict(); - } +object eval_file(str fname, object global = globals(), object local = object()) { if (!local) local = global; @@ -109,4 +114,4 @@ object eval_file(str fname, object global = object(), object local = object()) { return reinterpret_steal<object>(result); } -NAMESPACE_END(pybind11) +NAMESPACE_END(PYBIND11_NAMESPACE) |