From bfcca3e6f909aeb5995ec0cb218c599fec83baaf Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Thu, 5 Mar 2026 03:50:37 +0200 Subject: [PATCH] In JavaScript mode, treat java.lang.Object as "any", universally compatible with all types --- .../util/script/interpreter/ScriptDocument.java | 2 ++ .../util/script/interpreter/type/TypeChecker.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java index a00fbf2fb..415e7648a 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/ScriptDocument.java @@ -385,6 +385,8 @@ public class ScriptDocument { * ALL methods called here handle BOTH languages using the SAME data structures. */ private List formatUnified() { + TypeChecker.enterTypeCheckingContext(isJavaScript()); + // Phase 1: Find excluded regions (strings/comments) - same for both findExcludedRanges(); diff --git a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/TypeChecker.java b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/TypeChecker.java index 31616302b..b16454321 100644 --- a/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/TypeChecker.java +++ b/src/main/java/noppes/npcs/client/gui/util/script/interpreter/type/TypeChecker.java @@ -13,6 +13,16 @@ public final class TypeChecker { private TypeChecker() {} // Utility class + private static boolean CURRENT_JAVASCRIPT_MODE; + + public static void enterTypeCheckingContext(boolean javaScriptMode) { + CURRENT_JAVASCRIPT_MODE = javaScriptMode; + } + + private static boolean isJavaScriptMode() { + return CURRENT_JAVASCRIPT_MODE; + } + /** * Check if the actual type is compatible with (assignable to) the expected type. * @param expected The expected/target type @@ -33,6 +43,10 @@ public final class TypeChecker { if ("any".equals(expected.getFullName()) || "any".equals(actual.getFullName())) { return true; } + // In JavaScript mode, treat java.lang.Object as "any" + if (isJavaScriptMode() && "Object".equals(expected.getSimpleName())) { + return true; + } // Handle null literal - null is compatible with any reference type (non-primitive) if ("".equals(actual.getFullName())) {