From 8879076ae89dfde932d6f753900e7a1fa281be48 Mon Sep 17 00:00:00 2001 From: Rune Date: Fri, 12 Jun 2026 15:04:37 +0200 Subject: [PATCH] fix Compiler.Options.* eval --- IDEHelper/Compiler/BfCompiler.cpp | 9 +++++++++ IDEHelper/Compiler/BfCompiler.h | 5 +++++ IDEHelper/Compiler/BfModule.cpp | 9 +++++---- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/IDEHelper/Compiler/BfCompiler.cpp b/IDEHelper/Compiler/BfCompiler.cpp index 50a2b9144..cec9962d3 100644 --- a/IDEHelper/Compiler/BfCompiler.cpp +++ b/IDEHelper/Compiler/BfCompiler.cpp @@ -449,6 +449,10 @@ BfCompiler::BfCompiler(BfSystem* bfSystem, bool isResolveOnly) mIOnMethodInitTypeDef = NULL; mLinkNameAttributeTypeDef = NULL; mCallingConventionAttributeTypeDef = NULL; + mCompilerOptionsPlatformTypeTypeDef = NULL; + mCompilerOptionsMachineTypeTypeDef = NULL; + mCompilerOptionsToolsetTypeTypeDef = NULL; + mCompilerOptionsOptLevelTypeDef = NULL; mMethodRefTypeDef = NULL; mNullableTypeDef = NULL; mOrderedAttributeTypeDef = NULL; @@ -7333,6 +7337,11 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory) mIOnFieldInitTypeDef = _GetRequiredType("System.IOnFieldInit"); mIOnMethodInitTypeDef = _GetRequiredType("System.IOnMethodInit"); + mCompilerOptionsPlatformTypeTypeDef = _GetRequiredType("System.Compiler.Options.PlatformType"); + mCompilerOptionsMachineTypeTypeDef = _GetRequiredType("System.Compiler.Options.MachineType"); + mCompilerOptionsToolsetTypeTypeDef = _GetRequiredType("System.Compiler.Options.ToolsetType"); + mCompilerOptionsOptLevelTypeDef = _GetRequiredType("System.Compiler.Options.OptLevel"); + mLinkNameAttributeTypeDef = _GetRequiredType("System.LinkNameAttribute"); mCallingConventionAttributeTypeDef = _GetRequiredType("System.CallingConventionAttribute"); mMethodRefTypeDef = _GetRequiredType("System.MethodReference", 1); diff --git a/IDEHelper/Compiler/BfCompiler.h b/IDEHelper/Compiler/BfCompiler.h index 37fc19302..86ed2f28f 100644 --- a/IDEHelper/Compiler/BfCompiler.h +++ b/IDEHelper/Compiler/BfCompiler.h @@ -414,6 +414,11 @@ class BfCompiler BfTypeDef* mIOnFieldInitTypeDef; BfTypeDef* mIOnMethodInitTypeDef; + BfTypeDef* mCompilerOptionsPlatformTypeTypeDef; + BfTypeDef* mCompilerOptionsMachineTypeTypeDef; + BfTypeDef* mCompilerOptionsToolsetTypeTypeDef; + BfTypeDef* mCompilerOptionsOptLevelTypeDef; + BfTypeDef* mMethodRefTypeDef; BfTypeDef* mNullableTypeDef; diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 1e8bc723e..cdeed3e3f 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -15764,15 +15764,15 @@ BfTypedValue BfModule::GetCompilerFieldValue(const StringImpl& str) } if (str == "#Platform") { - return BfTypedValue(mBfIRBuilder->CreateConst(BfTypeCode_Int32, mCompiler->mOptions.mPlatformType), GetPrimitiveType(BfTypeCode_Int32)); + return BfTypedValue(mBfIRBuilder->CreateConst(BfTypeCode_Int32, mCompiler->mOptions.mPlatformType), ResolveTypeDef(mCompiler->mCompilerOptionsPlatformTypeTypeDef)); } if (str == "#Architecture") { - return BfTypedValue(mBfIRBuilder->CreateConst(BfTypeCode_Int32, mCompiler->mOptions.mMachineType), GetPrimitiveType(BfTypeCode_Int32)); + return BfTypedValue(mBfIRBuilder->CreateConst(BfTypeCode_Int32, mCompiler->mOptions.mMachineType), ResolveTypeDef(mCompiler->mCompilerOptionsMachineTypeTypeDef)); } if (str == "#Toolset") { - return BfTypedValue(mBfIRBuilder->CreateConst(BfTypeCode_Int32, mCompiler->mOptions.mToolsetType), GetPrimitiveType(BfTypeCode_Int32)); + return BfTypedValue(mBfIRBuilder->CreateConst(BfTypeCode_Int32, mCompiler->mOptions.mToolsetType), ResolveTypeDef(mCompiler->mCompilerOptionsToolsetTypeTypeDef)); } if (str == "#TargetTriple") { @@ -15780,7 +15780,8 @@ BfTypedValue BfModule::GetCompilerFieldValue(const StringImpl& str) } if (str == "#OptimizationLevel") { - return BfTypedValue(mBfIRBuilder->CreateConst(BfTypeCode_Int32, project->mCodeGenOptions.mOptLevel), GetPrimitiveType(BfTypeCode_Int32)); + if (project != NULL) + return BfTypedValue(mBfIRBuilder->CreateConst(BfTypeCode_Int32, project->mCodeGenOptions.mOptLevel), ResolveTypeDef(mCompiler->mCompilerOptionsOptLevelTypeDef)); } if ((mCurMethodState != NULL) && (mCurMethodState->mMixinState != NULL))