From 0b68abde8f1de3bfe0d1fa37e0a212e3b7b9cab5 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Thu, 6 Jul 2023 09:21:40 -0400 Subject: [PATCH] Improved canceled comptime type rebuilds --- IDEHelper/Compiler/BfExprEvaluator.cpp | 6 +++--- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 23325622..37c03db2 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -4839,7 +4839,7 @@ BfTypedValue BfExprEvaluator::LoadProperty(BfAstNode* targetSrc, BfTypedValue ta mModule->Fail(StrFormat("Property '%s.%s' cannot be accessed with an instance reference; qualify it with a type name instead", mModule->TypeToString(typeInstance).c_str(), mPropDef->mName.c_str()), targetSrc); } - } + } bool isBaseLookup = (target.mType) && (typeInstance != target.mType); if ((isBaseLookup) && (target.mType->IsWrappableType())) @@ -4860,7 +4860,7 @@ BfTypedValue BfExprEvaluator::LoadProperty(BfAstNode* targetSrc, BfTypedValue ta } } else - mPropTarget = target; + mPropTarget = target; mOrigPropTarget = mPropTarget; if (prop->mIsStatic) @@ -5332,7 +5332,7 @@ BfTypedValue BfExprEvaluator::LoadField(BfAstNode* targetSrc, BfTypedValue targe if (fieldInstance->mDataIdx < 0) { - BF_ASSERT(typeInstance->mTypeFailed); + mModule->InternalError("LoadField field DataIdx<0 where InstSize>0"); return mModule->GetDefaultTypedValue(resolvedFieldType); } diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index f85c79ca..25551ea0 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -5129,6 +5129,11 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy typeInstance->mCeTypeInfo->mHash = typeInstance->mCeTypeInfo->mNext->mHash; typeInstance->mCeTypeInfo->mAlign = typeInstance->mCeTypeInfo->mNext->mAlign; } + else + { + if ((typeInstance->mCeTypeInfo->mHash != typeInstance->mCeTypeInfo->mNext->mHash) && (!typeInstance->mCeTypeInfo->mHash.IsZero())) + mContext->QueueMidCompileRebuildDependentTypes(typeInstance, "canceled comptime hash changed"); + } delete typeInstance->mCeTypeInfo->mNext; typeInstance->mCeTypeInfo->mNext = NULL; @@ -5137,7 +5142,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy { // Removed emissions if (!typeInstance->mCeTypeInfo->mHash.IsZero()) - mContext->QueueMidCompileRebuildDependentTypes(typeInstance, "comptime hash changed"); + mContext->QueueMidCompileRebuildDependentTypes(typeInstance, "removed comptime hash changed"); typeInstance->mCeTypeInfo->mEmitSourceMap.Clear(); typeInstance->mCeTypeInfo->mOnCompileMap.Clear(); typeInstance->mCeTypeInfo->mTypeIFaceMap.Clear();