mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
ID: use class IntrusivePtr
This commit is contained in:
parent
c3ea246237
commit
edde591748
12 changed files with 71 additions and 87 deletions
|
@ -272,7 +272,7 @@ IntrusivePtr<Expr> NameExpr::MakeLvalue()
|
||||||
void NameExpr::Assign(Frame* f, IntrusivePtr<Val> v)
|
void NameExpr::Assign(Frame* f, IntrusivePtr<Val> v)
|
||||||
{
|
{
|
||||||
if ( id->IsGlobal() )
|
if ( id->IsGlobal() )
|
||||||
id->SetVal(v.release());
|
id->SetVal(std::move(v));
|
||||||
else
|
else
|
||||||
f->SetElement(id.get(), v.release());
|
f->SetElement(id.get(), v.release());
|
||||||
}
|
}
|
||||||
|
@ -4241,10 +4241,10 @@ LambdaExpr::LambdaExpr(std::unique_ptr<function_ingredients> arg_ing,
|
||||||
// Update lamb's name
|
// Update lamb's name
|
||||||
dummy_func->SetName(my_name.c_str());
|
dummy_func->SetName(my_name.c_str());
|
||||||
|
|
||||||
Val* v = new Val(dummy_func);
|
auto v = make_intrusive<Val>(dummy_func);
|
||||||
Unref(dummy_func);
|
Unref(dummy_func);
|
||||||
id->SetVal(v); // id will unref v when its done.
|
id->SetVal(std::move(v));
|
||||||
id->SetType(ingredients->id->Type()->Ref());
|
id->SetType({NewRef{}, ingredients->id->Type()});
|
||||||
id->SetConst();
|
id->SetConst();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -613,7 +613,7 @@ BuiltinFunc::BuiltinFunc(built_in_func arg_func, const char* arg_name,
|
||||||
reporter->InternalError("built-in function %s multiply defined", Name());
|
reporter->InternalError("built-in function %s multiply defined", Name());
|
||||||
|
|
||||||
type = id->Type()->Ref();
|
type = id->Type()->Ref();
|
||||||
id->SetVal(new Val(this));
|
id->SetVal(make_intrusive<Val>(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
BuiltinFunc::~BuiltinFunc()
|
BuiltinFunc::~BuiltinFunc()
|
||||||
|
|
66
src/ID.cc
66
src/ID.cc
|
@ -26,9 +26,7 @@ ID::ID(const char* arg_name, IDScope arg_scope, bool arg_is_export)
|
||||||
scope = arg_scope;
|
scope = arg_scope;
|
||||||
is_export = arg_is_export;
|
is_export = arg_is_export;
|
||||||
is_option = false;
|
is_option = false;
|
||||||
type = 0;
|
|
||||||
val = 0;
|
val = 0;
|
||||||
attrs = 0;
|
|
||||||
is_const = false;
|
is_const = false;
|
||||||
is_enum_const = false;
|
is_enum_const = false;
|
||||||
is_type = false;
|
is_type = false;
|
||||||
|
@ -43,11 +41,6 @@ ID::ID(const char* arg_name, IDScope arg_scope, bool arg_is_export)
|
||||||
ID::~ID()
|
ID::~ID()
|
||||||
{
|
{
|
||||||
delete [] name;
|
delete [] name;
|
||||||
Unref(type);
|
|
||||||
Unref(attrs);
|
|
||||||
|
|
||||||
for ( auto element : option_handlers )
|
|
||||||
Unref(element.second);
|
|
||||||
|
|
||||||
if ( ! weak_ref )
|
if ( ! weak_ref )
|
||||||
Unref(val);
|
Unref(val);
|
||||||
|
@ -58,9 +51,9 @@ string ID::ModuleName() const
|
||||||
return extract_module_name(name);
|
return extract_module_name(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ID::SetType(BroType* t)
|
void ID::SetType(IntrusivePtr<BroType> t)
|
||||||
{
|
{
|
||||||
Unref(type); type = t;
|
type = std::move(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ID::ClearVal()
|
void ID::ClearVal()
|
||||||
|
@ -71,12 +64,12 @@ void ID::ClearVal()
|
||||||
val = 0;
|
val = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ID::SetVal(Val* v, bool arg_weak_ref)
|
void ID::SetVal(IntrusivePtr<Val> v, bool arg_weak_ref)
|
||||||
{
|
{
|
||||||
if ( ! weak_ref )
|
if ( ! weak_ref )
|
||||||
Unref(val);
|
Unref(val);
|
||||||
|
|
||||||
val = v;
|
val = v.release();
|
||||||
weak_ref = arg_weak_ref;
|
weak_ref = arg_weak_ref;
|
||||||
Modified();
|
Modified();
|
||||||
|
|
||||||
|
@ -104,11 +97,11 @@ void ID::SetVal(Val* v, bool arg_weak_ref)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ID::SetVal(Val* v, init_class c)
|
void ID::SetVal(IntrusivePtr<Val> v, init_class c)
|
||||||
{
|
{
|
||||||
if ( c == INIT_NONE || c == INIT_FULL )
|
if ( c == INIT_NONE || c == INIT_FULL )
|
||||||
{
|
{
|
||||||
SetVal(v);
|
SetVal(std::move(v));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,9 +110,9 @@ void ID::SetVal(Val* v, init_class c)
|
||||||
(type->Tag() != TYPE_VECTOR || c == INIT_REMOVE) )
|
(type->Tag() != TYPE_VECTOR || c == INIT_REMOVE) )
|
||||||
{
|
{
|
||||||
if ( c == INIT_EXTRA )
|
if ( c == INIT_EXTRA )
|
||||||
Error("+= initializer only applies to tables, sets, vectors and patterns", v);
|
Error("+= initializer only applies to tables, sets, vectors and patterns", v.get());
|
||||||
else
|
else
|
||||||
Error("-= initializer only applies to tables and sets", v);
|
Error("-= initializer only applies to tables and sets", v.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
@ -128,7 +121,7 @@ void ID::SetVal(Val* v, init_class c)
|
||||||
{
|
{
|
||||||
if ( ! val )
|
if ( ! val )
|
||||||
{
|
{
|
||||||
SetVal(v);
|
SetVal(std::move(v));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -140,11 +133,9 @@ void ID::SetVal(Val* v, init_class c)
|
||||||
v->RemoveFrom(val);
|
v->RemoveFrom(val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Unref(v);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ID::SetVal(Expr* ev, init_class c)
|
void ID::SetVal(IntrusivePtr<Expr> ev, init_class c)
|
||||||
{
|
{
|
||||||
Attr* a = attrs->FindAttr(c == INIT_EXTRA ?
|
Attr* a = attrs->FindAttr(c == INIT_EXTRA ?
|
||||||
ATTR_ADD_FUNC : ATTR_DEL_FUNC);
|
ATTR_ADD_FUNC : ATTR_DEL_FUNC);
|
||||||
|
@ -152,7 +143,7 @@ void ID::SetVal(Expr* ev, init_class c)
|
||||||
if ( ! a )
|
if ( ! a )
|
||||||
Internal("no add/delete function in ID::SetVal");
|
Internal("no add/delete function in ID::SetVal");
|
||||||
|
|
||||||
EvalFunc(a->AttrExpr(), ev);
|
EvalFunc({NewRef{}, a->AttrExpr()}, std::move(ev));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ID::IsRedefinable() const
|
bool ID::IsRedefinable() const
|
||||||
|
@ -160,11 +151,10 @@ bool ID::IsRedefinable() const
|
||||||
return FindAttr(ATTR_REDEF) != 0;
|
return FindAttr(ATTR_REDEF) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ID::SetAttrs(Attributes* a)
|
void ID::SetAttrs(IntrusivePtr<Attributes> a)
|
||||||
{
|
{
|
||||||
Unref(attrs);
|
|
||||||
attrs = 0;
|
attrs = 0;
|
||||||
AddAttrs(a);
|
AddAttrs(std::move(a));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ID::UpdateValAttrs()
|
void ID::UpdateValAttrs()
|
||||||
|
@ -173,10 +163,10 @@ void ID::UpdateValAttrs()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ( val && val->Type()->Tag() == TYPE_TABLE )
|
if ( val && val->Type()->Tag() == TYPE_TABLE )
|
||||||
val->AsTableVal()->SetAttrs(attrs);
|
val->AsTableVal()->SetAttrs(attrs.get());
|
||||||
|
|
||||||
if ( val && val->Type()->Tag() == TYPE_FILE )
|
if ( val && val->Type()->Tag() == TYPE_FILE )
|
||||||
val->AsFile()->SetAttrs(attrs);
|
val->AsFile()->SetAttrs(attrs.get());
|
||||||
|
|
||||||
if ( Type()->Tag() == TYPE_FUNC )
|
if ( Type()->Tag() == TYPE_FUNC )
|
||||||
{
|
{
|
||||||
|
@ -222,7 +212,7 @@ void ID::MakeDeprecated(Expr* deprecation)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
attr_list* attr = new attr_list{new Attr(ATTR_DEPRECATED, deprecation)};
|
attr_list* attr = new attr_list{new Attr(ATTR_DEPRECATED, deprecation)};
|
||||||
AddAttrs(new Attributes(attr, Type(), false, IsGlobal()));
|
AddAttrs(make_intrusive<Attributes>(attr, Type(), false, IsGlobal()));
|
||||||
}
|
}
|
||||||
|
|
||||||
string ID::GetDeprecationWarning() const
|
string ID::GetDeprecationWarning() const
|
||||||
|
@ -245,12 +235,12 @@ string ID::GetDeprecationWarning() const
|
||||||
return fmt("deprecated (%s): %s", Name(), result.c_str());
|
return fmt("deprecated (%s): %s", Name(), result.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ID::AddAttrs(Attributes* a)
|
void ID::AddAttrs(IntrusivePtr<Attributes> a)
|
||||||
{
|
{
|
||||||
if ( attrs )
|
if ( attrs )
|
||||||
attrs->AddAttrs(a);
|
attrs->AddAttrs(a.release());
|
||||||
else
|
else
|
||||||
attrs = a;
|
attrs = std::move(a);
|
||||||
|
|
||||||
UpdateValAttrs();
|
UpdateValAttrs();
|
||||||
}
|
}
|
||||||
|
@ -272,20 +262,20 @@ void ID::SetOption()
|
||||||
if ( ! IsRedefinable() )
|
if ( ! IsRedefinable() )
|
||||||
{
|
{
|
||||||
attr_list* attr = new attr_list{new Attr(ATTR_REDEF)};
|
attr_list* attr = new attr_list{new Attr(ATTR_REDEF)};
|
||||||
AddAttrs(new Attributes(attr, Type(), false, IsGlobal()));
|
AddAttrs(make_intrusive<Attributes>(attr, Type(), false, IsGlobal()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ID::EvalFunc(Expr* ef, Expr* ev)
|
void ID::EvalFunc(IntrusivePtr<Expr> ef, IntrusivePtr<Expr> ev)
|
||||||
{
|
{
|
||||||
auto arg1 = make_intrusive<ConstExpr>(IntrusivePtr{NewRef{}, val});
|
auto arg1 = make_intrusive<ConstExpr>(IntrusivePtr{NewRef{}, val});
|
||||||
auto args = make_intrusive<ListExpr>();
|
auto args = make_intrusive<ListExpr>();
|
||||||
args->Append(std::move(arg1));
|
args->Append(std::move(arg1));
|
||||||
args->Append({NewRef{}, ev});
|
args->Append(std::move(ev));
|
||||||
|
|
||||||
auto ce = make_intrusive<CallExpr>(IntrusivePtr{NewRef{}, ef}, std::move(args));
|
auto ce = make_intrusive<CallExpr>(std::move(ef), std::move(args));
|
||||||
|
|
||||||
SetVal(ce->Eval(0).release());
|
SetVal(ce->Eval(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -358,7 +348,7 @@ TraversalCode ID::Traverse(TraversalCallback* cb) const
|
||||||
void ID::Error(const char* msg, const BroObj* o2)
|
void ID::Error(const char* msg, const BroObj* o2)
|
||||||
{
|
{
|
||||||
BroObj::Error(msg, o2, 1);
|
BroObj::Error(msg, o2, 1);
|
||||||
SetType(error_type());
|
SetType({AdoptRef{}, error_type()});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ID::Describe(ODesc* d) const
|
void ID::Describe(ODesc* d) const
|
||||||
|
@ -581,9 +571,9 @@ void ID::UpdateValID()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void ID::AddOptionHandler(Func* callback, int priority)
|
void ID::AddOptionHandler(IntrusivePtr<Func> callback, int priority)
|
||||||
{
|
{
|
||||||
option_handlers.insert({priority, callback});
|
option_handlers.emplace(priority, std::move(callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<Func*> ID::GetOptionHandlers() const
|
vector<Func*> ID::GetOptionHandlers() const
|
||||||
|
@ -593,6 +583,6 @@ vector<Func*> ID::GetOptionHandlers() const
|
||||||
// a lot...
|
// a lot...
|
||||||
vector<Func*> v;
|
vector<Func*> v;
|
||||||
for ( auto& element : option_handlers )
|
for ( auto& element : option_handlers )
|
||||||
v.push_back(element.second);
|
v.push_back(element.second.get());
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
29
src/ID.h
29
src/ID.h
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "IntrusivePtr.h"
|
||||||
#include "Obj.h"
|
#include "Obj.h"
|
||||||
#include "Attr.h"
|
#include "Attr.h"
|
||||||
#include "Notifier.h"
|
#include "Notifier.h"
|
||||||
|
@ -35,9 +36,9 @@ public:
|
||||||
|
|
||||||
std::string ModuleName() const;
|
std::string ModuleName() const;
|
||||||
|
|
||||||
void SetType(BroType* t);
|
void SetType(IntrusivePtr<BroType> t);
|
||||||
BroType* Type() { return type; }
|
BroType* Type() { return type.get(); }
|
||||||
const BroType* Type() const { return type; }
|
const BroType* Type() const { return type.get(); }
|
||||||
|
|
||||||
void MakeType() { is_type = true; }
|
void MakeType() { is_type = true; }
|
||||||
BroType* AsType() { return is_type ? Type() : 0; }
|
BroType* AsType() { return is_type ? Type() : 0; }
|
||||||
|
@ -51,10 +52,10 @@ public:
|
||||||
// reference to the Val, the Val will be destroyed (naturally,
|
// reference to the Val, the Val will be destroyed (naturally,
|
||||||
// you have to take care that it will not be accessed via
|
// you have to take care that it will not be accessed via
|
||||||
// the ID afterwards).
|
// the ID afterwards).
|
||||||
void SetVal(Val* v, bool weak_ref = false);
|
void SetVal(IntrusivePtr<Val> v, bool weak_ref = false);
|
||||||
|
|
||||||
void SetVal(Val* v, init_class c);
|
void SetVal(IntrusivePtr<Val> v, init_class c);
|
||||||
void SetVal(Expr* ev, init_class c);
|
void SetVal(IntrusivePtr<Expr> ev, init_class c);
|
||||||
|
|
||||||
bool HasVal() const { return val != 0; }
|
bool HasVal() const { return val != 0; }
|
||||||
Val* ID_Val() { return val; }
|
Val* ID_Val() { return val; }
|
||||||
|
@ -75,11 +76,11 @@ public:
|
||||||
|
|
||||||
bool IsRedefinable() const;
|
bool IsRedefinable() const;
|
||||||
|
|
||||||
void SetAttrs(Attributes* attr);
|
void SetAttrs(IntrusivePtr<Attributes> attr);
|
||||||
void AddAttrs(Attributes* attr);
|
void AddAttrs(IntrusivePtr<Attributes> attr);
|
||||||
void RemoveAttr(attr_tag a);
|
void RemoveAttr(attr_tag a);
|
||||||
void UpdateValAttrs();
|
void UpdateValAttrs();
|
||||||
Attributes* Attrs() const { return attrs; }
|
Attributes* Attrs() const { return attrs.get(); }
|
||||||
|
|
||||||
Attr* FindAttr(attr_tag t) const;
|
Attr* FindAttr(attr_tag t) const;
|
||||||
|
|
||||||
|
@ -109,11 +110,11 @@ public:
|
||||||
{ return !option_handlers.empty(); }
|
{ return !option_handlers.empty(); }
|
||||||
|
|
||||||
// Takes ownership of callback.
|
// Takes ownership of callback.
|
||||||
void AddOptionHandler(Func* callback, int priority);
|
void AddOptionHandler(IntrusivePtr<Func> callback, int priority);
|
||||||
std::vector<Func*> GetOptionHandlers() const;
|
std::vector<Func*> GetOptionHandlers() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void EvalFunc(Expr* ef, Expr* ev);
|
void EvalFunc(IntrusivePtr<Expr> ef, IntrusivePtr<Expr> ev);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void UpdateValID();
|
void UpdateValID();
|
||||||
|
@ -122,13 +123,13 @@ protected:
|
||||||
const char* name;
|
const char* name;
|
||||||
IDScope scope;
|
IDScope scope;
|
||||||
bool is_export;
|
bool is_export;
|
||||||
BroType* type;
|
IntrusivePtr<BroType> type;
|
||||||
bool is_const, is_enum_const, is_type, is_option;
|
bool is_const, is_enum_const, is_type, is_option;
|
||||||
int offset;
|
int offset;
|
||||||
Val* val;
|
Val* val;
|
||||||
Attributes* attrs;
|
IntrusivePtr<Attributes> attrs;
|
||||||
// contains list of functions that are called when an option changes
|
// contains list of functions that are called when an option changes
|
||||||
std::multimap<int, Func*> option_handlers;
|
std::multimap<int, IntrusivePtr<Func>> option_handlers;
|
||||||
|
|
||||||
bool infer_return_type;
|
bool infer_return_type;
|
||||||
bool weak_ref;
|
bool weak_ref;
|
||||||
|
|
|
@ -194,7 +194,7 @@ void net_init(const std::optional<std::string>& interface,
|
||||||
writefile, pkt_dumper->ErrorMsg());
|
writefile, pkt_dumper->ErrorMsg());
|
||||||
|
|
||||||
if ( ID* id = global_scope()->Lookup("trace_output_file") )
|
if ( ID* id = global_scope()->Lookup("trace_output_file") )
|
||||||
id->SetVal(new StringVal(writefile));
|
id->SetVal(make_intrusive<StringVal>(writefile));
|
||||||
else
|
else
|
||||||
reporter->Error("trace_output_file not defined in bro.init");
|
reporter->Error("trace_output_file not defined in bro.init");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1177,7 +1177,7 @@ void EnumType::CheckAndAddName(const string& module_name, const char* name,
|
||||||
if ( ! id )
|
if ( ! id )
|
||||||
{
|
{
|
||||||
id = install_ID(name, module_name.c_str(), true, is_export);
|
id = install_ID(name, module_name.c_str(), true, is_export);
|
||||||
id->SetType(this->Ref());
|
id->SetType({NewRef{}, this});
|
||||||
id->SetEnumConst();
|
id->SetEnumConst();
|
||||||
|
|
||||||
if ( deprecation )
|
if ( deprecation )
|
||||||
|
|
34
src/Var.cc
34
src/Var.cc
|
@ -104,15 +104,15 @@ static void make_var(ID* id, IntrusivePtr<BroType> t, init_class c, IntrusivePtr
|
||||||
t = {AdoptRef{}, init_type(init.get())};
|
t = {AdoptRef{}, init_type(init.get())};
|
||||||
if ( ! t )
|
if ( ! t )
|
||||||
{
|
{
|
||||||
id->SetType(error_type());
|
id->SetType({AdoptRef{}, error_type()});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
id->SetType(t->Ref());
|
id->SetType(t);
|
||||||
|
|
||||||
if ( attr )
|
if ( attr )
|
||||||
id->AddAttrs(new Attributes(attr, t.get(), false, id->IsGlobal()));
|
id->AddAttrs(make_intrusive<Attributes>(attr, t.get(), false, id->IsGlobal()));
|
||||||
|
|
||||||
if ( init )
|
if ( init )
|
||||||
{
|
{
|
||||||
|
@ -121,10 +121,7 @@ static void make_var(ID* id, IntrusivePtr<BroType> t, init_class c, IntrusivePtr
|
||||||
{
|
{
|
||||||
TableConstructorExpr* ctor = (TableConstructorExpr*) init.get();
|
TableConstructorExpr* ctor = (TableConstructorExpr*) init.get();
|
||||||
if ( ctor->Attrs() )
|
if ( ctor->Attrs() )
|
||||||
{
|
id->AddAttrs({NewRef{}, ctor->Attrs()});
|
||||||
::Ref(ctor->Attrs());
|
|
||||||
id->AddAttrs(ctor->Attrs());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -132,10 +129,7 @@ static void make_var(ID* id, IntrusivePtr<BroType> t, init_class c, IntrusivePtr
|
||||||
{
|
{
|
||||||
SetConstructorExpr* ctor = (SetConstructorExpr*) init.get();
|
SetConstructorExpr* ctor = (SetConstructorExpr*) init.get();
|
||||||
if ( ctor->Attrs() )
|
if ( ctor->Attrs() )
|
||||||
{
|
id->AddAttrs({NewRef{}, ctor->Attrs()});
|
||||||
::Ref(ctor->Attrs());
|
|
||||||
id->AddAttrs(ctor->Attrs());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -155,7 +149,7 @@ static void make_var(ID* id, IntrusivePtr<BroType> t, init_class c, IntrusivePtr
|
||||||
if ( init && ((c == INIT_EXTRA && id->FindAttr(ATTR_ADD_FUNC)) ||
|
if ( init && ((c == INIT_EXTRA && id->FindAttr(ATTR_ADD_FUNC)) ||
|
||||||
(c == INIT_REMOVE && id->FindAttr(ATTR_DEL_FUNC)) ))
|
(c == INIT_REMOVE && id->FindAttr(ATTR_DEL_FUNC)) ))
|
||||||
// Just apply the function.
|
// Just apply the function.
|
||||||
id->SetVal(init->Ref(), c);
|
id->SetVal(init, c);
|
||||||
|
|
||||||
else if ( dt != VAR_REDEF || init || ! attr )
|
else if ( dt != VAR_REDEF || init || ! attr )
|
||||||
{
|
{
|
||||||
|
@ -184,9 +178,9 @@ static void make_var(ID* id, IntrusivePtr<BroType> t, init_class c, IntrusivePtr
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( aggr )
|
if ( aggr )
|
||||||
id->SetVal(aggr.release(), c);
|
id->SetVal(std::move(aggr), c);
|
||||||
else if ( v )
|
else if ( v )
|
||||||
id->SetVal(v.release(), c);
|
id->SetVal(std::move(v), c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +210,7 @@ static void make_var(ID* id, IntrusivePtr<BroType> t, init_class c, IntrusivePtr
|
||||||
// we can later access the ID even if no implementations have been
|
// we can later access the ID even if no implementations have been
|
||||||
// defined.
|
// defined.
|
||||||
Func* f = new BroFunc(id, 0, 0, 0, 0);
|
Func* f = new BroFunc(id, 0, 0, 0, 0);
|
||||||
id->SetVal(new Val(f));
|
id->SetVal(make_intrusive<Val>(f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,11 +278,11 @@ void add_type(ID* id, IntrusivePtr<BroType> t, attr_list* attr)
|
||||||
|
|
||||||
tnew->SetName(id->Name());
|
tnew->SetName(id->Name());
|
||||||
|
|
||||||
id->SetType(IntrusivePtr{tnew}.release());
|
id->SetType(tnew);
|
||||||
id->MakeType();
|
id->MakeType();
|
||||||
|
|
||||||
if ( attr )
|
if ( attr )
|
||||||
id->SetAttrs(new Attributes(attr, tnew.get(), false, false));
|
id->SetAttrs(make_intrusive<Attributes>(attr, tnew.get(), false, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void transfer_arg_defaults(RecordType* args, RecordType* recv)
|
static void transfer_arg_defaults(RecordType* args, RecordType* recv)
|
||||||
|
@ -386,7 +380,7 @@ void begin_func(ID* id, const char* module_name, function_flavor flavor,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
id->SetType(IntrusivePtr{t}.release());
|
id->SetType(t);
|
||||||
|
|
||||||
push_scope(id, attrs);
|
push_scope(id, attrs);
|
||||||
|
|
||||||
|
@ -402,7 +396,7 @@ void begin_func(ID* id, const char* module_name, function_flavor flavor,
|
||||||
arg_id->Error("argument name used twice");
|
arg_id->Error("argument name used twice");
|
||||||
|
|
||||||
arg_id = install_ID(arg_i->id, module_name, false, false);
|
arg_id = install_ID(arg_i->id, module_name, false, false);
|
||||||
arg_id->SetType(arg_i->type->Ref());
|
arg_id->SetType({NewRef{}, arg_i->type});
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Attr* depr_attr = find_attr(attrs, ATTR_DEPRECATED) )
|
if ( Attr* depr_attr = find_attr(attrs, ATTR_DEPRECATED) )
|
||||||
|
@ -494,7 +488,7 @@ void end_func(IntrusivePtr<Stmt> body)
|
||||||
ingredients->frame_size,
|
ingredients->frame_size,
|
||||||
ingredients->priority);
|
ingredients->priority);
|
||||||
|
|
||||||
ingredients->id->SetVal(new Val(f));
|
ingredients->id->SetVal(make_intrusive<Val>(f));
|
||||||
ingredients->id->SetConst();
|
ingredients->id->SetConst();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1210,7 +1210,7 @@ bool Manager::ProcessIdentifierUpdate(broker::zeek::IdentifierUpdate iu)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
id->SetVal(val.release());
|
id->SetVal(std::move(val));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -717,7 +717,7 @@ int main(int argc, char** argv)
|
||||||
if ( ! id )
|
if ( ! id )
|
||||||
reporter->InternalError("global cmd_line_bpf_filter not defined");
|
reporter->InternalError("global cmd_line_bpf_filter not defined");
|
||||||
|
|
||||||
id->SetVal(new StringVal(*options.pcap_filter));
|
id->SetVal(make_intrusive<StringVal>(*options.pcap_filter));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto all_signature_files = options.signature_files;
|
auto all_signature_files = options.signature_files;
|
||||||
|
|
|
@ -33,7 +33,7 @@ static bool call_option_handlers_and_set_value(StringVal* name, ID* i, Val* val,
|
||||||
}
|
}
|
||||||
|
|
||||||
// clone to prevent changes
|
// clone to prevent changes
|
||||||
i->SetVal(val->Clone());
|
i->SetVal({AdoptRef{}, val->Clone()});
|
||||||
Unref(val); // Either ref'd once or function call result.
|
Unref(val); // Either ref'd once or function call result.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,6 @@ function Option::set_change_handler%(ID: string, on_change: any, priority: int &
|
||||||
}
|
}
|
||||||
|
|
||||||
auto* func = on_change->AsFunc();
|
auto* func = on_change->AsFunc();
|
||||||
Ref(func);
|
i->AddOptionHandler({NewRef{}, func}, -priority);
|
||||||
i->AddOptionHandler(func, -priority);
|
|
||||||
return val_mgr->GetBool(1);
|
return val_mgr->GetBool(1);
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -693,7 +693,7 @@ expr:
|
||||||
if ( ! id->Type() )
|
if ( ! id->Type() )
|
||||||
{
|
{
|
||||||
id->Error("undeclared variable");
|
id->Error("undeclared variable");
|
||||||
id->SetType(error_type());
|
id->SetType({AdoptRef{}, error_type()});
|
||||||
$$ = new NameExpr(std::move(id));
|
$$ = new NameExpr(std::move(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1623,7 +1623,7 @@ case_type:
|
||||||
TOK_TYPE type
|
TOK_TYPE type
|
||||||
{
|
{
|
||||||
$$ = new ID(0, SCOPE_FUNCTION, 0);
|
$$ = new ID(0, SCOPE_FUNCTION, 0);
|
||||||
$$->SetType($2);
|
$$->SetType({AdoptRef{}, $2});
|
||||||
}
|
}
|
||||||
|
|
||||||
| TOK_TYPE type TOK_AS TOK_ID
|
| TOK_TYPE type TOK_AS TOK_ID
|
||||||
|
|
|
@ -1233,7 +1233,7 @@ bool Supervisor::SupervisedNode::InitCluster() const
|
||||||
cluster_nodes->Assign(key.get(), val.release());
|
cluster_nodes->Assign(key.get(), val.release());
|
||||||
}
|
}
|
||||||
|
|
||||||
cluster_manager_is_logger_id->SetVal(val_mgr->GetBool(! has_logger));
|
cluster_manager_is_logger_id->SetVal({AdoptRef{}, val_mgr->GetBool(! has_logger)});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue