From 266497b8b239da7b0c5a59e843fb9fb10415a3cc Mon Sep 17 00:00:00 2001 From: Frotty Date: Sun, 11 Oct 2026 10:00:33 +0200 Subject: [PATCH] Lua: a missing hashtable string is the null string On Lua the null string is "", but the hashtable emulation answered nil for a missing string, so LoadStr(h, p, c) == null was false where Jass says true. The in-place load and the helper answer "" now, and a concatenation of one adds no guard of its own. --- .../imtranslation/LuaNativeLowering.java | 5 ++++- .../lua/translation/LuaHashtableTranslation.java | 6 ++++-- .../translation/lua/translation/LuaNatives.java | 5 +++-- .../wurstscript/tests/LuaHashtableTests.java | 15 ++++++++++----- .../tests/wurstscript/tests/LuaNativesTests.java | 5 ++++- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/LuaNativeLowering.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/LuaNativeLowering.java index b60747f0e..f53945c81 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/LuaNativeLowering.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/LuaNativeLowering.java @@ -401,7 +401,10 @@ public static boolean neverNil(ImExpr e, ImTranslator translator) { return f == translator.luaRawConcatFunc || f == translator.luaRawOrEmptyFunc || f == translator.luaRawToStringFunc - || (f.isNative() && STRING_NATIVES_NEVER_NIL.contains(f.getName())); + || (f.isNative() && STRING_NATIVES_NEVER_NIL.contains(f.getName())) + // a string load of the hashtable emulation answers "" when nothing is stored + || (LuaHashtable.op(translator, f) instanceof LuaHashtable.Op op + && op.kind() == LuaHashtable.Kind.LOAD && op.values() == LuaHashtable.Values.STR); } return false; } diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaHashtableTranslation.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaHashtableTranslation.java index b9ec02d1d..c2c2db304 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaHashtableTranslation.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/lua/translation/LuaHashtableTranslation.java @@ -18,7 +18,8 @@ *