From: Gabe Black Date: Tue, 1 May 2018 23:35:54 +0000 (-0700) Subject: sim: Add a SimObject python field which overrides the default c++ base. X-Git-Tag: v19.0.0.0~2049 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3bb22b7fc3e642533f8bb170e8de1de5e62d976c;p=gem5.git 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 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- 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}, ' \