summaryrefslogtreecommitdiff
path: root/ext/pybind11/include/pybind11/eval.h
diff options
context:
space:
mode:
authorJason Lowe-Power <jason@lowepower.com>2017-11-17 17:02:05 -0800
committerJason Lowe-Power <jason@lowepower.com>2017-12-14 00:27:59 +0000
commitf07d5069d86e31ecf195664850f79fb00c445bd3 (patch)
treef54ac06896fa828f873d199a0e9b25bd94911c79 /ext/pybind11/include/pybind11/eval.h
parent3f64b374c49491f18dc2ca538ed8c8597e4aac83 (diff)
downloadgem5-f07d5069d86e31ecf195664850f79fb00c445bd3.tar.xz
ext: Upgrade PyBind11 to version 2.2.1
This upgrade is necessary for pybind to build with GCC 7.2. We still need to add the patch for stl.h. MSC_FULL_VER change is no longer needed. See https://gem5-review.googlesource.com/c/public/gem5/+/2230 Change-Id: I806729217d022070583994c2dfcaa74476aef30f Signed-off-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-on: https://gem5-review.googlesource.com/5801 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
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)