From 95c6b1db98986afebc67b1e04b76565163d0892b Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sat, 12 Feb 2022 14:21:52 -0500 Subject: [PATCH] Fixed premature enum finalization during cast --- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 4 +--- IDEHelper/Tests/src/Enums.bf | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index a270c489..0419bb77 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -13328,8 +13328,6 @@ BfTypedValue BfModule::Cast(BfAstNode* srcNode, const BfTypedValue& typedVal, Bf if (typedVal.mType == toType) return typedVal; - PopulateType(toType, ((castFlags & BfCastFlags_NoConversionOperator) != 0) ? BfPopulateType_Data : BfPopulateType_DataAndMethods); - if ((toType->IsSizedArray()) && (typedVal.mType->IsSizedArray())) { // Retain our type if we're casting from a known-sized array to an unknown-sized arrays @@ -13341,6 +13339,7 @@ BfTypedValue BfModule::Cast(BfAstNode* srcNode, const BfTypedValue& typedVal, Bf if ((castFlags & BfCastFlags_Force) != 0) { + PopulateType(toType, BfPopulateType_Data); if (toType->IsValuelessType()) return BfTypedValue(mBfIRBuilder->GetFakeVal(), toType); @@ -13365,7 +13364,6 @@ BfTypedValue BfModule::Cast(BfAstNode* srcNode, const BfTypedValue& typedVal, Bf // This tuple cast may create a new type if the toType contains 'var' entries if ((typedVal.mType->IsTuple()) && (toType->IsTuple())) { - //auto loadedVal = LoadValue(typedVal); PopulateType(toType); auto fromTupleType = (BfTypeInstance*)typedVal.mType; diff --git a/IDEHelper/Tests/src/Enums.bf b/IDEHelper/Tests/src/Enums.bf index 43f139cf..5e2ba353 100644 --- a/IDEHelper/Tests/src/Enums.bf +++ b/IDEHelper/Tests/src/Enums.bf @@ -43,6 +43,17 @@ namespace Tests case EE(EnumE ee); } + enum EnumG + { + case A = (.)'A'; + case B = (.)'B'; + + public void Set(int val) mut + { + this = (.)val; + } + } + [Test] static void TestBasic() { @@ -122,7 +133,10 @@ namespace Tests } ee = .B(10); - + + EnumG eg = .A; + eg.Set(66); + Test.Assert(eg == .B); } } }