mirror of
https://github.com/zeek/zeek.git
synced 2025-10-12 03:28:19 +00:00
tracking of optimization information associated with identifiers
This commit is contained in:
parent
074b18f3e8
commit
9a9995bdd1
7 changed files with 822 additions and 20 deletions
21
src/ID.h
21
src/ID.h
|
@ -7,7 +7,6 @@
|
|||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
#include "zeek/IntrusivePtr.h"
|
||||
#include "zeek/Obj.h"
|
||||
#include "zeek/Attr.h"
|
||||
#include "zeek/Notifier.h"
|
||||
|
@ -44,6 +43,8 @@ enum IDScope { SCOPE_FUNCTION, SCOPE_MODULE, SCOPE_GLOBAL };
|
|||
class ID;
|
||||
using IDPtr = IntrusivePtr<ID>;
|
||||
|
||||
class IDOptInfo;
|
||||
|
||||
class ID final : public Obj, public notifier::detail::Modifiable {
|
||||
public:
|
||||
static inline const IDPtr nil;
|
||||
|
@ -112,10 +113,6 @@ public:
|
|||
|
||||
const AttrPtr& GetAttr(AttrTag t) const;
|
||||
|
||||
void AddInitExpr(ExprPtr init_expr);
|
||||
const std::vector<ExprPtr>& GetInitExprs() const
|
||||
{ return init_exprs; }
|
||||
|
||||
bool IsDeprecated() const;
|
||||
|
||||
void MakeDeprecated(ExprPtr deprecation);
|
||||
|
@ -144,6 +141,8 @@ public:
|
|||
void AddOptionHandler(FuncPtr callback, int priority);
|
||||
std::vector<Func*> GetOptionHandlers() const;
|
||||
|
||||
IDOptInfo* GetOptInfo() const { return opt_info; }
|
||||
|
||||
protected:
|
||||
void EvalFunc(ExprPtr ef, ExprPtr ev);
|
||||
|
||||
|
@ -161,15 +160,15 @@ protected:
|
|||
ValPtr val;
|
||||
AttributesPtr attrs;
|
||||
|
||||
// Expressions used to initialize the identifier, for use by
|
||||
// the scripts-to-C++ compiler. We need to track all of them
|
||||
// because it's possible that a global value gets created using
|
||||
// one of the earlier instances rather than the last one.
|
||||
std::vector<ExprPtr> init_exprs;
|
||||
|
||||
// contains list of functions that are called when an option changes
|
||||
std::multimap<int, FuncPtr> option_handlers;
|
||||
|
||||
// Information managed by script optimization. We package this
|
||||
// up into a separate object for purposes of modularity, and,
|
||||
// via the associated pointer, to allow it to be modified in
|
||||
// contexts where the ID is itself "const".
|
||||
IDOptInfo* opt_info;
|
||||
|
||||
};
|
||||
|
||||
} // namespace zeek::detail
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue