diff options
| author | Yong He <yonghe@outlook.com> | 2024-03-27 12:21:07 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-27 12:21:07 -0700 |
| commit | 8395acfa0ad8379011e4470b94362189cafac93f (patch) | |
| tree | 4395205a3969d2cd3d3b6407fa77786b26aec809 /source/slang/slang-lookup.cpp | |
| parent | c5369d507341e6b6fe64d4e6f26e194cd39235ca (diff) | |
Fix lookup to prevent finding `typedef` itself. (#3848)
Diffstat (limited to 'source/slang/slang-lookup.cpp')
| -rw-r--r-- | source/slang/slang-lookup.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/source/slang/slang-lookup.cpp b/source/slang/slang-lookup.cpp index 301c86aa8..6a62303d2 100644 --- a/source/slang/slang-lookup.cpp +++ b/source/slang/slang-lookup.cpp @@ -213,6 +213,8 @@ static void _lookUpDirectAndTransparentMembers( // it's unchecked or being checked then it isn't declared yet. if(!request.shouldConsiderAllLocalNames() && request.semantics && _isUncheckedLocalVar(m)) continue; + if (m == request.declToExclude) + continue; if (!DeclPassesLookupMask(m, request.mask)) continue; @@ -253,13 +255,15 @@ LookupRequest initLookupRequest( Name* name, LookupMask mask, LookupOptions options, - Scope* scope) + Scope* scope, + Decl* declToExclude) { LookupRequest request; request.semantics = semantics; request.mask = mask; request.options = options; request.scope = scope; + request.declToExclude = declToExclude; if (semantics && semantics->getSession() && name == semantics->getSession()->getCompletionRequestTokenName()) @@ -275,9 +279,10 @@ LookupResult lookUpDirectAndTransparentMembers( Name* name, ContainerDecl* containerDecl, DeclRef<Decl> parentDeclRef, - LookupMask mask) + LookupMask mask, + Decl* declToExclude) { - LookupRequest request = initLookupRequest(semantics, name, mask, LookupOptions::None, nullptr); + LookupRequest request = initLookupRequest(semantics, name, mask, LookupOptions::None, nullptr, declToExclude); LookupResult result; _lookUpDirectAndTransparentMembers( astBuilder, @@ -892,13 +897,14 @@ LookupResult lookUp( Name* name, Scope* scope, LookupMask mask, - bool considerAllLocalNamesInScope) + bool considerAllLocalNamesInScope, + Decl* declToExclude) { LookupResult result; const auto options = considerAllLocalNamesInScope ? LookupOptions::ConsiderAllLocalNamesInScope : LookupOptions::None; - LookupRequest request = initLookupRequest(semantics, name, mask, options, scope); + LookupRequest request = initLookupRequest(semantics, name, mask, options, scope, declToExclude); _lookUpInScopes(astBuilder, name, request, result); return result; } @@ -913,7 +919,7 @@ LookupResult lookUpMember( LookupOptions options) { LookupResult result; - LookupRequest request = initLookupRequest(semantics, name, mask, options, sourceScope); + LookupRequest request = initLookupRequest(semantics, name, mask, options, sourceScope, nullptr); _lookUpMembersInType(astBuilder, name, type, request, result, nullptr); return result; } |
