mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
More improvements to conversion operator overloading on typed primitive
This commit is contained in:
parent
e0077fd4ef
commit
0de32f7b34
2 changed files with 28 additions and 15 deletions
|
@ -12820,11 +12820,13 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
|
|||
{
|
||||
// Can do
|
||||
}
|
||||
else if ((!CanCast(GetFakeTypedValue(underlyingType), returnType, implicitCastFlags)) &&
|
||||
(CanCast(GetFakeTypedValue(returnType), underlyingType, implicitCastFlags)))
|
||||
else if ((CanCast(GetFakeTypedValue(underlyingType), returnType, implicitCastFlags)) &&
|
||||
(!CanCast(GetFakeTypedValue(returnType), underlyingType, implicitCastFlags)))
|
||||
{
|
||||
doCall = false;
|
||||
// Can do
|
||||
}
|
||||
else
|
||||
doCall = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12844,17 +12846,19 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp
|
|||
doCall = false;
|
||||
}
|
||||
else if ((paramCanCast) &&
|
||||
(!underlyingType))
|
||||
(!underlyingCanCast))
|
||||
{
|
||||
doCall = true;
|
||||
// Can do
|
||||
}
|
||||
else if ((!CanCast(GetFakeTypedValue(underlyingType), paramType, implicitCastFlags)) &&
|
||||
(CanCast(GetFakeTypedValue(paramType), underlyingType, implicitCastFlags)))
|
||||
else if ((CanCast(GetFakeTypedValue(underlyingType), paramType, implicitCastFlags)) &&
|
||||
(!CanCast(GetFakeTypedValue(paramType), underlyingType, implicitCastFlags)))
|
||||
{
|
||||
// Can do
|
||||
}
|
||||
else
|
||||
doCall = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (doCall)
|
||||
{
|
||||
|
|
|
@ -267,9 +267,9 @@ namespace Tests
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
enum MyEnum
|
||||
{
|
||||
Case0,
|
||||
Case1,
|
||||
Case2,
|
||||
Case3
|
||||
|
@ -277,13 +277,14 @@ namespace Tests
|
|||
|
||||
enum MyOtherEnum
|
||||
{
|
||||
case Zero;
|
||||
case One;
|
||||
case Two;
|
||||
case Three;
|
||||
|
||||
public static explicit operator MyEnum(Self self)
|
||||
{
|
||||
return .Case2;
|
||||
return .Case1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -572,9 +573,17 @@ namespace Tests
|
|||
int32 b = a + 100;
|
||||
Test.Assert(b == 223);
|
||||
|
||||
MyOtherEnum moe = .One;
|
||||
MyOtherEnum moe = .Zero;
|
||||
MyEnum me = (MyEnum)moe;
|
||||
Test.Assert(me == .Case2);
|
||||
Test.Assert(me == .Case1);
|
||||
Test.Assert(moe == 0);
|
||||
moe = .Two;
|
||||
|
||||
int32 i = (int32)moe;
|
||||
Test.Assert(i == 2);
|
||||
|
||||
uint32 u = (uint32)moe;
|
||||
Test.Assert(u == 2);
|
||||
|
||||
//
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue