systemc: Add some error checks to sc_export.
Change-Id: Ib0c14a5c7dad37b33d61c9b406f6b84121d94e46 Reviewed-on: https://gem5-review.googlesource.com/c/12965 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
#ifndef __SYSTEMC_EXT_CORE_SC_EXPORT_HH__
|
||||
#define __SYSTEMC_EXT_CORE_SC_EXPORT_HH__
|
||||
|
||||
#include "../utils/sc_report_handler.hh"
|
||||
#include "sc_module.hh" // for sc_gen_unique_name
|
||||
#include "sc_object.hh"
|
||||
|
||||
@@ -71,19 +72,58 @@ class sc_export : public sc_export_base
|
||||
virtual const char *kind() const { return "sc_export"; }
|
||||
|
||||
void operator () (IF &i) { bind(i); }
|
||||
virtual void bind(IF &i) { interface = &i; }
|
||||
operator IF & () { return *interface; }
|
||||
virtual void
|
||||
bind(IF &i)
|
||||
{
|
||||
if (interface) {
|
||||
SC_REPORT_ERROR("(E126) sc_export instance already bound", name());
|
||||
return;
|
||||
}
|
||||
interface = &i;
|
||||
}
|
||||
operator IF & ()
|
||||
{
|
||||
if (!interface) {
|
||||
SC_REPORT_ERROR("(E120) sc_export instance has no interface",
|
||||
name());
|
||||
}
|
||||
return *interface;
|
||||
}
|
||||
operator const IF & () const { return *interface; }
|
||||
|
||||
IF *operator -> () { return interface; }
|
||||
const IF *operator -> () const { return interface; }
|
||||
IF *
|
||||
operator -> ()
|
||||
{
|
||||
if (!interface) {
|
||||
SC_REPORT_ERROR("(E120) sc_export instance has no interface",
|
||||
name());
|
||||
}
|
||||
return interface;
|
||||
}
|
||||
const IF *
|
||||
operator -> () const
|
||||
{
|
||||
if (!interface) {
|
||||
SC_REPORT_ERROR("(E120) sc_export instance has no interface",
|
||||
name());
|
||||
}
|
||||
return interface;
|
||||
}
|
||||
|
||||
sc_interface *get_iterface() override { return interface; }
|
||||
const sc_interface *get_interface() const override { return interface; }
|
||||
|
||||
protected:
|
||||
void before_end_of_elaboration() {}
|
||||
void end_of_elaboration() {}
|
||||
void
|
||||
end_of_elaboration()
|
||||
{
|
||||
if (!interface) {
|
||||
std::string msg = "export not bound: export '";
|
||||
msg = msg + name() + "' (" + kind() + ")";
|
||||
SC_REPORT_ERROR("(E109) complete binding failed", msg.c_str());
|
||||
}
|
||||
}
|
||||
void start_of_simulation() {}
|
||||
void end_of_simulation() {}
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
Reference in New Issue
Block a user