diff options
Diffstat (limited to 'source/slang/slang-syntax.cpp')
| -rw-r--r-- | source/slang/slang-syntax.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/source/slang/slang-syntax.cpp b/source/slang/slang-syntax.cpp index 5dc6ca695..6fdd5088a 100644 --- a/source/slang/slang-syntax.cpp +++ b/source/slang/slang-syntax.cpp @@ -701,11 +701,18 @@ Type* DeclRefType::create(ASTBuilder* astBuilder, DeclRef<Decl> declRef) } return declRefType; } - else if (as<ThisTypeDecl>(declRef.getDecl()) && as<DirectDeclRef>(declRef.declRefBase)) + else if (as<ThisTypeDecl>(declRef.getDecl())) { - declRef = createDefaultSubstitutionsIfNeeded(astBuilder, nullptr, declRef); + if (as<DirectDeclRef>(declRef.declRefBase)) + { + declRef = createDefaultSubstitutionsIfNeeded(astBuilder, nullptr, declRef); - return astBuilder->getOrCreate<ThisType>(declRef.declRefBase); + return astBuilder->getOrCreate<ThisType>(declRef.declRefBase); + } + else if (auto lookupDeclRef = as<LookupDeclRef>(declRef.declRefBase)) + { + return lookupDeclRef->getWitness()->getSub(); + } } else if (auto typedefDecl = as<TypeDefDecl>(declRef.getDecl())) { @@ -714,12 +721,9 @@ Type* DeclRefType::create(ASTBuilder* astBuilder, DeclRef<Decl> declRef) typedefDecl->type.type->substitute(astBuilder, SubstitutionSet(declRef))); return astBuilder->getErrorType(); } - else - { - declRef = createDefaultSubstitutionsIfNeeded(astBuilder, nullptr, declRef); - return astBuilder->getOrCreate<DeclRefType>(declRef.declRefBase); - } + declRef = createDefaultSubstitutionsIfNeeded(astBuilder, nullptr, declRef); + return astBuilder->getOrCreate<DeclRefType>(declRef.declRefBase); } // |
