diff options
| author | Julius Ikkala <julius.ikkala@gmail.com> | 2025-01-17 03:06:00 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-17 01:06:00 +0000 |
| commit | d3ad6bb4997d3b7ba2dc9653a2d5f7dc965b150f (patch) | |
| tree | 4726f721cec95ec5ea2ec8408a081ca93338e923 /source/slang/slang-lookup.cpp | |
| parent | e771f1945ed692168a2634d66a0907acc9c68858 (diff) | |
Fix cyclic lookups with UnscopedEnums (#6110)
* Fix cyclic lookups with UnscopedEnums
* Add test with multiple unscoped enums with explicit types
---------
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'source/slang/slang-lookup.cpp')
| -rw-r--r-- | source/slang/slang-lookup.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/source/slang/slang-lookup.cpp b/source/slang/slang-lookup.cpp index e4f2b188d..3667e2cd2 100644 --- a/source/slang/slang-lookup.cpp +++ b/source/slang/slang-lookup.cpp @@ -237,6 +237,12 @@ static void _lookUpDirectAndTransparentMembers( if ((int)request.mask & (int)LookupMask::Attribute) return; + // Also skip transparent members if they're explicitly excluded by the + // request. This prevents cyclic lookups e.g. when looking up UnscopedEnum's + // underlying types. + if (((int)request.options & (int)LookupOptions::IgnoreTransparentMembers) != 0) + return; + for (auto transparentInfo : containerDecl->getTransparentMembers()) { // The reference to the transparent member should use the same @@ -1059,11 +1065,16 @@ LookupResult lookUp( Scope* scope, LookupMask mask, bool considerAllLocalNamesInScope, - Decl* declToExclude) + Decl* declToExclude, + bool ignoreTransparentMembers) { LookupResult result; - const auto options = considerAllLocalNamesInScope ? LookupOptions::ConsiderAllLocalNamesInScope - : LookupOptions::None; + const auto options = + (LookupOptions)((int)(considerAllLocalNamesInScope + ? LookupOptions::ConsiderAllLocalNamesInScope + : LookupOptions::None) | + (int)(ignoreTransparentMembers ? LookupOptions::IgnoreTransparentMembers + : LookupOptions::None)); LookupRequest request = initLookupRequest(semantics, name, mask, options, scope, declToExclude); _lookUpInScopes(astBuilder, name, request, result); return result; |
