type/id/zeekygen: Add EnumVal to enum identifiers

Provide a direct way to go from a zeek🆔:ID value to EnumVal without
needing to go through the type.
This commit is contained in:
Arne Welzel 2025-04-03 16:39:28 +02:00
parent f0ccd5c7f8
commit 18597ea49c
2 changed files with 11 additions and 1 deletions

View file

@ -1567,7 +1567,7 @@ void EnumType::CheckAndAddName(const string& module_name, const char* name, zeek
if ( deprecation )
id->MakeDeprecated({NewRef{}, deprecation});
detail::zeekygen_mgr->Identifier(std::move(id), from_redef);
detail::zeekygen_mgr->Identifier(id, from_redef);
}
else {
// We allow double-definitions if matching exactly. This is so that
@ -1591,6 +1591,12 @@ void EnumType::CheckAndAddName(const string& module_name, const char* name, zeek
if ( vals.find(val) == vals.end() )
vals[val] = make_intrusive<EnumVal>(IntrusivePtr{NewRef{}, this}, val);
if ( ! id->HasVal() )
id->SetVal(vals[val]);
else if ( id->GetVal()->AsEnum() != val )
reporter->InternalError("inconsistent enum integer value for '%s' (old %" PRId64 " new %" PRId64 ")",
fullname.c_str(), id->GetVal()->AsEnum(), val);
const auto& types = Type::Aliases(GetName());
for ( const auto& t : types )