summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-lookup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-lookup.cpp')
-rw-r--r--source/slang/slang-lookup.cpp45
1 files changed, 14 insertions, 31 deletions
diff --git a/source/slang/slang-lookup.cpp b/source/slang/slang-lookup.cpp
index cddf3d7ce..c574be4ea 100644
--- a/source/slang/slang-lookup.cpp
+++ b/source/slang/slang-lookup.cpp
@@ -89,6 +89,18 @@ void buildMemberDictionary(ContainerDecl* decl)
bool DeclPassesLookupMask(Decl* decl, LookupMask mask)
{
+ // Always exclude extern members from lookup result.
+ if (decl->hasModifier<ExtensionExternVarModifier>())
+ {
+ return false;
+ }
+ else if (decl->hasModifier<ExternModifier>())
+ {
+ if (as<ExtensionDecl>(decl->parentDecl))
+ {
+ return false;
+ }
+ }
// type declarations
if(auto aggTypeDecl = as<AggTypeDecl>(decl))
{
@@ -108,7 +120,7 @@ bool DeclPassesLookupMask(Decl* decl, LookupMask mask)
{
return (int(mask) & int(LookupMask::Attribute)) != 0;
}
-
+
// default behavior is to assume a value declaration
// (no overloading allowed)
@@ -942,7 +954,7 @@ static void _lookUpInScopes(
// The implicit `this`/`This` for a function-like declaration
// depends on modifiers attached to the declaration.
//
- if (funcDeclRef.getDecl()->hasModifier<HLSLStaticModifier>())
+ if (isEffectivelyStatic(funcDeclRef.getDecl()))
{
// A `static` method only has access to an implicit `This`,
// and does not have a `this` expression available.
@@ -1002,26 +1014,8 @@ LookupResult lookUp(
LookupMask mask)
{
LookupResult result;
- LookupRequestKey key;
- TypeCheckingCache* typeCheckingCache = nullptr;
- if (semantics)
- {
- typeCheckingCache = semantics->getLinkage()->getTypeCheckingCache();
- key.base = scope;
- key.name = name;
- key.options = LookupOptions::None;
- key.mask = mask;
- if (typeCheckingCache->lookupCache.TryGetValue(key, result))
- {
- return result;
- }
- }
LookupRequest request = initLookupRequest(semantics, name, mask, LookupOptions::None, scope);
_lookUpInScopes(astBuilder, name, request, result);
- if (typeCheckingCache)
- {
- typeCheckingCache->lookupCache[key] = result;
- }
return result;
}
@@ -1033,20 +1027,9 @@ LookupResult lookUpMember(
LookupMask mask,
LookupOptions options)
{
- TypeCheckingCache* typeCheckingCache = semantics->getLinkage()->getTypeCheckingCache();
- LookupRequestKey key;
- key.base = type;
- key.name = name;
- key.options = options;
- key.mask = mask;
LookupResult result;
- if (typeCheckingCache->lookupCache.TryGetValue(key, result))
- {
- return result;
- }
LookupRequest request = initLookupRequest(semantics, name, mask, options, nullptr);
_lookUpMembersInType(astBuilder, name, type, request, result, nullptr);
- typeCheckingCache->lookupCache[key] = result;
return result;
}