tracking of optimization information associated with expressions

This commit is contained in:
Vern Paxson 2021-08-16 10:46:40 -07:00
parent 3ac725f44b
commit 074b18f3e8
3 changed files with 36 additions and 0 deletions

View file

@ -19,6 +19,7 @@
#include "zeek/module_util.h"
#include "zeek/DebugLogger.h"
#include "zeek/Hash.h"
#include "zeek/script_opt/ExprOptInfo.h"
#include "zeek/broker/Data.h"
@ -79,6 +80,12 @@ const char* expr_name(BroExprTag t)
Expr::Expr(BroExprTag arg_tag) : tag(arg_tag), paren(false), type(nullptr)
{
SetLocationInfo(&start_location, &end_location);
opt_info = new ExprOptInfo();
}
Expr::~Expr()
{
delete opt_info;
}
const ListExpr* Expr::AsListExpr() const

View file

@ -117,6 +117,8 @@ using RefExprPtr = IntrusivePtr<RefExpr>;
class Stmt;
using StmtPtr = IntrusivePtr<Stmt>;
class ExprOptInfo;
class Expr : public Obj {
public:
const TypePtr& GetType() const
@ -389,6 +391,12 @@ public:
return Obj::GetLocationInfo();
}
// Access script optimization information associated with
// this statement.
ExprOptInfo* GetOptInfo() const { return opt_info; }
~Expr() override;
protected:
Expr() = default;
explicit Expr(BroExprTag arg_tag);
@ -418,6 +426,10 @@ protected:
// derived, if any. Used as an aid for generating meaningful
// and correctly-localized error messages.
ExprPtr original = nullptr;
// Information associated with the Expr for purposes of
// script optimization.
ExprOptInfo* opt_info;
};
class NameExpr final : public Expr {

View file

@ -0,0 +1,17 @@
// See the file "COPYING" in the main distribution directory for copyright.
// Auxiliary information associated with expressions to aid script
// optimization.
#pragma once
namespace zeek::detail {
class ExprOptInfo {
public:
// The AST number of the statement in which this expression
// appears.
int stmt_num = -1; // -1 = not assigned yet
};
} // namespace zeek::detail