diff options
| author | Yong He <yonghe@outlook.com> | 2020-06-19 13:16:22 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-19 13:16:22 -0700 |
| commit | b595dd0cd984bcb4db980693363798dd2b490da4 (patch) | |
| tree | c00d6cf873d2ee1dfb50eeae782b082d2f72770a /source/slang/slang-lookup.cpp | |
| parent | 110d15b61ac5d76da001d412eaa4be07f3cd8f4d (diff) | |
| parent | 19880116635a4a76af55d876b82ec966c90deafb (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.cpp | 15 |
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); |
