From 699243e3e0de84a558bf581f5372f6caf255c1f7 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Fri, 5 Nov 2021 13:23:52 -0700 Subject: [PATCH] Error on missing enum payload args --- IDEHelper/Compiler/BfExprEvaluator.cpp | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 883c7db8..38fa1548 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -4564,19 +4564,18 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar } mModule->PopulateType(fieldInstance->mOwner, BfPopulateType_Data); - // OLD: -// auto agg = mModule->CreateAlloca(fieldInstance->mOwner); -// auto gep = mModule->mBfIRBuilder->CreateInBoundsGEP(agg, 0, 2); -// mModule->mBfIRBuilder->CreateStore(mModule->mBfIRBuilder->CreateConst(dscrType->mTypeDef->mTypeCode, tagIdx), gep); -// -// if (fieldInstance->mResolvedType->mSize != 0) -// { -// mModule->FailAfter("Enum case parameters expected", targetSrc); -// } -// -// return BfTypedValue(agg, fieldInstance->mOwner, true); - - //NEW + if (auto fieldTypeInstance = fieldInstance->mResolvedType->ToTypeInstance()) + { + bool hasFields = false; + for (auto& fieldInstance : fieldTypeInstance->mFieldInstances) + { + if (!fieldInstance.mResolvedType->IsVoid()) + hasFields = true; + } + if (hasFields) + mModule->FailAfter("Enum payload arguments expected", targetSrc); + } + SizedArray values; values.Add(mModule->mBfIRBuilder->CreateConstAggZero(mModule->mBfIRBuilder->MapType(curCheckType->mBaseType))); values.Add(mModule->mBfIRBuilder->CreateConstAggZero(mModule->mBfIRBuilder->MapType(curCheckType->GetUnionInnerType())));