From 6af0f111c0a3167830e5a3e29c3624fa143ad9de Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 15 Feb 2022 12:21:56 -0500 Subject: [PATCH] Fixed Object alloc clearing with extensions --- IDEHelper/Backend/BeMCContext.cpp | 2 +- IDEHelper/Compiler/BfModule.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Backend/BeMCContext.cpp b/IDEHelper/Backend/BeMCContext.cpp index ef25ab48..bf717dd1 100644 --- a/IDEHelper/Backend/BeMCContext.cpp +++ b/IDEHelper/Backend/BeMCContext.cpp @@ -16090,7 +16090,7 @@ void BeMCContext::Generate(BeFunction* function) mDbgPreferredRegs[32] = X64Reg_R8;*/ //mDbgPreferredRegs[8] = X64Reg_RAX; - mDebugging = (function->mName == "?Main@TestProgram@BeefTest@bf@@SATint@@PEAV?$Array1@PEAVString@System@bf@@@System@3@@Z"); + //mDebugging = (function->mName == "?Main@TestProgram@BeefTest@bf@@SATint@@PEAV?$Array1@PEAVString@System@bf@@@System@3@@Z"); // || (function->mName == "?MethodA@TestProgram@BeefTest@bf@@CAXXZ"); // || (function->mName == "?Hey@Blurg@bf@@SAXXZ") // ; diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 830ec4c2..30f570b5 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -20410,7 +20410,20 @@ void BfModule::ProcessMethod(BfMethodInstance* methodInstance, bool isInlineDup, auto thisVal = GetThis(); int prevSize = 0; if (mContext->mBfObjectType != NULL) + { prevSize = mContext->mBfObjectType->mInstSize; + PopulateType(mContext->mBfObjectType); + + // If we have object extensions, clear out starting at the extension + for (auto& fieldInstance : mContext->mBfObjectType->mFieldInstances) + { + if (fieldInstance.GetFieldDef()->mDeclaringType->IsExtension()) + { + prevSize = fieldInstance.mDataOffset; + break; + } + } + } int curSize = mCurTypeInstance->mInstSize; if (curSize > prevSize) {