summaryrefslogtreecommitdiff
path: root/src/python/m5
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-05-01 16:35:54 -0700
committerGabe Black <gabeblack@google.com>2018-06-15 00:03:09 +0000
commit3bb22b7fc3e642533f8bb170e8de1de5e62d976c (patch)
treed68a8fe752ce7edcab0dd6f4f6571502e917b901 /src/python/m5
parent642a563cf08171f1a89ae67229e93187cae28bd8 (diff)
downloadgem5-3bb22b7fc3e642533f8bb170e8de1de5e62d976c.tar.xz
sim: Add a SimObject python field which overrides the default c++ base.
The base for the c++ version of python SimObject classes is normally inferred from the c++ version of the python base. There are some specific cases where that isn't desired. This change makes it possible to override the default behavior. Change-Id: I2438dad767e2f56823bad42b3e6c7714ce97ef79 Reviewed-on: https://gem5-review.googlesource.com/10662 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/python/m5')
-rw-r--r--src/python/m5/SimObject.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py
index e051a972b..0c9e738f6 100644
--- a/src/python/m5/SimObject.py
+++ b/src/python/m5/SimObject.py
@@ -407,6 +407,7 @@ class MetaSimObject(type):
'cxx_type' : str,
'cxx_header' : str,
'type' : str,
+ 'cxx_base' : (str, type(None)),
'cxx_extra_bases' : list,
'cxx_exports' : list,
'cxx_param_exports' : list,
@@ -734,8 +735,19 @@ module_init(py::module &m_internal)
code()
code.dedent()
- bases = [ cls._base.cxx_class ] + cls.cxx_extra_bases if \
- cls._base else cls.cxx_extra_bases
+ bases = []
+ if 'cxx_base' in cls._value_dict:
+ # If the c++ base class implied by python inheritance was
+ # overridden, use that value.
+ if cls.cxx_base:
+ bases.append(cls.cxx_base)
+ elif cls._base:
+ # If not and if there was a SimObject base, use its c++ class
+ # as this class' base.
+ bases.append(cls._base.cxx_class)
+ # Add in any extra bases that were requested.
+ bases.extend(cls.cxx_extra_bases)
+
if bases:
base_str = ", ".join(bases)
code('py::class_<${{cls.cxx_class}}, ${base_str}, ' \