From 81c413fc1000b3e2f686ad3b09db06c5a788c925 Mon Sep 17 00:00:00 2001 From: Frotty Date: Fri, 14 Nov 2025 00:22:37 +0100 Subject: [PATCH] Fix jass string null translation --- .../translation/imtojass/ExprTranslation.java | 2 +- .../tests/wurstscript/tests/JurstTests.java | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ExprTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ExprTranslation.java index b1c88e0da..9613ec3dd 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ExprTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtojass/ExprTranslation.java @@ -60,7 +60,7 @@ public static JassExpr translate(ImNull e, ImToJassTranslator translator) { } else if (typename.equals("boolean") || typename.equals("bool")) { return JassExprBoolVal(false); } else if (typename.equals("string")) { - return JassExprStringVal(""); + return JassExprNull(); } } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/JurstTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/JurstTests.java index 3b086e872..ed8f5b52b 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/JurstTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/JurstTests.java @@ -12,6 +12,7 @@ import java.util.Collections; import java.util.Map; +import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertTrue; public class JurstTests extends WurstScriptTest { @@ -340,6 +341,45 @@ public void testKeepTRVEHooked() throws IOException { assertTrue(output.contains("real myVar")); } + @Test + public void testStringNullCheckStaysNull() throws IOException { + String jassCode = Utils.string( + "globals", + " string array s__SaveCodes", + " integer PID", + " integer unitSaveID", + "endglobals", + "", + "function main takes nothing returns nothing", + " if s__SaveCodes[PID * 19 + unitSaveID] != null then", + " call BJDebugMsg(\"\")", // could be anything + " endif", + "endfunction" + ); + + String jurstCode = Utils.string( + "package test", + "endpackage" + ); + + testJurstWithJass(false, true, jassCode, jurstCode); + + File out = new File("./test-output/JurstJassTest_inlopt.j"); + String output = com.google.common.io.Files.toString(out, Charsets.UTF_8); + + // Ensure the null check survives as a null check + assertTrue( + "Expected string null check to stay != null", + output.contains("s__SaveCodes[PID * 19 + unitSaveID] != null") + ); + + // And make sure we did NOT silently change it to empty string + assertFalse( + "String null check must not become != \"\"", + output.contains("s__SaveCodes[PID * 19 + unitSaveID] != \"\"") + ); + } + private void testJurstWithJass(boolean executeProg, boolean withStdLib, String jass, String jurst) { Map inputs = ImmutableMap.of( "example.j", jass,