From d9ce23ac8e5e44c2952c33c5c835ecba9a1df094 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 28 Jan 2025 17:17:24 -0800 Subject: [PATCH] Fixed AddStackMarkableObject with base append fields --- IDEHelper/Compiler/BfExprEvaluator.cpp | 10 ++-------- IDEHelper/Compiler/BfResolvedTypeUtils.cpp | 14 ++++++++++++++ IDEHelper/Compiler/BfResolvedTypeUtils.h | 3 ++- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 5ea75988..2984a042 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -16739,14 +16739,8 @@ void BfExprEvaluator::CreateObject(BfObjectCreateExpression* objCreateExpr, BfAs if (!needsCall) { - for (auto& fieldInst : typeInstance->mFieldInstances) - { - if (fieldInst.IsAppendedObject()) - { - needsCall = true; - break; - } - } + if (typeInstance->HasAppendedField(true)) + needsCall = true; } if (needsCall) diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp index 9b8af084..c5145da0 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp @@ -2483,6 +2483,20 @@ bool BfTypeInstance::BaseHasAppendCtor() return false; } +bool BfTypeInstance::HasAppendedField(bool checkBase) +{ + for (auto& fieldInstance : mFieldInstances) + { + if (fieldInstance.IsAppendedObject()) + return true; + } + + if ((checkBase) && (mBaseType != NULL)) + return mBaseType->HasAppendedField(checkBase); + + return false; +} + void BfTypeInstance::ReportMemory(MemReporter* memReporter) { if (mGenericTypeInfo != NULL) diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.h b/IDEHelper/Compiler/BfResolvedTypeUtils.h index cd27b64c..afba9027 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.h +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.h @@ -1020,7 +1020,7 @@ public: BfExpression* GetParamInitializer(int paramIdx); BfTypeReference* GetParamTypeRef(int paramIdx); BfIdentifierNode* GetParamNameNode(int paramIdx); - int DbgGetVirtualMethodNum(); + int DbgGetVirtualMethodNum(); void GetIRFunctionInfo(BfModule* module, BfIRType& returnType, SizedArrayImpl& paramTypes, bool forceStatic = false); int GetIRFunctionParamCount(BfModule* module); @@ -2219,6 +2219,7 @@ public: bool IsAnonymousInitializerType(); bool HasAppendCtor(); bool BaseHasAppendCtor(); + bool HasAppendedField(bool checkBase); virtual void ReportMemory(MemReporter* memReporter) override; };