summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-lookup.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-03-27 12:21:07 -0700
committerGitHub <noreply@github.com>2024-03-27 12:21:07 -0700
commit8395acfa0ad8379011e4470b94362189cafac93f (patch)
tree4395205a3969d2cd3d3b6407fa77786b26aec809 /source/slang/slang-lookup.cpp
parentc5369d507341e6b6fe64d4e6f26e194cd39235ca (diff)
Fix lookup to prevent finding `typedef` itself. (#3848)
Diffstat (limited to 'source/slang/slang-lookup.cpp')
-rw-r--r--source/slang/slang-lookup.cpp18
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;
}