Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/topic/timw/internal-type-symbols'
Browse files Browse the repository at this point in the history
* origin/topic/timw/internal-type-symbols:
  Move implementation of internal_{type,var,etc} methods back into global namespace.
  • Loading branch information
jsiwek committed Nov 24, 2020
2 parents 08c8b74 + c8cf198 commit f70a7cb
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 31 deletions.
9 changes: 9 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@

3.3.0-dev.561 | 2020-11-23 21:50:19 -0800

* Move implementation of internal_{type,var,etc} methods back into global namespace.
(Tim Wojtulewicz, Corelight)

This fixes an unknown symbol error if using those methods. They're defined
as extern in the global namespace in Var.h, but Var.cc had their
implementations defined in the zeek::detail namespace.

3.3.0-dev.559 | 2020-11-23 21:39:29 -0800

* Simplify Debian/Ubuntu CI dependencies and setup (Dominik Charousset, Corelight)
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.3.0-dev.559
3.3.0-dev.561
60 changes: 30 additions & 30 deletions src/Var.cc
Original file line number Diff line number Diff line change
Expand Up @@ -731,11 +731,6 @@ void end_func(StmtPtr body)
ingredients.release();
}

Val* internal_val(const char* name)
{
return id::find_val(name).get();
}

IDPList gather_outer_ids(Scope* scope, Stmt* body)
{
OuterIDBindingFinder cb(scope);
Expand All @@ -756,102 +751,107 @@ IDPList gather_outer_ids(Scope* scope, Stmt* body)
return idl;
}

Val* internal_const_val(const char* name)
} // namespace zeek::detail

zeek::Val* internal_val(const char* name)
{
return zeek::id::find_val(name).get();
}

zeek::Val* internal_const_val(const char* name)
{
return id::find_const(name).get();
return zeek::id::find_const(name).get();
}

Val* opt_internal_val(const char* name)
zeek::Val* opt_internal_val(const char* name)
{
const auto& id = lookup_ID(name, GLOBAL_MODULE_NAME);
const auto& id = zeek::detail::lookup_ID(name, zeek::detail::GLOBAL_MODULE_NAME);
return id ? id->GetVal().get() : nullptr;
}

double opt_internal_double(const char* name)
{
const auto& id = lookup_ID(name, GLOBAL_MODULE_NAME);
const auto& id = zeek::detail::lookup_ID(name, zeek::detail::GLOBAL_MODULE_NAME);
if ( ! id ) return 0.0;
const auto& v = id->GetVal();
return v ? v->InternalDouble() : 0.0;
}

bro_int_t opt_internal_int(const char* name)
{
const auto& id = lookup_ID(name, GLOBAL_MODULE_NAME);
const auto& id = zeek::detail::lookup_ID(name, zeek::detail::GLOBAL_MODULE_NAME);
if ( ! id ) return 0;
const auto& v = id->GetVal();
return v ? v->InternalInt() : 0;
}

bro_uint_t opt_internal_unsigned(const char* name)
{
const auto& id = lookup_ID(name, GLOBAL_MODULE_NAME);
const auto& id = zeek::detail::lookup_ID(name, zeek::detail::GLOBAL_MODULE_NAME);
if ( ! id ) return 0;
const auto& v = id->GetVal();
return v ? v->InternalUnsigned() : 0;
}

StringVal* opt_internal_string(const char* name)
zeek::StringVal* opt_internal_string(const char* name)
{
const auto& id = lookup_ID(name, GLOBAL_MODULE_NAME);
const auto& id = zeek::detail::lookup_ID(name, zeek::detail::GLOBAL_MODULE_NAME);
if ( ! id ) return nullptr;
const auto& v = id->GetVal();
return v ? v->AsStringVal() : nullptr;
}

TableVal* opt_internal_table(const char* name)
zeek::TableVal* opt_internal_table(const char* name)
{
const auto& id = lookup_ID(name, GLOBAL_MODULE_NAME);
const auto& id = zeek::detail::lookup_ID(name, zeek::detail::GLOBAL_MODULE_NAME);
if ( ! id ) return nullptr;
const auto& v = id->GetVal();
return v ? v->AsTableVal() : nullptr;
}

ListVal* internal_list_val(const char* name)
zeek::ListVal* internal_list_val(const char* name)
{
const auto& id = lookup_ID(name, GLOBAL_MODULE_NAME);
const auto& id = zeek::detail::lookup_ID(name, zeek::detail::GLOBAL_MODULE_NAME);
if ( ! id )
return nullptr;

Val* v = id->GetVal().get();
zeek::Val* v = id->GetVal().get();

if ( v )
{
if ( v->GetType()->Tag() == TYPE_LIST )
return (ListVal*) v;
if ( v->GetType()->Tag() == zeek::TYPE_LIST )
return (zeek::ListVal*) v;

else if ( v->GetType()->IsSet() )
{
TableVal* tv = v->AsTableVal();
zeek::TableVal* tv = v->AsTableVal();
auto lv = tv->ToPureListVal();
return lv.release();
}

else
reporter->InternalError("internal variable %s is not a list", name);
zeek::reporter->InternalError("internal variable %s is not a list", name);
}

return nullptr;
}

Type* internal_type(const char* name)
zeek::Type* internal_type(const char* name)
{
return id::find_type(name).get();
return zeek::id::find_type(name).get();
}

Func* internal_func(const char* name)
zeek::Func* internal_func(const char* name)
{
const auto& v = id::find_val(name);
const auto& v = zeek::id::find_val(name);

if ( v )
return v->AsFunc();
else
return nullptr;
}

EventHandlerPtr internal_handler(const char* name)
zeek::EventHandlerPtr internal_handler(const char* name)
{
return event_registry->Register(name);
}

} // namespace zeek::detail

0 comments on commit f70a7cb

Please sign in to comment.