diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 0726c49e..92c4cfd8 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -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; } } diff --git a/IDEHelper/Tests/src/Enums.bf b/IDEHelper/Tests/src/Enums.bf index def5e57d..50dfa895 100644 --- a/IDEHelper/Tests/src/Enums.bf +++ b/IDEHelper/Tests/src/Enums.bf @@ -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]