summaryrefslogtreecommitdiff
path: root/source/slang/slang-lookup.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2020-06-19 13:16:22 -0700
committerGitHub <noreply@github.com>2020-06-19 13:16:22 -0700
commitb595dd0cd984bcb4db980693363798dd2b490da4 (patch)
treec00d6cf873d2ee1dfb50eeae782b082d2f72770a /source/slang/slang-lookup.cpp
parent110d15b61ac5d76da001d412eaa4be07f3cd8f4d (diff)
parent19880116635a4a76af55d876b82ec966c90deafb (diff)
Merge pull request #1403 from tfoleyNV/struct-inheritance-and-interfaces
Work on struct inheritance and interfaces
Diffstat (limited to 'source/slang/slang-lookup.cpp')
-rw-r--r--source/slang/slang-lookup.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/source/slang/slang-lookup.cpp b/source/slang/slang-lookup.cpp
index 19cd4cafe..855497d00 100644
--- a/source/slang/slang-lookup.cpp
+++ b/source/slang/slang-lookup.cpp
@@ -527,6 +527,17 @@ static void _lookUpMembersInSuperTypeDeclImpl(
for (auto inheritanceDeclRef : getMembersOfType<InheritanceDecl>(aggTypeDeclBaseRef))
{
ensureDecl(semantics, inheritanceDeclRef.getDecl(), DeclCheckState::CanUseBaseOfInheritanceDecl);
+
+ auto baseType = getSup(astBuilder, inheritanceDeclRef);
+ if( auto baseDeclRefType = as<DeclRefType>(baseType) )
+ {
+ if( auto baseInterfaceDeclRef = baseDeclRefType->declRef.as<InterfaceDecl>() )
+ {
+ if( int(request.options) & int(LookupOptions::IgnoreBaseInterfaces) )
+ continue;
+ }
+ }
+
_lookUpMembersInSuperType(astBuilder, name, leafType, leafIsSuperWitness, inheritanceDeclRef, request, ioResult, inBreadcrumbs);
}
}
@@ -807,11 +818,13 @@ LookupResult lookUpMember(
SemanticsVisitor* semantics,
Name* name,
Type* type,
- LookupMask mask)
+ LookupMask mask,
+ LookupOptions options)
{
LookupRequest request;
request.semantics = semantics;
request.mask = mask;
+ request.options = options;
LookupResult result;
_lookUpMembersInType(astBuilder, name, type, request, result, nullptr);