From 7202da81eafdbe9a6e751d40b017963fe2b6c894 Mon Sep 17 00:00:00 2001 From: Rairii <2650838+Wack0@users.noreply.github.com> Date: Fri, 11 Apr 2025 12:29:37 +0100 Subject: [PATCH] asm: fix culture issues by setting current thread culture when inside the assembler --- IFPSAsmLib/Assembler.cs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/IFPSAsmLib/Assembler.cs b/IFPSAsmLib/Assembler.cs index 237601b..d772a4e 100644 --- a/IFPSAsmLib/Assembler.cs +++ b/IFPSAsmLib/Assembler.cs @@ -9,6 +9,8 @@ using IFPSLib.Emit.FDecl; using System.Runtime.InteropServices; using System.Collections; using System.ComponentModel; +using System.Globalization; +using System.Threading; namespace IFPSAsmLib { @@ -98,6 +100,7 @@ namespace IFPSAsmLib public static class Assembler { + private static readonly CultureInfo s_Culture = new CultureInfo("en"); private static IEnumerable OfType(this IEnumerable self, ElementParentType type) { return self.Where(x => x.Element.ParentType == type); @@ -856,7 +859,7 @@ namespace IFPSAsmLib } } - public static Script Assemble(List parsed) + private static Script AssembleImpl(List parsed) { int version = Script.VERSION_HIGHEST; { @@ -939,6 +942,21 @@ namespace IFPSAsmLib return ret; } + public static Script Assemble(List parsed) + { + // Set the current thread's culture to english when assembling, to ensure float/double/decimal parsing works correctly. + var currentCulture = Thread.CurrentThread.CurrentCulture; + Thread.CurrentThread.CurrentCulture = s_Culture; + try + { + return AssembleImpl(parsed); + } + finally + { + Thread.CurrentThread.CurrentCulture = currentCulture; + } + } + public static Script Assemble(string str) => Assemble(Parser.Parse(str)); } }