1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Fixed enum casting with implicit 'int' operator

This commit is contained in:
Brian Fiete 2025-02-18 13:06:35 -08:00
parent 33e4ac7a95
commit 06c5e06a58
2 changed files with 18 additions and 3 deletions

View file

@ -14689,7 +14689,6 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
{
auto fromType = typedVal.mType;
// Handle the typedPrim<->underlying part implicitly
if (fromType->IsTypedPrimitive())
{
typedVal = LoadValue(typedVal);
@ -14699,11 +14698,11 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
if (methodMatcher.mBestRawMethodInstance)
convTypedValue = GetDefaultTypedValue(methodMatcher.mBestRawMethodInstance->mReturnType);
}
return CastToValue(srcNode, convTypedValue, toType, (BfCastFlags)(castFlags & ~BfCastFlags_Explicit), NULL);
return CastToValue(srcNode, convTypedValue, toType, castFlags, NULL);
}
else if (toType->IsTypedPrimitive())
{
auto castedVal = CastToValue(srcNode, typedVal, toType->GetUnderlyingType(), (BfCastFlags)(castFlags & ~BfCastFlags_Explicit), NULL);
auto castedVal = CastToValue(srcNode, typedVal, toType->GetUnderlyingType(), castFlags, NULL);
return castedVal;
}
}

View file

@ -109,6 +109,15 @@ namespace Tests
public static int operator implicit(Self self);
}
public enum EnumM
{
public static implicit operator int(Self self);
case A;
case B;
case C;
}
[Test]
static void TestBasic()
{
@ -118,6 +127,13 @@ namespace Tests
Test.Assert(sizeof(EnumB) == 2);
Test.Assert(sizeof(EnumC) == 4);
Test.Assert(sizeof(EnumD) == 8);
EnumM em = ?;
int i = em;
uint u = (uint)em;
i = 123;
EnumA e = (EnumA)i;
}
[Test]