mirror of
https://github.com/zeek/zeek.git
synced 2025-10-04 23:58:20 +00:00
Factor static-local nil IntrusivePtrs to global locations
Minor optimization to remove any run-time impact.
This commit is contained in:
parent
a384bb8b81
commit
ea878208ba
8 changed files with 21 additions and 23 deletions
|
@ -28,8 +28,6 @@ EventHandler::operator bool() const
|
||||||
|
|
||||||
const IntrusivePtr<FuncType>& EventHandler::GetType(bool check_export)
|
const IntrusivePtr<FuncType>& EventHandler::GetType(bool check_export)
|
||||||
{
|
{
|
||||||
static IntrusivePtr<FuncType> nil;
|
|
||||||
|
|
||||||
if ( type )
|
if ( type )
|
||||||
return type;
|
return type;
|
||||||
|
|
||||||
|
@ -37,10 +35,10 @@ const IntrusivePtr<FuncType>& EventHandler::GetType(bool check_export)
|
||||||
check_export);
|
check_export);
|
||||||
|
|
||||||
if ( ! id )
|
if ( ! id )
|
||||||
return nil;
|
return FuncType::nil;
|
||||||
|
|
||||||
if ( id->GetType()->Tag() != TYPE_FUNC )
|
if ( id->GetType()->Tag() != TYPE_FUNC )
|
||||||
return nil;
|
return FuncType::nil;
|
||||||
|
|
||||||
type = id->GetType<FuncType>();
|
type = id->GetType<FuncType>();
|
||||||
return type;
|
return type;
|
||||||
|
|
|
@ -30,6 +30,8 @@ class Scope;
|
||||||
|
|
||||||
class Func : public BroObj {
|
class Func : public BroObj {
|
||||||
public:
|
public:
|
||||||
|
static inline const IntrusivePtr<Func> nil;
|
||||||
|
|
||||||
enum Kind { BRO_FUNC, BUILTIN_FUNC };
|
enum Kind { BRO_FUNC, BUILTIN_FUNC };
|
||||||
|
|
||||||
explicit Func(Kind arg_kind);
|
explicit Func(Kind arg_kind);
|
||||||
|
@ -99,10 +101,7 @@ public:
|
||||||
|
|
||||||
uint32_t GetUniqueFuncID() const { return unique_id; }
|
uint32_t GetUniqueFuncID() const { return unique_id; }
|
||||||
static const IntrusivePtr<Func>& GetFuncPtrByID(uint32_t id)
|
static const IntrusivePtr<Func>& GetFuncPtrByID(uint32_t id)
|
||||||
{
|
{ return id >= unique_ids.size() ? Func::nil : unique_ids[id]; }
|
||||||
static IntrusivePtr<Func> nil;
|
|
||||||
return id >= unique_ids.size() ? nil : unique_ids[id];
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Func();
|
Func();
|
||||||
|
|
2
src/ID.h
2
src/ID.h
|
@ -28,6 +28,8 @@ typedef enum { SCOPE_FUNCTION, SCOPE_MODULE, SCOPE_GLOBAL } IDScope;
|
||||||
|
|
||||||
class ID final : public BroObj, public notifier::Modifiable {
|
class ID final : public BroObj, public notifier::Modifiable {
|
||||||
public:
|
public:
|
||||||
|
static inline const IntrusivePtr<ID> nil;
|
||||||
|
|
||||||
ID(const char* name, IDScope arg_scope, bool arg_is_export);
|
ID(const char* name, IDScope arg_scope, bool arg_is_export);
|
||||||
~ID() override;
|
~ID() override;
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ typedef PList<Scope> scope_list;
|
||||||
|
|
||||||
static scope_list scopes;
|
static scope_list scopes;
|
||||||
static Scope* top_scope;
|
static Scope* top_scope;
|
||||||
static IntrusivePtr<ID> nil_id;
|
|
||||||
|
|
||||||
Scope::Scope(IntrusivePtr<ID> id, attr_list* al)
|
Scope::Scope(IntrusivePtr<ID> id, attr_list* al)
|
||||||
: scope_id(std::move(id))
|
: scope_id(std::move(id))
|
||||||
|
@ -64,7 +63,7 @@ const IntrusivePtr<ID>& Scope::Find(std::string_view name) const
|
||||||
if ( entry != local.end() )
|
if ( entry != local.end() )
|
||||||
return entry->second;
|
return entry->second;
|
||||||
|
|
||||||
return nil_id;
|
return ID::nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
IntrusivePtr<ID> Scope::Remove(std::string_view name)
|
IntrusivePtr<ID> Scope::Remove(std::string_view name)
|
||||||
|
@ -172,7 +171,7 @@ const IntrusivePtr<ID>& lookup_ID(const char* name, const char* curr_module,
|
||||||
return global_scope()->Find(globalname);
|
return global_scope()->Find(globalname);
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil_id;
|
return ID::nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
IntrusivePtr<ID> install_ID(const char* name, const char* module_name,
|
IntrusivePtr<ID> install_ID(const char* name, const char* module_name,
|
||||||
|
|
|
@ -111,8 +111,7 @@ int BroType::MatchesIndex(ListExpr* const index) const
|
||||||
|
|
||||||
const IntrusivePtr<BroType>& BroType::Yield() const
|
const IntrusivePtr<BroType>& BroType::Yield() const
|
||||||
{
|
{
|
||||||
static IntrusivePtr<BroType> nil;
|
return BroType::nil;
|
||||||
return nil;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BroType::HasField(const char* /* field */) const
|
bool BroType::HasField(const char* /* field */) const
|
||||||
|
|
|
@ -141,6 +141,8 @@ const int MATCHES_INDEX_VECTOR = 2;
|
||||||
|
|
||||||
class BroType : public BroObj {
|
class BroType : public BroObj {
|
||||||
public:
|
public:
|
||||||
|
static inline const IntrusivePtr<BroType> nil;
|
||||||
|
|
||||||
explicit BroType(TypeTag tag, bool base_type = false);
|
explicit BroType(TypeTag tag, bool base_type = false);
|
||||||
|
|
||||||
// Performs a shallow clone operation of the Bro type.
|
// Performs a shallow clone operation of the Bro type.
|
||||||
|
@ -456,6 +458,8 @@ protected:
|
||||||
|
|
||||||
class FuncType final : public BroType {
|
class FuncType final : public BroType {
|
||||||
public:
|
public:
|
||||||
|
static inline const IntrusivePtr<FuncType> nil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prototype is only currently used for events and hooks which declare
|
* Prototype is only currently used for events and hooks which declare
|
||||||
* multiple signature prototypes that allow users to have handlers
|
* multiple signature prototypes that allow users to have handlers
|
||||||
|
|
15
src/Val.cc
15
src/Val.cc
|
@ -1897,9 +1897,6 @@ IntrusivePtr<Val> TableVal::Default(const IntrusivePtr<Val>& index)
|
||||||
|
|
||||||
const IntrusivePtr<Val>& TableVal::Find(const IntrusivePtr<Val>& index)
|
const IntrusivePtr<Val>& TableVal::Find(const IntrusivePtr<Val>& index)
|
||||||
{
|
{
|
||||||
static IntrusivePtr<Val> nil;
|
|
||||||
static IntrusivePtr<Val> exists = val_mgr->True();
|
|
||||||
|
|
||||||
if ( subnets )
|
if ( subnets )
|
||||||
{
|
{
|
||||||
TableEntryVal* v = (TableEntryVal*) subnets->Lookup(index.get());
|
TableEntryVal* v = (TableEntryVal*) subnets->Lookup(index.get());
|
||||||
|
@ -1911,10 +1908,10 @@ const IntrusivePtr<Val>& TableVal::Find(const IntrusivePtr<Val>& index)
|
||||||
if ( v->GetVal() )
|
if ( v->GetVal() )
|
||||||
return v->GetVal();
|
return v->GetVal();
|
||||||
|
|
||||||
return exists;
|
return val_mgr->True();
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil;
|
return Val::nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
const PDict<TableEntryVal>* tbl = AsTable();
|
const PDict<TableEntryVal>* tbl = AsTable();
|
||||||
|
@ -1935,12 +1932,12 @@ const IntrusivePtr<Val>& TableVal::Find(const IntrusivePtr<Val>& index)
|
||||||
if ( v->GetVal() )
|
if ( v->GetVal() )
|
||||||
return v->GetVal();
|
return v->GetVal();
|
||||||
|
|
||||||
return exists;
|
return val_mgr->True();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil;
|
return Val::nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
IntrusivePtr<Val> TableVal::FindOrDefault(const IntrusivePtr<Val>& index)
|
IntrusivePtr<Val> TableVal::FindOrDefault(const IntrusivePtr<Val>& index)
|
||||||
|
@ -3139,10 +3136,8 @@ bool VectorVal::AddTo(Val* val, bool /* is_first_init */) const
|
||||||
|
|
||||||
const IntrusivePtr<Val>& VectorVal::At(unsigned int index) const
|
const IntrusivePtr<Val>& VectorVal::At(unsigned int index) const
|
||||||
{
|
{
|
||||||
static IntrusivePtr<Val> nil;
|
|
||||||
|
|
||||||
if ( index >= val.vector_val->size() )
|
if ( index >= val.vector_val->size() )
|
||||||
return nil;
|
return Val::nil;
|
||||||
|
|
||||||
return (*val.vector_val)[index];
|
return (*val.vector_val)[index];
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,6 +118,8 @@ union BroValUnion {
|
||||||
|
|
||||||
class Val : public BroObj {
|
class Val : public BroObj {
|
||||||
public:
|
public:
|
||||||
|
static inline const IntrusivePtr<Val> nil;
|
||||||
|
|
||||||
Val(double d, TypeTag t)
|
Val(double d, TypeTag t)
|
||||||
: val(d), type(base_type(t))
|
: val(d), type(base_type(t))
|
||||||
{}
|
{}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue