summaryrefslogtreecommitdiff
path: root/src/systemc/core/sensitivity.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/core/sensitivity.cc')
-rw-r--r--src/systemc/core/sensitivity.cc31
1 files changed, 21 insertions, 10 deletions
diff --git a/src/systemc/core/sensitivity.cc b/src/systemc/core/sensitivity.cc
index 4f84ce0e9..11e04a100 100644
--- a/src/systemc/core/sensitivity.cc
+++ b/src/systemc/core/sensitivity.cc
@@ -55,12 +55,29 @@ Sensitivity::satisfy()
}
bool
+Sensitivity::notifyWork(Event *e)
+{
+ satisfy();
+ return true;
+}
+
+bool
Sensitivity::notify(Event *e)
{
+ if (scheduler.current() == process) {
+ static bool warned = false;
+ if (!warned) {
+ SC_REPORT_WARNING("(W536) immediate self-notification ignored "
+ "as of IEEE 1666-2011", process->name());
+ warned = true;
+ }
+ return false;
+ }
+
if (process->disabled())
return false;
- satisfy();
- return true;
+
+ return notifyWork(e);
}
bool
@@ -203,11 +220,8 @@ DynamicSensitivityEventOrList::DynamicSensitivityEventOrList(
{}
bool
-DynamicSensitivityEventOrList::notify(Event *e)
+DynamicSensitivityEventOrList::notifyWork(Event *e)
{
- if (process->disabled())
- return false;
-
events.erase(e->sc_event());
// All the other events need this deleted from their lists since this
@@ -225,11 +239,8 @@ DynamicSensitivityEventAndList::DynamicSensitivityEventAndList(
{}
bool
-DynamicSensitivityEventAndList::notify(Event *e)
+DynamicSensitivityEventAndList::notifyWork(Event *e)
{
- if (process->disabled())
- return false;
-
events.erase(e->sc_event());
// This sensitivity is satisfied if all events have triggered.