mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 20:12:21 +02:00
Fixed enum casting with implicit 'int' operator
This commit is contained in:
parent
33e4ac7a95
commit
06c5e06a58
2 changed files with 18 additions and 3 deletions
|
@ -14689,7 +14689,6 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
|
||||||
{
|
{
|
||||||
auto fromType = typedVal.mType;
|
auto fromType = typedVal.mType;
|
||||||
|
|
||||||
// Handle the typedPrim<->underlying part implicitly
|
|
||||||
if (fromType->IsTypedPrimitive())
|
if (fromType->IsTypedPrimitive())
|
||||||
{
|
{
|
||||||
typedVal = LoadValue(typedVal);
|
typedVal = LoadValue(typedVal);
|
||||||
|
@ -14699,11 +14698,11 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
|
||||||
if (methodMatcher.mBestRawMethodInstance)
|
if (methodMatcher.mBestRawMethodInstance)
|
||||||
convTypedValue = GetDefaultTypedValue(methodMatcher.mBestRawMethodInstance->mReturnType);
|
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())
|
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;
|
return castedVal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,6 +109,15 @@ namespace Tests
|
||||||
public static int operator implicit(Self self);
|
public static int operator implicit(Self self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum EnumM
|
||||||
|
{
|
||||||
|
public static implicit operator int(Self self);
|
||||||
|
|
||||||
|
case A;
|
||||||
|
case B;
|
||||||
|
case C;
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
static void TestBasic()
|
static void TestBasic()
|
||||||
{
|
{
|
||||||
|
@ -118,6 +127,13 @@ namespace Tests
|
||||||
Test.Assert(sizeof(EnumB) == 2);
|
Test.Assert(sizeof(EnumB) == 2);
|
||||||
Test.Assert(sizeof(EnumC) == 4);
|
Test.Assert(sizeof(EnumC) == 4);
|
||||||
Test.Assert(sizeof(EnumD) == 8);
|
Test.Assert(sizeof(EnumD) == 8);
|
||||||
|
|
||||||
|
EnumM em = ?;
|
||||||
|
int i = em;
|
||||||
|
uint u = (uint)em;
|
||||||
|
|
||||||
|
i = 123;
|
||||||
|
EnumA e = (EnumA)i;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue