mirror of
https://github.com/zeek/zeek.git
synced 2025-10-07 00:58:19 +00:00
GH-927: Fix circumvention of evaluation order in 'when' conditions
Historically, a 'when' condition performed an AST-traversal to locate any index-expressions like `x[9]` and evaluated them so that it could register the associated value as something for which it needs to receive "modification" notifications. Evaluating arbitrary expressions during an AST-traversal like that ignores the typical order-of-evaluation/short-circuiting you'd expect if the condition was evaluated normally, from its root expression. Now, a new subclass of IndexExpr is used to keep track of all IndexExpr results in the context of evaluating a 'when' condition without having to do a secondary AST-traversal-and-eval. i.e. the first evaluation of the full 'when' condition follows the typical expression-evaluation semantics (as always), but additionally now captures all the values a Trigger needs to monitor for modifications.
This commit is contained in:
parent
0771dbcec6
commit
33ca675515
6 changed files with 141 additions and 29 deletions
|
@ -91,7 +91,7 @@ private:
|
|||
friend class TriggerTraversalCallback;
|
||||
friend class TriggerTimer;
|
||||
|
||||
void Init();
|
||||
void Init(std::vector<IntrusivePtr<Val>> index_expr_results);
|
||||
void Register(ID* id);
|
||||
void Register(Val* val);
|
||||
void UnregisterAll();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue