@@ -7464,6 +7464,10 @@ namespace Slang
7464
7464
7465
7465
for (auto ctor : structDeclInfo.ctorList )
7466
7466
{
7467
+ ThisExpr* thisExpr = m_astBuilder->create <ThisExpr>();
7468
+ thisExpr->scope = ctor->ownedScope ;
7469
+ thisExpr->type = ctor->returnType .type ;
7470
+
7467
7471
auto seqStmt = _ensureCtorBodyIsSeqStmt (m_astBuilder, ctor);
7468
7472
auto seqStmtChild = m_astBuilder->create <SeqStmt>();
7469
7473
seqStmtChild->stmts .reserve (structDecl->members .getCount ());
@@ -7474,12 +7478,16 @@ namespace Slang
7474
7478
|| !varDeclBase->initExpr )
7475
7479
continue ;
7476
7480
7477
- VarExpr* memberVarExpr = m_astBuilder->create <VarExpr>();
7478
- memberVarExpr->scope = ctor->ownedScope ;
7479
- memberVarExpr->name = m->getName ();
7481
+ MemberExpr* memberExpr = m_astBuilder->create <MemberExpr>();
7482
+ memberExpr->baseExpression = thisExpr;
7483
+ memberExpr->declRef = m->getDefaultDeclRef ();
7484
+ memberExpr->scope = ctor->ownedScope ;
7485
+ memberExpr->loc = m->loc ;
7486
+ memberExpr->name = m->getName ();
7487
+ memberExpr->type = DeclRefType::create (getASTBuilder (), m->getDefaultDeclRef ());
7480
7488
7481
7489
auto assign = m_astBuilder->create <AssignExpr>();
7482
- assign->left = memberVarExpr ;
7490
+ assign->left = memberExpr ;
7483
7491
assign->right = varDeclBase->initExpr ;
7484
7492
assign->loc = m->loc ;
7485
7493
@@ -7492,7 +7500,7 @@ namespace Slang
7492
7500
checkedMemberVarExpr = cachedDeclToCheckedVar[m];
7493
7501
else
7494
7502
{
7495
- checkedMemberVarExpr = CheckTerm (memberVarExpr );
7503
+ checkedMemberVarExpr = CheckTerm (memberExpr );
7496
7504
cachedDeclToCheckedVar.add ({ m, checkedMemberVarExpr });
7497
7505
}
7498
7506
if (!checkedMemberVarExpr->type .isLeftValue )
0 commit comments