From b0f019fdd377b3645649ce06511017a22edf0381 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 15 Feb 2022 17:43:30 -0500 Subject: [PATCH] Fixed GC marking of fields in object extension --- IDEHelper/Compiler/BfModule.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 30f570b5..e0769458 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -18891,7 +18891,19 @@ void BfModule::EmitGCMarkMembers() if (moduleMethodInst) { auto methodBaseType = moduleMethodInst.mMethodInstance->GetOwner(); - if (methodBaseType != mContext->mBfObjectType) + bool wantsBaseMarking = true; + if (methodBaseType == mContext->mBfObjectType) + { + PopulateType(methodBaseType); + for (auto& fieldInstance : mContext->mBfObjectType->mFieldInstances) + { + if ((fieldInstance.GetFieldDef()->mDeclaringType->IsExtension()) && + (fieldInstance.mResolvedType->WantsGCMarking())) + wantsBaseMarking = true; + } + } + + if (wantsBaseMarking) { auto thisValue = GetThis(); auto baseValue = Cast(NULL, thisValue, methodBaseType, BfCastFlags_Explicit);