Просмотр исходного кода

Allow enums with <=1 element (void underlying) cast to int (0)

Brian Fiete 10 месяцев назад
Родитель
Сommit
b12b49aec3
1 измененных файлов с 7 добавлено и 0 удалено
  1. 7 0
      IDEHelper/Compiler/BfModuleTypeUtils.cpp

+ 7 - 0
IDEHelper/Compiler/BfModuleTypeUtils.cpp

@@ -14611,6 +14611,13 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
 			auto fromTypedPrimitiveType = typedVal.mType->ToTypeInstance();
 			auto fromTypedPrimitiveType = typedVal.mType->ToTypeInstance();
 			auto primTypedVal = BfTypedValue(typedVal.mValue, fromTypedPrimitiveType->mFieldInstances.back().mResolvedType, typedVal.IsAddr());
 			auto primTypedVal = BfTypedValue(typedVal.mValue, fromTypedPrimitiveType->mFieldInstances.back().mResolvedType, typedVal.IsAddr());
 			primTypedVal = LoadValue(primTypedVal);
 			primTypedVal = LoadValue(primTypedVal);
+
+			if ((typedVal.mType->IsEnum()) && (primTypedVal.IsValuelessType()))
+			{
+				// For enums with <= 1 member, fake an int8(0) instead of a void
+				primTypedVal = GetDefaultTypedValue(GetPrimitiveType(BfTypeCode_Int8));
+			}
+
 			return CastToValue(srcNode, primTypedVal, toType, castFlags);
 			return CastToValue(srcNode, primTypedVal, toType, castFlags);
 		}
 		}