summaryrefslogtreecommitdiff
path: root/src/systemc/core/module.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/core/module.hh')
-rw-r--r--src/systemc/core/module.hh29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/systemc/core/module.hh b/src/systemc/core/module.hh
index aa723368a..695f30565 100644
--- a/src/systemc/core/module.hh
+++ b/src/systemc/core/module.hh
@@ -80,10 +80,15 @@ class Module
UniqueNameGen nameGen;
public:
-
Module(const char *name);
~Module();
+ static Module *
+ fromScModule(::sc_core::sc_module *mod)
+ {
+ return mod->_gem5_module;
+ }
+
void finish(Object *this_obj);
const char *name() const { return _name; }
@@ -130,8 +135,26 @@ Module *currentModule();
Module *newModuleChecked();
Module *newModule();
-void callbackModule(Module *m);
-Module *callbackModule();
+static inline Module *
+pickParentModule()
+{
+ ::sc_core::sc_object *obj = pickParentObj();
+ auto mod = dynamic_cast<::sc_core::sc_module *>(obj);
+ if (!mod)
+ return nullptr;
+ return Module::fromScModule(mod);
+}
+static inline void
+pushParentModule(Module *m)
+{
+ pushParentObj(m->obj()->sc_obj());
+}
+static inline void
+popParentModule()
+{
+ assert(pickParentModule());
+ popParentObj();
+}
extern std::list<Module *> allModules;