diff --git a/src/Type.cc b/src/Type.cc index a851128e68..ba0bbb99a4 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -1249,7 +1249,8 @@ void EnumType::CheckAndAddName(const string& module_name, const char* name, return; } - auto id = zeek::detail::lookup_ID(name, module_name.c_str()); + auto fullname = make_full_var_name(module_name.c_str(), name); + auto id = zeek::id::find(fullname); if ( ! id ) { @@ -1267,9 +1268,7 @@ void EnumType::CheckAndAddName(const string& module_name, const char* name, // We allow double-definitions if matching exactly. This is so that // we can define an enum both in a *.bif and *.zeek for avoiding // cyclic dependencies. - string fullname = make_full_var_name(module_name.c_str(), name); - if ( id->Name() != fullname - || ! id->IsEnumConst() + if ( ! id->IsEnumConst() || (id->HasVal() && val != id->GetVal()->AsEnum()) || GetName() != id->GetType()->GetName() || (names.find(fullname) != names.end() && names[fullname] != val) ) diff --git a/testing/btest/Baseline/language.enum-scope/output b/testing/btest/Baseline/language.enum-scope/output index 84705950d9..bbee1c110e 100644 --- a/testing/btest/Baseline/language.enum-scope/output +++ b/testing/btest/Baseline/language.enum-scope/output @@ -1 +1 @@ -test::c +a, b, test::a, test::b, test::c diff --git a/testing/btest/language/enum-scope.zeek b/testing/btest/language/enum-scope.zeek index 8c2e20c9b2..246f918a20 100644 --- a/testing/btest/language/enum-scope.zeek +++ b/testing/btest/language/enum-scope.zeek @@ -7,4 +7,8 @@ module test; redef enum foo += { c }; -print c; +export { + type foo: enum { a, b }; +} + +print GLOBAL::a, GLOBAL::b, a, b, c;