@@ -1259,12 +1259,13 @@ AssignByWrapperInst::AssignByWrapperInst(SILDebugLocation Loc,
12591259 sharedUInt8 ().AssignByWrapperInst .mode = uint8_t (mode);
12601260}
12611261
1262- AssignOrInitInst::AssignOrInitInst (SILDebugLocation Loc, SILValue Self,
1263- SILValue Src, SILValue Initializer,
1264- SILValue Setter, AssignOrInitInst::Mode Mode)
1262+ AssignOrInitInst::AssignOrInitInst (SILDebugLocation Loc, VarDecl *P,
1263+ SILValue Self, SILValue Src,
1264+ SILValue Initializer, SILValue Setter,
1265+ AssignOrInitInst::Mode Mode)
12651266 : InstructionBase<SILInstructionKind::AssignOrInitInst,
12661267 NonValueInstruction>(Loc),
1267- Operands(this , Self, Src, Initializer, Setter) {
1268+ Operands(this , Self, Src, Initializer, Setter), Property(P) {
12681269 assert (Initializer->getType ().is <SILFunctionType>());
12691270 sharedUInt8 ().AssignOrInitInst .mode = uint8_t (Mode);
12701271 Assignments.resize (getNumInitializedProperties ());
@@ -1291,23 +1292,11 @@ bool AssignOrInitInst::isPropertyAlreadyInitialized(unsigned propertyIdx) {
12911292}
12921293
12931294StringRef AssignOrInitInst::getPropertyName () const {
1294- auto *accessor = getReferencedInitAccessor ();
1295- assert (accessor);
1296- return cast<VarDecl>(accessor->getStorage ())->getNameStr ();
1295+ return Property->getNameStr ();
12971296}
12981297
12991298AccessorDecl *AssignOrInitInst::getReferencedInitAccessor () const {
1300- SILValue initRef = getInitializer ();
1301- SILFunction *accessorFn = nullptr ;
1302-
1303- if (auto *PAI = dyn_cast<PartialApplyInst>(initRef)) {
1304- accessorFn = PAI->getReferencedFunctionOrNull ();
1305- } else {
1306- accessorFn = cast<FunctionRefInst>(initRef)->getReferencedFunctionOrNull ();
1307- }
1308-
1309- assert (accessorFn);
1310- return dyn_cast_or_null<AccessorDecl>(accessorFn->getDeclContext ());
1299+ return Property->getOpaqueAccessor (AccessorKind::Init);
13111300}
13121301
13131302unsigned AssignOrInitInst::getNumInitializedProperties () const {
0 commit comments