diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 7d0b0b67..3f910880 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -12812,7 +12812,7 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp if ((underlyingCanCast) && (!returnCanCast)) - { + { doCall = false; } else if ((returnCanCast) && @@ -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))) - { - doCall = false; - } + else if ((CanCast(GetFakeTypedValue(underlyingType), returnType, implicitCastFlags)) && + (!CanCast(GetFakeTypedValue(returnType), underlyingType, implicitCastFlags))) + { + // Can do + } + else + doCall = false; } } @@ -12844,15 +12846,17 @@ 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; - } } } diff --git a/IDEHelper/Tests/src/Operators.bf b/IDEHelper/Tests/src/Operators.bf index 13e61bc5..4b81e578 100644 --- a/IDEHelper/Tests/src/Operators.bf +++ b/IDEHelper/Tests/src/Operators.bf @@ -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); // {