From 27f382a56795eeb3c72737978d8657fffef46bf4 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 12 Jun 2022 10:56:43 -0700 Subject: [PATCH] Added some StackHelper points --- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 763bcff6..55224a14 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -11,6 +11,7 @@ #include "BfMangler.h" #include "BeefySysLib/util/PerfTimer.h" #include "BeefySysLib/util/BeefPerf.h" +#include "BeefySysLib/util/StackHelper.h" #include "BfSourceClassifier.h" #include "BfAutoComplete.h" #include "BfDemangler.h" @@ -3575,6 +3576,23 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy DoPopulateType_InitSearches(typeInstance); } + // + { + BP_ZONE("DoPopulateType:CheckStack"); + StackHelper stackHelper; + if (!stackHelper.CanStackExpand(128 * 1024)) + { + if (!stackHelper.Execute([&]() + { + DoPopulateType(resolvedTypeRef, populateType); + })) + { + Fail("Stack exhausted in DoPopulateType", typeDef->GetRefNode()); + } + return; + } + } + bool underlyingTypeDeferred = false; BfType* underlyingType = NULL; if (typeInstance->mBaseType != NULL) @@ -5665,6 +5683,23 @@ void BfModule::DoTypeInstanceMethodProcessing(BfTypeInstance* typeInstance) return; } + // + { + BP_ZONE("DoTypeInstanceMethodProcessing:CheckStack"); + StackHelper stackHelper; + if (!stackHelper.CanStackExpand(128 * 1024)) + { + if (!stackHelper.Execute([&]() + { + DoTypeInstanceMethodProcessing(typeInstance); + })) + { + Fail("Stack exhausted in DoPopulateType", typeInstance->mTypeDef->GetRefNode()); + } + return; + } + } + BF_ASSERT_REL(typeInstance->mNeedsMethodProcessing); BF_ASSERT_REL(typeInstance->mDefineState == BfTypeDefineState_Defined); typeInstance->mDefineState = BfTypeDefineState_DefinedAndMethodsSlotting;