diff options
Diffstat (limited to 'src/systemc/core/module.hh')
-rw-r--r-- | src/systemc/core/module.hh | 29 |
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; |