Procházet zdrojové kódy

Added ability to explicitly cast from int to enum generic constraint

Brian Fiete před 5 roky
rodič
revize
044f15629d
1 změnil soubory, kde provedl 9 přidání a 2 odebrání
  1. 9 2
      IDEHelper/Compiler/BfModuleTypeUtils.cpp

+ 9 - 2
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;