summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
-rw-r--r--source/slang/slang-check-expr.cpp16
1 files changed, 3 insertions, 13 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp
index fbbfcd473..6b1ab13cc 100644
--- a/source/slang/slang-check-expr.cpp
+++ b/source/slang/slang-check-expr.cpp
@@ -101,24 +101,14 @@ namespace Slang
// immutable temporary so that we can use
// it directly.
//
- auto interfaceDecl = interfaceDeclRef.getDecl();
return maybeMoveTemp(expr, [&](DeclRef<VarDeclBase> varDeclRef)
{
ExtractExistentialType* openedType = m_astBuilder->create<ExtractExistentialType>();
openedType->declRef = varDeclRef;
+ openedType->originalInterfaceType = expr->type.type;
+ openedType->originalInterfaceDeclRef = interfaceDeclRef;
- ExtractExistentialSubtypeWitness* openedWitness = m_astBuilder->create<ExtractExistentialSubtypeWitness>();
- openedWitness->sub = openedType;
- openedWitness->sup = expr->type.type;
- openedWitness->declRef = varDeclRef;
-
- ThisTypeSubstitution* openedThisType = m_astBuilder->create<ThisTypeSubstitution>();
- openedThisType->outer = interfaceDeclRef.substitutions.substitutions;
- openedThisType->interfaceDecl = interfaceDecl;
- openedThisType->witness = openedWitness;
-
- DeclRef<InterfaceDecl> substDeclRef = DeclRef<InterfaceDecl>(interfaceDecl, openedThisType);
- openedType->interfaceDeclRef = substDeclRef;
+ DeclRef<InterfaceDecl> substDeclRef = openedType->getSpecializedInterfaceDeclRef();
ExtractExistentialValueExpr* openedValue = m_astBuilder->create<ExtractExistentialValueExpr>();
openedValue->declRef = varDeclRef;