From 9f892c96c9cc093988a7d1527fdf1b0005031ded Mon Sep 17 00:00:00 2001 From: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> Date: Tue, 23 Apr 2024 12:53:32 -0400 Subject: use memberExpr instead of varExpr (#4008) --- source/slang/slang-check-decl.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'source') diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp index e8cc01ef2..17551912d 100644 --- a/source/slang/slang-check-decl.cpp +++ b/source/slang/slang-check-decl.cpp @@ -7464,6 +7464,10 @@ namespace Slang for (auto ctor : structDeclInfo.ctorList) { + ThisExpr* thisExpr = m_astBuilder->create(); + thisExpr->scope = ctor->ownedScope; + thisExpr->type = ctor->returnType.type; + auto seqStmt = _ensureCtorBodyIsSeqStmt(m_astBuilder, ctor); auto seqStmtChild = m_astBuilder->create(); seqStmtChild->stmts.reserve(structDecl->members.getCount()); @@ -7474,12 +7478,16 @@ namespace Slang || !varDeclBase->initExpr) continue; - VarExpr* memberVarExpr = m_astBuilder->create(); - memberVarExpr->scope = ctor->ownedScope; - memberVarExpr->name = m->getName(); + MemberExpr* memberExpr = m_astBuilder->create(); + memberExpr->baseExpression = thisExpr; + memberExpr->declRef = m->getDefaultDeclRef(); + memberExpr->scope = ctor->ownedScope; + memberExpr->loc = m->loc; + memberExpr->name = m->getName(); + memberExpr->type = DeclRefType::create(getASTBuilder(), m->getDefaultDeclRef()); auto assign = m_astBuilder->create(); - assign->left = memberVarExpr; + assign->left = memberExpr; assign->right = varDeclBase->initExpr; assign->loc = m->loc; @@ -7492,7 +7500,7 @@ namespace Slang checkedMemberVarExpr = cachedDeclToCheckedVar[m]; else { - checkedMemberVarExpr = CheckTerm(memberVarExpr); + checkedMemberVarExpr = CheckTerm(memberExpr); cachedDeclToCheckedVar.add({ m, checkedMemberVarExpr }); } if (!checkedMemberVarExpr->type.isLeftValue) -- cgit v1.2.3