From 044f15629dbf3ee8dac3efd506d06408bf6b9ff2 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 16 Aug 2020 15:56:59 -0700 Subject: [PATCH] Added ability to explicitly cast from int to enum generic constraint --- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index f3ad5119..17ea51c7 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -9568,7 +9568,7 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp if ((constraintTypeInst != NULL) && (constraintTypeInst->mTypeDef == mCompiler->mEnumTypeDef)) { // Enum->int - if (toType->IsInteger()) + if ((explicitCast) && (toType->IsInteger())) return GetDefaultValue(toType); } @@ -9657,7 +9657,14 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp } if (genericParamInst->mTypeConstraint != NULL) - { + { + if (genericParamInst->mTypeConstraint->IsInstanceOf(mCompiler->mEnumTypeDef)) + { + // int->Enum + if ((explicitCast) && (typedVal.mType->IsInteger())) + return mBfIRBuilder->GetFakeVal(); + } + auto castedVal = CastToValue(srcNode, typedVal, genericParamInst->mTypeConstraint, (BfCastFlags)(castFlags | BfCastFlags_SilentFail)); if (castedVal) return castedVal;