Add Trigger manager for managing triggers created by things like 'when' statements

- Adds new trigger namespace
- Adds trigger::Manager class as a new IOSource for keeping track of triggers and integrating them into the loop. Previously the loop relied on the event manager Drain() method to process all triggers on every loop, but now that the loop actively waits for events to occur, triggers would not fire when they needed to. Adding them as part of the loop ensures they're checked.
This commit is contained in:
Tim Wojtulewicz 2019-11-26 12:47:33 -07:00
parent 92bde61b78
commit a159d075cf
11 changed files with 131 additions and 93 deletions

View file

@ -11,7 +11,7 @@
#include "Val.h"
class Trigger;
namespace trigger { class Trigger; }
class CallExpr;
class Frame : public BroObj {
@ -207,9 +207,9 @@ public:
// If the frame is run in the context of a trigger condition evaluation,
// the trigger needs to be registered.
void SetTrigger(Trigger* arg_trigger);
void SetTrigger(trigger::Trigger* arg_trigger);
void ClearTrigger();
Trigger* GetTrigger() const { return trigger; }
trigger::Trigger* GetTrigger() const { return trigger; }
void SetCall(const CallExpr* arg_call) { call = arg_call; }
void ClearCall() { call = 0; }
@ -293,7 +293,7 @@ private:
bool break_before_next_stmt;
bool break_on_return;
Trigger* trigger;
trigger::Trigger* trigger;
const CallExpr* call;
bool delayed;