python: Remove getCode() type workaround
authorAndreas Sandberg <andreas.sandberg@arm.com>
Mon, 28 Jan 2019 16:12:18 +0000 (16:12 +0000)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Thu, 31 Jan 2019 17:31:54 +0000 (17:31 +0000)
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 <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/15978
Reviewed-by: Gabe Black <gabeblack@google.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
src/python/pybind11/event.cc

index d2d78fe722f4ea365546e328715b0eeaa16ca092..a65ddc6956582ae943d4e8e6bec66a4d5420b48b 100644 (file)
@@ -135,10 +135,18 @@ pybind_init_event(py::module &m_native)
                std::unique_ptr<GlobalSimLoopExitEvent, py::nodelete>>(
                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<py::object>(
                     PyInt_FromLong(e->getCode()));
             })
+#endif
         ;
 
     // Event base class. These should never be returned directly to