diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 627c8664..a53a11dd 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -22357,7 +22357,7 @@ void BfModule::ProcessMethod(BfMethodInstance* methodInstance, bool isInlineDup, BfIRValue fromBool; mBfIRBuilder->RestoreDebugLocation(); - if (!mCompiler->mIsResolveOnly) + if ((!mCompiler->mIsResolveOnly) || (mIsComptimeModule)) { if (!mCurTypeInstance->IsValuelessType()) ret = mBfIRBuilder->CreateRet(GetThis().mValue); diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 4f396ee4..0a24161c 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -3590,7 +3590,13 @@ void BfModule::DoPopulateType_InitSearches(BfTypeInstance* typeInstance) } void BfModule::DoPopulateType_FinishEnum(BfTypeInstance* typeInstance, bool underlyingTypeDeferred, HashContext* dataMemberHashCtx, BfType* unionInnerType) -{ +{ + if (typeInstance->mDefineState >= BfTypeDefineState_DefinedAndMethodsSlotting) + { + // Already locked + return; + } + if (typeInstance->IsEnum()) { int64 min = 0; diff --git a/IDEHelper/Tests/src/Enums.bf b/IDEHelper/Tests/src/Enums.bf index 912c4638..80a17932 100644 --- a/IDEHelper/Tests/src/Enums.bf +++ b/IDEHelper/Tests/src/Enums.bf @@ -88,6 +88,20 @@ namespace Tests // Started from 129 elements, no less } + [AllowDuplicates] + public enum EnumJ : uint32 + { + SDL_BUTTON_LEFT = 1, + SDL_BUTTON_LMASK = (1u << ((SDL_BUTTON_LEFT.Underlying) - 1)), + } + + [AllowDuplicates] + public enum EnumK + { + SDL_BUTTON_LEFT = 1, + SDL_BUTTON_LMASK = (1u << ((SDL_BUTTON_LEFT.Underlying) - 1)), + } + [Test] static void TestBasic() { @@ -229,6 +243,12 @@ namespace Tests if (ei case .DY(var eh)) foundH = eh == .B; Test.Assert(foundH); + + Test.Assert((int)EnumJ.SDL_BUTTON_LMASK == 1); + Test.Assert(typeof(EnumJ).Size == 4); + + Test.Assert((int)EnumK.SDL_BUTTON_LMASK == 1); + Test.Assert(typeof(EnumK).Size == 8); } } }