mirror of
https://github.com/zeek/zeek.git
synced 2025-10-07 17:18:20 +00:00
Fix incorrect conflict detection of namespaced-enum-names
E.g. defining a `Foo::RED` enum name when a `GLOBAL::RED` identifier already exists would previously be treated as an error, even though the names don't truly conflict.
This commit is contained in:
parent
69c0cf1513
commit
26ad26c101
3 changed files with 9 additions and 6 deletions
|
@ -1249,7 +1249,8 @@ void EnumType::CheckAndAddName(const string& module_name, const char* name,
|
||||||
return;
|
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 )
|
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 allow double-definitions if matching exactly. This is so that
|
||||||
// we can define an enum both in a *.bif and *.zeek for avoiding
|
// we can define an enum both in a *.bif and *.zeek for avoiding
|
||||||
// cyclic dependencies.
|
// cyclic dependencies.
|
||||||
string fullname = make_full_var_name(module_name.c_str(), name);
|
if ( ! id->IsEnumConst()
|
||||||
if ( id->Name() != fullname
|
|
||||||
|| ! id->IsEnumConst()
|
|
||||||
|| (id->HasVal() && val != id->GetVal()->AsEnum())
|
|| (id->HasVal() && val != id->GetVal()->AsEnum())
|
||||||
|| GetName() != id->GetType()->GetName()
|
|| GetName() != id->GetType()->GetName()
|
||||||
|| (names.find(fullname) != names.end() && names[fullname] != val) )
|
|| (names.find(fullname) != names.end() && names[fullname] != val) )
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
test::c
|
a, b, test::a, test::b, test::c
|
||||||
|
|
|
@ -7,4 +7,8 @@ module test;
|
||||||
|
|
||||||
redef enum foo += { c };
|
redef enum foo += { c };
|
||||||
|
|
||||||
print c;
|
export {
|
||||||
|
type foo: enum { a, b };
|
||||||
|
}
|
||||||
|
|
||||||
|
print GLOBAL::a, GLOBAL::b, a, b, c;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue