Reporter: Add ScriptLocationScope helper

This commit is contained in:
Arne Welzel 2024-11-26 11:46:43 +01:00
parent c7c96610e3
commit 27e6d87331
2 changed files with 23 additions and 1 deletions

View file

@ -14,6 +14,7 @@
#include "zeek/Event.h"
#include "zeek/EventHandler.h"
#include "zeek/Expr.h"
#include "zeek/Frame.h"
#include "zeek/ID.h"
#include "zeek/NetVar.h"
#include "zeek/RunState.h"
@ -649,4 +650,10 @@ void Reporter::DoLog(const char* prefix, EventHandlerPtr event, FILE* out, Conne
bool Reporter::EmitToStderr(bool flag) { return flag || ! run_state::detail::zeek_init_done; }
ScriptLocationScope::ScriptLocationScope(const zeek::detail::Frame* frame) {
zeek::reporter->PushLocation(frame->GetCallLocation());
}
ScriptLocationScope::~ScriptLocationScope() { zeek::reporter->PopLocation(); }
} // namespace zeek

View file

@ -31,8 +31,9 @@ using StringValPtr = IntrusivePtr<StringVal>;
namespace detail {
class AssertStmt;
class Location;
class Expr;
class Frame;
class Location;
} // namespace detail
@ -334,6 +335,20 @@ private:
bool ignore_deprecations;
};
/**
* Helper class pushing the frame's call location onto
* the reporter's location stack, associating the caller's
* location with subsequent output.
*
* The frame's location must remain valid until the object
* is destroyed.
*/
class ScriptLocationScope {
public:
ScriptLocationScope(const zeek::detail::Frame* frame);
~ScriptLocationScope();
};
extern Reporter* reporter;
} // namespace zeek