From fbdf0b689eb31543292f52c71d14152d8ff1156a Mon Sep 17 00:00:00 2001 From: Andreas Sandberg Date: Mon, 28 Jan 2019 16:12:18 +0000 Subject: [PATCH] python: Remove getCode() type workaround Python 2.7 requires a workaround when wrapping exit objects to explicitly convert the return of getCode() to int to not confuse sys.exit. This workaround isn't needed and doesn't work on Python 3 since it doesn't have a separate long integer type. Change-Id: I57bc3fd8f4699676c046ece8a52baa2796959ffd Signed-off-by: Andreas Sandberg Reviewed-on: https://gem5-review.googlesource.com/c/15978 Reviewed-by: Gabe Black Reviewed-by: Nikos Nikoleris --- src/python/pybind11/event.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/python/pybind11/event.cc b/src/python/pybind11/event.cc index d2d78fe72..a65ddc695 100644 --- a/src/python/pybind11/event.cc +++ b/src/python/pybind11/event.cc @@ -135,10 +135,18 @@ pybind_init_event(py::module &m_native) std::unique_ptr>( m, "GlobalSimLoopExitEvent") .def("getCause", &GlobalSimLoopExitEvent::getCause) +#if PY_MAJOR_VERSION >= 3 + .def("getCode", &GlobalSimLoopExitEvent::getCode) +#else + // Workaround for an issue where PyBind11 converts the exit + // code to a long. This is normally fine, but sys.exit treats + // any non-int type as an error and exits with status 1 if it + // is passed a long. .def("getCode", [](GlobalSimLoopExitEvent *e) { return py::reinterpret_steal( PyInt_FromLong(e->getCode())); }) +#endif ; // Event base class. These should never be returned directly to -- 2.30.2