From 33448603b1dbf93922defe125bfec6688dff4a24 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 20 Apr 2020 14:54:27 -0700 Subject: [PATCH] Fixed struct construction when type is unpopulated. Better error check. --- IDEHelper/Compiler/BfExprEvaluator.cpp | 1 + IDEHelper/Compiler/BfResolvedTypeUtils.cpp | 1 + IDEHelper/Compiler/BfResolvedTypeUtils.h | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index df8485a9..f3721585 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -6867,6 +6867,7 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp mModule->mCompiler->mResolvePassData->HandleTypeReference(targetSrc, resolvedTypeInstance->mTypeDef); BfTypedValue structInst; + mModule->PopulateType(resolvedTypeInstance); if (!resolvedTypeInstance->IsValuelessType()) { if ((mReceivingValue != NULL) && (mReceivingValue->mType == resolvedTypeInstance) && (mReceivingValue->IsAddr())) diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp index 2e5ad2c3..d62f1adb 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp @@ -1721,6 +1721,7 @@ bool BfTypeInstance::IsValuelessType() if (mTypeDef->mIsOpaque) return false; + BF_ASSERT(mDefineState >= BfTypeDefineState_Defined); BF_ASSERT(mInstSize >= 0); if (mInstSize == 0) { diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.h b/IDEHelper/Compiler/BfResolvedTypeUtils.h index 6b116ced..369713d5 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.h +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.h @@ -439,7 +439,7 @@ public: virtual bool IsVoid() { return false; } virtual bool IsVoidPtr() { return false; } virtual bool CanBeValuelessType() { return false; } - virtual bool IsValuelessType() { BF_ASSERT(mSize != -1); return mSize == 0; } + virtual bool IsValuelessType() { BF_ASSERT(mSize != -1); BF_ASSERT(mDefineState >= BfTypeDefineState_Defined); return mSize == 0; } virtual bool IsSelf() { return false; } virtual bool IsDot() { return false; } virtual bool IsVar() { return false; }