summaryrefslogtreecommitdiff
path: root/ext/pybind11/include/pybind11/eval.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pybind11/include/pybind11/eval.h')
-rw-r--r--ext/pybind11/include/pybind11/eval.h37
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)