From 6ff2305a7497be4a31434960336337206b8ca400 Mon Sep 17 00:00:00 2001 From: joey <1166538+xtjoeytx@users.noreply.github.com> Date: Sat, 7 Feb 2026 11:53:35 -0500 Subject: [PATCH 1/7] Refactor file structure, cmake changes & memory improvements (#25) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Summary This PR modernizes and restructures the project layout, refactors build and interface code, and adds a faster arena-based allocation system for parser AST nodes. Legacy scripts and outdated test files were removed. ### Key Changes **Project & Build Updates** * Renamed the project from **gs2test** → **gs2parser** and improved build hygiene by using `${CMAKE_BINARY_DIR}` for outputs. * Reorganized source code into clear module subdirectories (`ast/`, `parser/`, `compiler/`, `memory/`, etc.). * Added automatic export header generation for proper shared library support. * Moved JS and C bindings into `bindings/js/` and `bindings/c/` with updated includes. **CI & Script Cleanup** * Updated `Jenkinsfile` and `package.json` to match new naming/output conventions. * Removed obsolete legacy/test scripts. **Parser & Memory Improvements** * Introduced a high-performance **ArenaAllocator** for AST node allocation. * Refactored `ParserContext` and parser code to allocate nodes through the arena, enabling fast bulk cleanup and better cache locality. * Simplified allocation/lifetime handling and added cleaner debug stats. **Codebase Refactoring** * Consolidated compiler logic under `src/compiler/`. * Updated visitor structure (`astvisitor.h` → `NodeVisitor.h`). * Renamed and reorganized Rust bindings and codegen/compiler files for consistency. * Removed fmtlib dependency from submodules ### Impact The repo is now cleaner and more modular, supporting multi-target builds (native, shared/static, JS, C, Rust). Parser performance and memory behavior are significantly improved, and CI/build outputs are more reliable. --- .gitignore | 21 +- .gitmodules | 3 - CMakeLists.txt | 148 +- Jenkinsfile | 17 +- {src => bindings/c}/c_interface.cpp | 2 +- {src => bindings/js}/js_interface.cpp | 2 +- Cargo.lock => bindings/rust/Cargo.lock | 0 Cargo.toml => bindings/rust/Cargo.toml | 3 + build.rs => bindings/rust/build.rs | 18 +- {src => bindings/rust}/lib.rs | 2 +- dependencies/fmtlib | 1 - package.json | 2 +- scripts/asd2.txt | 202 -- scripts/syntax-test.txt | 42 - scripts/testscript.txt | 1898 ----------------- src/CompilerThreadJob.h | 2 +- src/ast/{astvisitor.h => NodeVisitor.h} | 4 +- src/ast/ast.h | 2 +- src/{ => codegen}/GS2Bytecode.cpp | 0 src/{ => codegen}/GS2Bytecode.h | 0 src/{ => compiler}/GS2BuiltInFunctions.cpp | 0 src/{ => compiler}/GS2BuiltInFunctions.h | 0 .../GS2CompilerVisitor.cpp | 4 +- .../GS2CompilerVisitor.h | 2 +- src/{ => compiler}/GS2Context.cpp | 2 +- src/{ => compiler}/GS2Context.h | 3 +- src/main.cpp | 2 +- src/memory/ArenaAllocator.h | 120 ++ src/{ => parser}/Parser.cpp | 12 +- src/{ => parser}/Parser.h | 31 +- {generator => src/parser}/gs2parser.y | 0 {generator => src/parser}/gs2scanner.l | 0 .../ASTNodeVisitor.h} | 2 +- src/visitors/FunctionInspectVisitor.h | 2 +- test-workflow.sh | 197 -- tests/tools/run_tests.py | 1 + 36 files changed, 281 insertions(+), 2466 deletions(-) rename {src => bindings/c}/c_interface.cpp (99%) rename {src => bindings/js}/js_interface.cpp (97%) rename Cargo.lock => bindings/rust/Cargo.lock (100%) rename Cargo.toml => bindings/rust/Cargo.toml (86%) rename build.rs => bindings/rust/build.rs (72%) rename {src => bindings/rust}/lib.rs (99%) delete mode 160000 dependencies/fmtlib delete mode 100644 scripts/asd2.txt delete mode 100644 scripts/syntax-test.txt delete mode 100644 scripts/testscript.txt rename src/ast/{astvisitor.h => NodeVisitor.h} (96%) rename src/{ => codegen}/GS2Bytecode.cpp (100%) rename src/{ => codegen}/GS2Bytecode.h (100%) rename src/{ => compiler}/GS2BuiltInFunctions.cpp (100%) rename src/{ => compiler}/GS2BuiltInFunctions.h (100%) rename src/{visitors => compiler}/GS2CompilerVisitor.cpp (99%) rename src/{visitors => compiler}/GS2CompilerVisitor.h (99%) rename src/{ => compiler}/GS2Context.cpp (98%) rename src/{ => compiler}/GS2Context.h (96%) create mode 100644 src/memory/ArenaAllocator.h rename src/{ => parser}/Parser.cpp (94%) rename src/{ => parser}/Parser.h (89%) rename {generator => src/parser}/gs2parser.y (100%) rename {generator => src/parser}/gs2scanner.l (100%) rename src/{ast/astnodevisitor.h => visitors/ASTNodeVisitor.h} (99%) delete mode 100755 test-workflow.sh diff --git a/.gitignore b/.gitignore index dc30f00..9b3ee8c 100644 --- a/.gitignore +++ b/.gitignore @@ -55,7 +55,24 @@ bin/ # CLion cmake-build-*/ - # Added by cargo - /target + +# act (GitHub Actions local testing) +.actrc +.secrets + +# GS2 bytecode files +*.gs2bc + +# Python cache +__pycache__/ +*.pyc +*.pyo + +# macOS +.DS_Store + +# Test artifacts (generated in build directory, but ignore strays) +tests/reports/*.json +tests/outputs/ diff --git a/.gitmodules b/.gitmodules index 5c96a90..0445495 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "dependencies/fmtlib"] - path = dependencies/fmtlib - url = https://github.com/fmtlib/fmt.git [submodule "dependencies/winflexbison"] path = dependencies/winflexbison url = https://github.com/lexxmark/winflexbison.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 25bb465..ec63432 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ -cmake_minimum_required(VERSION 3.10) -project(gs2test VERSION 1.0) +cmake_minimum_required(VERSION 3.14) +project(gs2parser VERSION 1.0) +include(GenerateExportHeader) set(CMAKE_DEBUG_POSTFIX _d) @@ -10,21 +11,19 @@ set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_POSITION_INDEPENDENT_CODE ON) -# Set up output directories -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/${BIN_DIR}) +# Set up output directories in the build tree +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${BIN_DIR}) # Second, for multi-config builds (e.g. msvc) foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} ) string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG ) - set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_SOURCE_DIR}/lib ) - set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_SOURCE_DIR}/lib ) - set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_SOURCE_DIR}/${BIN_DIR} ) + set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/lib ) + set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/lib ) + set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${BIN_DIR} ) endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES ) -link_directories(${PROJECT_SOURCE_DIR}/lib) - if(WIN32 OR APPLE) set(CMAKE_SHARED_LIBRARY_PREFIX "") set(CMAKE_STATIC_LIBRARY_PREFIX "lib") @@ -44,76 +43,111 @@ endif(WIN32 AND NOT MINGW) find_package(BISON 3.4 REQUIRED) find_package(FLEX REQUIRED) -BISON_TARGET(GS2Parser generator/gs2parser.y ${CMAKE_CURRENT_BINARY_DIR}/gs2parser.tab.cc) -FLEX_TARGET(GS2Scanner generator/gs2scanner.l ${CMAKE_CURRENT_BINARY_DIR}/lex.yy.cc DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/lex.yy.h COMPILE_FLAGS "${FLEX_FLAGS}") +BISON_TARGET(GS2Parser src/parser/gs2parser.y ${CMAKE_CURRENT_BINARY_DIR}/gs2parser.tab.cc) +FLEX_TARGET(GS2Scanner src/parser/gs2scanner.l ${CMAKE_CURRENT_BINARY_DIR}/lex.yy.cc DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/lex.yy.h COMPILE_FLAGS "${FLEX_FLAGS}") ADD_FLEX_BISON_DEPENDENCY(GS2Scanner GS2Parser) -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - src -) - -set(SOURCES_ALL +set(SOURCES + # AST src/ast/ast.cpp + + # Encoding src/encoding/buffer.cpp - src/visitors/GS2CompilerVisitor.cpp - src/GS2BuiltInFunctions.cpp - src/GS2Bytecode.cpp - src/GS2Context.cpp - src/Parser.cpp - src/c_interface.cpp + # Codegen + src/codegen/GS2Bytecode.cpp + + # Compiler + src/compiler/GS2BuiltInFunctions.cpp + src/compiler/GS2CompilerVisitor.cpp + src/compiler/GS2Context.cpp + + # Parser + src/parser/Parser.cpp + ${BISON_GS2Parser_OUTPUTS} + ${FLEX_GS2Scanner_OUTPUTS} +) + +set(HEADERS + # AST src/ast/ast.h - src/ast/astvisitor.h - src/ast/astnodevisitor.h src/ast/expressiontypes.h + src/ast/NodeVisitor.h + + # Encoding src/encoding/buffer.h src/encoding/graalencoding.h - src/utils/EventHandler.h - src/exceptions/GS2CompilerError.h - src/utils/ContextThreadPool.h + + # Codegen + src/codegen/GS2Bytecode.h + + # Compiler + src/compiler/GS2BuiltInFunctions.h + src/compiler/GS2CompilerVisitor.h + src/compiler/GS2Context.h + + # Parser + src/parser/Parser.h + ${BISON_GS2Parser_INPUT} + ${FLEX_GS2Scanner_INPUT} + + # Memory + src/memory/ArenaAllocator.h + + # Visitors + src/visitors/ASTNodeVisitor.h src/visitors/FunctionInspectVisitor.h - src/visitors/GS2CompilerVisitor.h src/visitors/GS2SourceVisitor.h + + # Utils / Misc src/CompilerThreadJob.h - src/GS2BuiltInFunctions.h - src/GS2Bytecode.h - src/GS2Context.h + src/exceptions/GS2CompilerError.h src/opcodes.h - src/Parser.h + src/utils/ContextThreadPool.h + src/utils/EventHandler.h +) - ${BISON_GS2Parser_INPUT} - ${FLEX_GS2Scanner_INPUT} - ${BISON_GS2Parser_OUTPUTS} - ${FLEX_GS2Scanner_OUTPUTS}) +set(SOURCES_ALL ${SOURCES} ${HEADERS}) -if (DEFINED EMSCRIPTEN) - add_executable(gs2test ${SOURCES_ALL} src/js_interface.cpp) - set_target_properties(gs2test PROPERTIES LINK_FLAGS "--embind-emit-tsd=gs2test.d.ts -s ENVIRONMENT=web -s DYNAMIC_EXECUTION=0 -s SINGLE_FILE=1 -s MODULARIZE -s 'EXPORT_NAME=GS2Compiler' --bind") -else() - add_executable(gs2test ${SOURCES_ALL} src/main.cpp) +# Use standard BUILD_SHARED_LIBS; Emscripten doesn't support shared libs +if(EMSCRIPTEN) + set(BUILD_SHARED_LIBS OFF) endif() +option(BUILD_SHARED_LIBS "Build shared libraries" ON) -if (STATIC) - add_library(gs2compiler STATIC ${SOURCES_ALL}) -else() - add_library(gs2compiler SHARED ${SOURCES_ALL}) +add_library(gs2compiler ${SOURCES_ALL} bindings/c/c_interface.cpp) +generate_export_header(gs2compiler + BASE_NAME GS2COMPILER + EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/gs2compiler_export.h +) + +target_include_directories(gs2compiler + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src/parser + ${CMAKE_CURRENT_SOURCE_DIR}/src/codegen + ${CMAKE_CURRENT_SOURCE_DIR}/src/compiler + ${CMAKE_CURRENT_SOURCE_DIR}/src/encoding + ${CMAKE_CURRENT_SOURCE_DIR}/src/memory +) + +if(NOT BUILD_SHARED_LIBS) + target_compile_definitions(gs2compiler PUBLIC GS2COMPILER_STATIC_DEFINE) endif() if(WIN32 AND MINGW) target_compile_options(gs2compiler PRIVATE "-fno-rtti") endif() -set_property(TARGET gs2test PROPERTY CXX_STANDARD 23) -set_property(TARGET gs2compiler PROPERTY CXX_STANDARD 23) - -if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) - set(GS2COMPILER_INCLUDE_DIRECTORY - "${PROJECT_SOURCE_DIR}/include" - "${PROJECT_BINARY_DIR}/include" - "${PROJECT_SOURCE_DIR}/src" - PARENT_SCOPE) +if(EMSCRIPTEN) + add_executable(gs2test bindings/js/js_interface.cpp) + set_target_properties(gs2test PROPERTIES LINK_FLAGS "--embind-emit-tsd=gs2test.d.ts -s ENVIRONMENT=web -s DYNAMIC_EXECUTION=0 -s SINGLE_FILE=1 -s MODULARIZE -s 'EXPORT_NAME=GS2Compiler' --bind") +else() + add_executable(gs2test src/main.cpp) endif() +target_link_libraries(gs2test PRIVATE gs2compiler) # Test suite integration # Only configure tests if this is the main project (not a subproject) diff --git a/Jenkinsfile b/Jenkinsfile index ea62262..ee10ba0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -66,9 +66,7 @@ def buildStep(dockerImage, generator, os, osdir, defines) { } sh("mkdir -p build/"); - sh("mkdir -p lib/"); sh("rm -rfv build/*"); - sh("rm -rfv lib/*"); discordSend(description: "", footer: "", link: env.BUILD_URL, result: currentBuild.currentResult, title: "[${split_job_name[0]}] Starting ${os} build target...", webhookURL: env.GS2EMU_WEBHOOK); @@ -77,8 +75,8 @@ def buildStep(dockerImage, generator, os, osdir, defines) { sh("cmake --build . --config Release --target all -- -j `nproc`"); } - archiveArtifacts(artifacts: 'lib/*.dylib,lib/*.so,bin/*.dll', allowEmptyArchive: true); - stash(name: osdir, includes: 'lib/*.dylib,lib/*.so,bin/*.dll', allowEmpty: true); + archiveArtifacts(artifacts: 'build/lib/*.dylib,build/lib/*.so,build/bin/*.dll', allowEmptyArchive: true); + stash(name: osdir, includes: 'build/lib/*.dylib,build/lib/*.so,build/bin/*.dll', allowEmpty: true); discordSend(description: "", footer: "", link: env.BUILD_URL, result: currentBuild.currentResult, title: "[${split_job_name[0]}] Build ${fixed_job_name} #${env.BUILD_NUMBER} Target: ${os} successful!", webhookURL: env.GS2EMU_WEBHOOK); } @@ -277,12 +275,15 @@ killall_jobs(); dir("bindings/dotnet/cross-compile/${v.OSDir}/") { unstash(name: v.OSDir); try { - sh("mv -fv bin/* ."); - sh("rm -rf bin") + sh("mv -fv build/bin/* ."); + sh("rm -rf build/bin") } catch(err) { } try { - sh("mv -fv lib/* ."); - sh("rm -rf lib") + sh("mv -fv build/lib/* ."); + sh("rm -rf build/lib") + } catch(err) { } + try { + sh("rm -rf build") } catch(err) { } } } diff --git a/src/c_interface.cpp b/bindings/c/c_interface.cpp similarity index 99% rename from src/c_interface.cpp rename to bindings/c/c_interface.cpp index ed14848..d626e14 100644 --- a/src/c_interface.cpp +++ b/bindings/c/c_interface.cpp @@ -1,4 +1,4 @@ -#include "GS2Context.h" +#include "compiler/GS2Context.h" #ifdef _WIN32 #define DLL_EXPORT __declspec(dllexport) diff --git a/src/js_interface.cpp b/bindings/js/js_interface.cpp similarity index 97% rename from src/js_interface.cpp rename to bindings/js/js_interface.cpp index 2fa39b8..3d0578c 100644 --- a/src/js_interface.cpp +++ b/bindings/js/js_interface.cpp @@ -1,5 +1,5 @@ #include -#include "GS2Context.h" +#include "compiler/GS2Context.h" using namespace emscripten; EMSCRIPTEN_BINDINGS(module) { diff --git a/Cargo.lock b/bindings/rust/Cargo.lock similarity index 100% rename from Cargo.lock rename to bindings/rust/Cargo.lock diff --git a/Cargo.toml b/bindings/rust/Cargo.toml similarity index 86% rename from Cargo.toml rename to bindings/rust/Cargo.toml index f4417ba..9445203 100644 --- a/Cargo.toml +++ b/bindings/rust/Cargo.toml @@ -7,5 +7,8 @@ build = "build.rs" [dependencies] libc = "0.2.155" +[lib] +path = "lib.rs" + [build-dependencies] cmake = "0.1" \ No newline at end of file diff --git a/build.rs b/bindings/rust/build.rs similarity index 72% rename from build.rs rename to bindings/rust/build.rs index bba0957..6ce2d46 100644 --- a/build.rs +++ b/bindings/rust/build.rs @@ -4,23 +4,19 @@ use cmake::Config; // Constants for common library names const DEBUG_SUFFIX_GS2: &str = "_d"; -const DEBUG_SUFFIX_FMT: &str = "d"; -const STATIC_LIB_DIR: &str = "lib"; - fn main() { let profile = env::var("PROFILE").unwrap_or_else(|_| "release".to_string()); let target = env::var("TARGET").expect("TARGET environment variable not set"); // Determine the appropriate library names based on the profile and platform let gs2_compiler_lib = library_name("gs2compiler", &profile, DEBUG_SUFFIX_GS2, &target); - let fmt_lib = library_name("fmt", &profile, DEBUG_SUFFIX_FMT, &target); - let mut cmake_config = Config::new("."); - cmake_config.build_target("gs2compiler").define("STATIC", "ON"); + let mut cmake_config = Config::new("../.."); + cmake_config.build_target("gs2compiler").define("BUILD_SHARED_LIBS", "OFF"); let cpp_lib = configure_platform_specifics(&target, &mut cmake_config); - link_libraries(cmake_config.build(), cpp_lib, &gs2_compiler_lib, &fmt_lib); + link_libraries(cmake_config.build(), cpp_lib, &gs2_compiler_lib); } fn library_name(base: &str, profile: &str, debug_suffix: &str, target: &str) -> String { @@ -49,13 +45,11 @@ fn configure_platform_specifics(target: &str, cmake_config: &mut Config) -> &'st } } -fn link_libraries(lib_path: PathBuf, cpp_lib: &str, gs2_lib: &str, fmt_lib: &str) { - let lib_dir = env::current_dir().unwrap().join(STATIC_LIB_DIR); +fn link_libraries(lib_path: PathBuf, cpp_lib: &str, gs2_lib: &str) { + let build_lib_dir = lib_path.join("build").join("lib"); println!("cargo:rustc-link-lib=dylib={}", cpp_lib); - println!("cargo:rustc-link-search=native={}", lib_path.display()); - println!("cargo:rustc-link-search=native={}", lib_dir.display()); + println!("cargo:rustc-link-search=native={}", build_lib_dir.display()); println!("cargo:rustc-link-lib=static={}", gs2_lib); - println!("cargo:rustc-link-lib=static={}", fmt_lib); } diff --git a/src/lib.rs b/bindings/rust/lib.rs similarity index 99% rename from src/lib.rs rename to bindings/rust/lib.rs index f6d98d1..0d726d7 100644 --- a/src/lib.rs +++ b/bindings/rust/lib.rs @@ -11,7 +11,7 @@ pub struct Gs2CompilerResult { pub bytecode_size: u32, } -extern { +extern "C" { fn get_context() -> *mut c_void; fn compile_code_no_header(context: *mut c_void, code: *const c_char) -> Gs2CompilerResult; fn delete_context(context: *mut c_void); diff --git a/dependencies/fmtlib b/dependencies/fmtlib deleted file mode 160000 index 34caecd..0000000 --- a/dependencies/fmtlib +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 34caecd6b6850adb3e57218dc28f14eaafd5cf0e diff --git a/package.json b/package.json index d92005f..5964d0c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "dist/gs2test.js", "types": "dist/gs2test.d.ts", "scripts": { - "build": "mkdir -p dist && emcmake cmake -S. -Bbuild/ && cmake --build build/ -j$(nproc) && mv -fv ./bin/* ./dist/" + "build": "mkdir -p dist && emcmake cmake -S. -Bbuild/ && cmake --build build/ -j$(nproc) && mv -fv ./build/bin/* ./dist/" }, "keywords": [], "author": "xtjoeytx", diff --git a/scripts/asd2.txt b/scripts/asd2.txt deleted file mode 100644 index d692bd7..0000000 --- a/scripts/asd2.txt +++ /dev/null @@ -1,202 +0,0 @@ -//#CLIENTSIDE - -function onCreated() -{ - if (abcd == true && jfjf == false) { - dosomething(); - } - - continuething(); -} - -/* -// Variables -function onCreated() { - this.defaultGUI = "GUIContainer"; -} - -// Allows opening of GUIExplorer with -// Chat command: /guiexplorer - -function ChatBar.onAction() { - if (ChatBar.text == "/guiexplorer") { - ChatBar.text = ""; - createGUI(); - } -} - -// Create Main GUIExplorer - -function createGUI() { - new GuiWindowCtrl("GUIExplorer") { - profile = GuiBlueWindowProfile; - isexternal = true; - clientextent = true; - extent = "600,600"; - canresize = false; - destroyonhide = true; - text = "GUI Explorer"; - new GuiScrollCtrl("GUIExplorer_Scroll") { - profile = GuiBlueScrollProfile; - x = y = 10; - extent = "280,280"; - hScrollBar = "dynamic"; - vScrollBar = "dynamic"; - new GuiTreeViewCtrl("GUIExplorer_Tree") { - profile = GuiBlueTreeViewProfile; - x = y = 0; - fitparentwidth = true; - clearnodes(); - } - } - new GuiTextEditCtrl("GUIExplorer_Source") { - profile = GuiBlueTextEditProfile; - x = 10; - y = GUIExplorer.height - 56; - height = 20; - width = GUIExplorer.width - 32; - text = ""; - thiso.catchevent(this.name, "onAction", "onLoadSource"); - } - } - onLoadSource(GUIExplorer_Source); - - setTimer(0.05); -} - -// Create Object Dump GUI - -function createObjectDump(obj) { - new GuiWindowCtrl("GUIExplorerDump_" @ obj.name) { - profile = GuiBlueWindowProfile; - isexternal = true; - clientextent = true; - extent = "600,600"; - canresize = false; - destroyonhide = true; - text = "GUI Object Dump"; - new GuiScrollCtrl("GUIExplorerDump_Scroll_" @ obj.name) { - profile = GuiBlueScrollProfile; - x = y = 10; - extent = "570,550"; - hScrollBar = "dynamic"; - vScrollBar = "dynamic"; - new GuiMLTextCtrl("GUIExplorerDump_Text_" @ obj.name) { - profile = GuiBlueMLTextProfile; - x = y = 0; - width = 540; - height = 540; - text = ""; - temp.textobj = this; - } - } - } - - // Display Object Dump - temp.textobj.text = getDump(obj); -} - -// Sets Root Node and Repopulates Tree. - -function onLoadSource(obj) { - // Trim text - obj.text = obj.text.trim(); - // Default Text - if (obj.text == "") obj.text = this.defaultGUI; - // Populate Tree - GUIExplorer_Tree.clearnodes(); - populateNode(GUIExplorer_Tree, makevar(obj.text)); -} - -// Recursively populates node with children. - -function populateNode(parentNode, parentObj) { - // Idiot Protection - if (parentObj.name == "GUIExplorer_Tree") return; - // Check if parentObj is Object - if (parentObj.type() == 0) { - temp.node = parentNode.addNode("Could not locate object!"); - with (temp.node) { - image = selectedimage = 2; - } - return; - } - // Add Node - temp.newNode = parentNode.addNode(parentObj.name); - // Populate Children Data - if (parentObj.controls.size() > 0) { - // Children found - for (temp.childObj: parentObj.controls) { - populateNode(temp.newNode, temp.childObj); - } - } else { - // Does not have Children - with (temp.newNode) { - image = selectedimage = 2; - } - } -} - -// Opens Object Dump when a Node is Double-clicked. - -function GUIExplorer_Tree.onDblClick(node) { - // Avoid Error Node - if (node == "Could not locate object!") return; - // Display Dump - createObjectDump(makevar(node)); -} - -// Resizes Appropriately - -function GUIExplorer.onResize() { - with (GUIExplorer_Scroll) { - width = GUIExplorer.width - 20; - height = GUIExplorer.height - 40; - } - with (GUIExplorer_Source) { - y = GUIExplorer.height - 26; - width = GUIExplorer.width - 20; - } -} - -// Dump Functions -function getDump(obj) { - temp.dump = getVal(obj); - temp.dump = temp.dump @ " {\n"; - temp.vars = obj.getvarnames(); - for ( temp.i = 0; temp.i < temp.vars.size(); temp.i ++ ) - temp.dump = temp.dump @ " "@ temp.vars[i] @" = "@ getVal( obj.(@ temp.vars[i] ) ) @";\n"; - temp.dump = temp.dump @ "};"; - return temp.dump; -} - -// Credits to Novo for this function. -function getVal( val ) -{ - switch ( val.type() ) - { - case 0: case 1: - return "\""@ val @"\""; - break; - case 2: - return val.objecttype() @"("@ val.name @")"; - break; - case 3: - temp.dump = "{"; - temp.count = 0; - for ( temp.count = 0; temp.count < val.size(); temp.count ++ ) - { - if ( count != 0 ) - temp.dump = temp.dump @ ", "; - - temp.dump = temp.dump @ getVal( val[ temp.count ] ); - } - temp.dump = temp.dump @ "}"; - - return temp.dump; - break; - } - - return "\"\""; -} -*/ \ No newline at end of file diff --git a/scripts/syntax-test.txt b/scripts/syntax-test.txt deleted file mode 100644 index d49579e..0000000 --- a/scripts/syntax-test.txt +++ /dev/null @@ -1,42 +0,0 @@ -//#CLIENTSIDE -function onCreated() { - // syntax error 1 - temp.a = {}; - temp.a = {1, 2, 3, 5, 9}; - //temp.a = {1, 2, 3,,, 5, 9,}; // invalid - //temp.a = {,}; // invalid - - // syntax error 2 - temp.a = 1; - if (temp.a == 0) { - { - echo("e"); - } - - echo("t"); - } else if (temp.a == 1) { - echo("found"); - } - - // syntax error 3 - temp.a = 1; - if (temp.a == 0) { - { - } - - echo("t"); - } else if (temp.a == 1) { - echo("found"); - } - - // syntax error 4 - if (temp.a == 0) { - } else if (temp.a == 1) { - echo("found"); - } - - if (temp.a) - if (temp.b) - if (temp.c) - temp.d = 0; -} \ No newline at end of file diff --git a/scripts/testscript.txt b/scripts/testscript.txt deleted file mode 100644 index 1b7850e..0000000 --- a/scripts/testscript.txt +++ /dev/null @@ -1,1898 +0,0 @@ -/* -function[281] randomCommands -function[46] enumTest -function[203] testInCommand -function[77] objTest -function[1] onCreated -function[108] testFor -*/ - -//#CLIENTSIDE -// Enums directly replaced with incremented integers starting at 0 -enum { - EIDLE, - EWALK, - ESLASH -}; - -function onCreated() { - /* - 8, 5: temp. (189) - 9, 6: type(variable) (22) (Opcode: 0xF0) - variable[0](somethin) (byte) - 12, 7: member access (35) - 13, 8: type(array) (23) - 14, 9: type(variable) (22) (Opcode: 0xF0) - variable[1](objTest) (byte) - 17, 10: Call function (6) - 18, 11: "=" (50) - */ - temp.somethin = objTest(); - - randomCommands(); - testFor(); - testInCommand(); - enumTest(); - - /* - 43, 28: temp. (189) - 44, 29: type(variable) (22) (Opcode: 0xF0) - variable[0](somethin) (byte) - 47, 30: member access (35) - 48, 31: Convert to object (36) - 49, 32: type(variable) (22) (Opcode: 0xF0) - variable[6](pl) (byte) - 52, 33: member access (35) - 53, 34: Convert to object (36) - 54, 35: with (150) (Opcode: 0xF3) - double(43) (byte) - 57, 36: type(variable) (22) (Opcode: 0xF0) - variable[7](x) (byte) - 60, 37: Copy last operand (30) - 61, 38: Convert to float (33) - 62, 39: type(number) (20) (Opcode: 0xF3) - double(5) (byte) - 65, 40: + (60) - 66, 41: "=" (50) - 67, 42: End of with (151) - */ - with (temp.somethin.pl) { - x += 5; - } -} - -function enumTest() { - echo("Enum IDLE: " @ EIDLE); - echo("Enum WALK: " @ EWALK); - echo("Enum SLASH: " @ ESLASH); -} - -function objTest() { - /* - 133, 80: temp. (189) - 134, 81: type(variable) (22) (Opcode: 0xF0) - variable[12](a) (byte) - 137, 82: member access (35) - 138, 83: type(variable) (22) (Opcode: 0xF0) - variable[13](unknown_object) (byte) - 141, 84: type(string) (21) (Opcode: 0xF0) - variable[14](TStaticVar) (byte) - 144, 85: new Object? (42) - 145, 86: "=" (50) - */ - temp.a = new TStaticVar(); - - /* - 146, 87: temp. (189) - 147, 88: type(variable) (22) (Opcode: 0xF0) - variable[12](a) (byte) - 150, 89: member access (35) - 151, 90: Convert to object (36) - 152, 91: type(variable) (22) (Opcode: 0xF0) - variable[15](val) (byte) - 155, 92: member access (35) - 156, 93: type(number) (20) (Opcode: 0xF3) - double(2) (byte) - 159, 94: "=" (50) - */ - temp.a.val = 2; - - /* - 160, 95: temp. (189) - 161, 96: type(variable) (22) (Opcode: 0xF0) - variable[12](a) (byte) - 164, 97: member access (35) - 165, 98: Convert to object (36) - 166, 99: type(variable) (22) (Opcode: 0xF0) - variable[6](pl) (byte) - 169, 100: member access (35) - 170, 101: type(variable) (22) (Opcode: 0xF0) - variable[16](player) (byte) - 173, 102: "=" (50) - */ - temp.a.pl = player; - - /* - 174, 103: temp. (189) - 175, 104: type(variable) (22) (Opcode: 0xF0) - variable[12](a) (byte) - 178, 105: member access (35) - 179, 106: } //End of function code (7) - */ - return temp.a; -} - -function testFor() { - temp.arr = {"abc", "def", "gh", "ijk"}; - - echo("foreach"); - for (temp.a : temp.arr) { - echo(temp.a); - } - - echo("forloop"); - for (temp.i = 0; temp.i < temp.arr.size(); temp.i++) { - echo(temp.arr[temp.i]); - } - - /* - 343, 195: temp. (189) - 344, 196: type(variable) (22) (Opcode: 0xF0) - variable[17](arr) (byte) - 347, 197: member access (35) - 348, 198: Convert to object (36) - 349, 199: obj.clear() (141) - */ - // clear array - temp.arr.clear(); -} - -function testInCommand() { - /* - 362, 207: temp. (189) - 363, 208: type(variable) (22) (Opcode: 0xF0) - variable[17](arr) (byte) - 366, 209: member access (35) - 367, 210: type(array) (23) - 368, 211: type(string) (21) (Opcode: 0xF0) - variable[19](ijk) (byte) - 371, 212: type(string) (21) (Opcode: 0xF0) - variable[20](gh) (byte) - 374, 213: type(string) (21) (Opcode: 0xF0) - variable[21](def) (byte) - 377, 214: type(string) (21) (Opcode: 0xF0) - variable[22](abc) (byte) - 380, 215: End of array (37) - 381, 216: "=" (50) - */ - temp.arr = {"abc", "def", "gh", "ijk"}; - - /* - 382, 217: type(string) (21) (Opcode: 0xF0) - variable[20](gh) (byte) - 385, 218: temp. (189) - 386, 219: type(variable) (22) (Opcode: 0xF0) - variable[17](arr) (byte) - 389, 220: member access (35) - 390, 221: Convert to object (36) - 391, 222: in {} (81) - 392, 223: if (4) (Opcode: 0xF4) - double(229) (word) - 396, 224: type(array) (23) - 397, 225: type(string) (21) (Opcode: 0xF0) - variable[25](found) (byte) - 400, 226: type(variable) (22) (Opcode: 0xF0) - variable[9](echo) (byte) - 403, 227: Call function (6) - 404, 228: Decrease last operand index by 1 (32) - */ - if ("gh" in temp.arr) { - echo("found"); - } - - /* - 405, 229: temp. (189) - 406, 230: type(variable) (22) (Opcode: 0xF0) - variable[18](i) (byte) - 409, 231: member access (35) - 410, 232: type(array) (23) - 411, 233: player. (182) - 412, 234: type(variable) (22) (Opcode: 0xF0) - variable[26](y) (byte) - 415, 235: member access (35) - 416, 236: player. (182) - 417, 237: type(variable) (22) (Opcode: 0xF0) - variable[7](x) (byte) - 420, 238: member access (35) - 421, 239: End of array (37) - 422, 240: type(number) (20) (Opcode: 0xF3) - double(20) (byte) - 425, 241: type(number) (20) (Opcode: 0xF3) - double(40) (byte) - 428, 242: in <> (80) (Opcode: 0xF3) - double(3) (byte) - 431, 243: "=" (50) - */ - temp.i = ({playerx,playery} in <20,40>); - - /* - 432, 244: type(array) (23) - 433, 245: type(string) (21) (Opcode: 0xF0) - variable[27](valid: ) (byte) - 436, 246: temp. (189) - 437, 247: type(variable) (22) (Opcode: 0xF0) - variable[18](i) (byte) - 440, 248: member access (35) - 441, 249: Convert to string (34) - 442, 250: @ (113) - 443, 251: type(variable) (22) (Opcode: 0xF0) - variable[9](echo) (byte) - 446, 252: Call function (6) - 447, 253: Decrease last operand index by 1 (32) - */ - echo("valid: " @ temp.i); - - /* - 448, 254: type(variable) (22) (Opcode: 0xF0) - variable[28](v) (byte) - 451, 255: player. (182) - 452, 256: type(variable) (22) (Opcode: 0xF0) - variable[7](x) (byte) - 455, 257: member access (35) - 456, 258: type(number) (20) (Opcode: 0xF3) - double(20) (byte) - 459, 259: type(number) (20) (Opcode: 0xF3) - double(40) (byte) - 462, 260: in <> (80) (Opcode: 0xF3) - double(3) (byte) - 465, 261: && (5) (Opcode: 0xF4) - double(268) (word) - 469, 262: player. (182) - 470, 263: type(variable) (22) (Opcode: 0xF0) - variable[26](y) (byte) - 473, 264: member access (35) - 474, 265: type(number) (20) (Opcode: 0xF3) - double(20) (byte) - 477, 266: type(number) (20) (Opcode: 0xF3) - double(40) (byte) - 480, 267: in <> (80) (Opcode: 0xF3) - double(3) (byte) - 483, 268: End of inline conditional? (44) - 484, 269: "=" (50) - */ - v = (playerx in <20,40> && playery in <20,40>); - - /* - 485, 270: type(array) (23) - 486, 271: type(string) (21) (Opcode: 0xF0) - variable[27](valid: ) (byte) - 489, 272: type(variable) (22) (Opcode: 0xF0) - variable[28](v) (byte) - 492, 273: Convert to string (34) - 493, 274: @ (113) - 494, 275: type(variable) (22) (Opcode: 0xF0) - variable[9](echo) (byte) - 497, 276: Call function (6) - 498, 277: Decrease last operand index by 1 (32) - */ - echo("valid: " @ v); -} - -function randomCommands() { - // expect dec --- actual: was removed from bytecode - format("Hello, %s. You ate %i apples today!", "Mr. Skyld", 4); - - /* - 511, 285: this. (180) - 512, 286: type(variable) (22) (Opcode: 0xF0) - variable[29](str) (byte) - 515, 287: member access (35) - 516, 288: type(array) (23) - 517, 289: type(number) (20) (Opcode: 0xF3) - double(4) (byte) - 520, 290: type(string) (21) (Opcode: 0xF0) - variable[30](Mr. Skyld) (byte) - 523, 291: type(string) (21) (Opcode: 0xF0) - variable[31](Hello, %s. You ate %i apples today!) (byte) - 526, 292: format() (84) - 527, 293: "=" (50) - */ - this.str = format("Hello, %s. You ate %i apples today!", "Mr. Skyld", 4); - - /* - 528, 294: this. (180) - 529, 295: type(variable) (22) (Opcode: 0xF0) - variable[32](strpos) (byte) - 532, 296: member access (35) - 533, 297: this. (180) - 534, 298: type(variable) (22) (Opcode: 0xF0) - variable[29](str) (byte) - 537, 299: member access (35) - 538, 300: Convert to string (34) - 539, 301: type(string) (21) (Opcode: 0xF0) - variable[33](Skyld) (byte) - 542, 302: obj.pos() (112) - 543, 303: "=" (50) - */ - this.strpos = this.str.pos("Skyld"); - - /* - 544, 304: type(array) (23) - 545, 305: type(string) (21) (Opcode: 0xF0) - variable[34](pos: ) (byte) - 548, 306: this. (180) - 549, 307: type(variable) (22) (Opcode: 0xF0) - variable[32](strpos) (byte) - 552, 308: member access (35) - 553, 309: Convert to string (34) - 554, 310: @ (113) - 555, 311: type(variable) (22) (Opcode: 0xF0) - variable[9](echo) (byte) - 558, 312: Call function (6) - 559, 313: Decrease last operand index by 1 (32) - */ - echo("pos: " @ this.strpos); - - /* - 560, 314: thiso. (181) - 561, 315: type(variable) (22) (Opcode: 0xF0) - variable[17](arr) (byte) - 564, 316: member access (35) - 565, 317: type(array) (23) - 566, 318: type(string) (21) (Opcode: 0xF0) - variable[35](etc) (byte) - 569, 319: type(string) (21) (Opcode: 0xF0) - variable[36](second member) (byte) - 572, 320: type(string) (21) (Opcode: 0xF0) - variable[37](First member) (byte) - 575, 321: End of array (37) - 576, 322: "=" (50) - */ - thiso.arr = {"First member", "second member", "etc"}; - - /* - 577, 323: type(array) (23) - 578, 324: type(string) (21) (Opcode: 0xF0) - variable[38](size: ) (byte) - 581, 325: thiso. (181) - 582, 326: type(variable) (22) (Opcode: 0xF0) - variable[17](arr) (byte) - 585, 327: member access (35) - 586, 328: Convert to object (36) - 587, 329: obj.size() (130) - 588, 330: Convert to string (34) - 589, 331: @ (113) - 590, 332: type(variable) (22) (Opcode: 0xF0) - variable[9](echo) (byte) - 593, 333: Call function (6) - 594, 334: Decrease last operand index by 1 (32) - */ - echo("size: " @ thiso.arr.size()); - - /* - 595, 335: temp. (189) - 596, 336: type(variable) (22) (Opcode: 0xF0) - variable[39](num) (byte) - 599, 337: member access (35) - 600, 338: type(number) (20) (Opcode: 0xF3) - double(1) (byte) - 603, 339: type(number) (20) (Opcode: 0xF3) - double(10) (byte) - 606, 340: random() (87) - 607, 341: Convert to float (33) - 608, 342: type(number) (20) (Opcode: 0xF3) - double(7) (byte) - 611, 343: max() (94) - 612, 344: "=" (50) - */ - temp.num = max(random(1, 10), 7); - - /* - 613, 345: temp. (189) - 614, 346: type(variable) (22) (Opcode: 0xF0) - variable[40](tvar) (byte) - 617, 347: member access (35) - 618, 348: type(array) (23) - 619, 349: type(variable) (22) (Opcode: 0xF0) - variable[41](timevar2) (byte) - 622, 350: type(variable) (22) (Opcode: 0xF0) - variable[42](timevar) (byte) - 625, 351: End of array (37) - 626, 352: "=" (50) - */ - temp.tvar = {timevar, timevar2}; - - /* - 38: PushVariable this - 39: ConvertToString - 40: PushString foo - 41: PushNumber 7200 - 42: WaitFor - */ - waitfor(this, "foo", 7200); -} - -//=================================================== - -function onCreated() { - this.obj = {"abcd", "efgh", "i"}; - this.obj.add("test"); - this.obj.delete(0); - this.obj.remove("i"); - this.obj.insert(1, "alpha"); - this.obj.replace(2, "bravo"); - - this.teststr = "Teststr"; - this.teststr = this.teststr.lower(); - this.teststr = this.teststr.upper(); - - this.obj2 = {}; - temp.arr1 = {"abc", "def", "ghi"}; - temp.arr2 = {"jkl", "mno", "pqr"}; - this.obj2.addarray(temp.arr2); - this.obj2.insertarray(1, temp.arr1); - - this.test36 = "hi"; - temp.v = "36"; - echo(makevar("this.test" @ temp.v)); - - temp.val = serverr.someflag; - echo(temp.val); - - temp.randfloat = float("420.69"); - echo(temp.randfloat); - - temp.escapestr = "test',str"; - echo(temp.escapestr.escape()); - - sleep(0.1); - - arrayInit(); - testLoop(); -} - -function arrayInit() -{ - this.obj3 = new[4]; - this.obj3[1] = "hi"; - - this.obj4 = new[4][2][1]; - - this.obj5 = this.getfunctions(); - this.obj6 = this.getvarnames(); - this.obj7 = this.getdynamicvarnames(); - this.obj8 = this.geteditvarnames(); - this.obj9 = this.getstaticvarnames(); -} - -function testLoop() -{ - for (temp.v : this.obj) { - echo("T: " @ temp.v); - } -} - -//========================================= - -//#CLIENTSIDE -function onCreated() { -/* - 8, 5: this. (180) - 9, 6: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 12, 7: member access (35) - 13, 8: type(array) (23) - 14, 9: type(string) (21) (Opcode: 0xF0) - variable[1](i) (byte) - 17, 10: type(string) (21) (Opcode: 0xF0) - variable[2](efgh) (byte) - 20, 11: type(string) (21) (Opcode: 0xF0) - variable[3](abcd) (byte) - 23, 12: End of array (37) - 24, 13: "=" (50) -*/ - this.obj = {"abcd", "efgh", "i"}; - -/* - 25, 14: this. (180) - 26, 15: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 29, 16: member access (35) - 30, 17: Convert to object (36) - 31, 18: type(string) (21) (Opcode: 0xF0) - variable[4](test) (byte) - 34, 19: addstring() (136) -*/ - this.obj.add("test"); - -/* - 35, 20: this. (180) - 36, 21: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 39, 22: member access (35) - 40, 23: Convert to object (36) - 41, 24: type(number) (20) (Opcode: 0xF3) - double(0) (byte) - 44, 25: deletestring() (137) -*/ - this.obj.delete(0); - -/* - 45, 26: this. (180) - 46, 27: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 49, 28: member access (35) - 50, 29: Convert to object (36) - 51, 30: type(string) (21) (Opcode: 0xF0) - variable[1](i) (byte) - 54, 31: removestring() (138) -*/ - this.obj.remove("i"); - -/* - 55, 32: this. (180) - 56, 33: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 59, 34: member access (35) - 60, 35: Convert to object (36) - 61, 36: type(string) (21) (Opcode: 0xF0) - variable[5](alpha) (byte) - 64, 37: type(number) (20) (Opcode: 0xF3) - double(1) (byte) - 67, 38: insertstring() (140) -*/ - this.obj.insert(1, "alpha"); - -/* - 68, 39: this. (180) - 69, 40: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 72, 41: member access (35) - 73, 42: Convert to object (36) - 74, 43: type(string) (21) (Opcode: 0xF0) - variable[6](bravo) (byte) - 77, 44: type(number) (20) (Opcode: 0xF3) - double(2) (byte) - 80, 45: replacestring() (139) -*/ - this.obj.replace(2, "bravo"); - -/* - 81, 46: this. (180) - 82, 47: type(variable) (22) (Opcode: 0xF0) - variable[7](teststr) (byte) - 85, 48: member access (35) - 86, 49: type(string) (21) (Opcode: 0xF0) - variable[8](Teststr) (byte) - 89, 50: "=" (50) -*/ - this.teststr = "Teststr"; - -/* - 90, 51: this. (180) - 91, 52: type(variable) (22) (Opcode: 0xF0) - variable[7](teststr) (byte) - 94, 53: member access (35) - 95, 54: type(array) (23) - 96, 55: this. (180) - 97, 56: type(variable) (22) (Opcode: 0xF0) - variable[7](teststr) (byte) - 100, 57: member access (35) - 101, 58: Convert to string (34) - 102, 59: type(variable) (22) (Opcode: 0xF0) - variable[9](lowercase) (byte) - 105, 60: Call function (6) - 106, 61: "=" (50) -*/ - this.teststr = this.teststr.lower(); - -/* - 107, 62: this. (180) - 108, 63: type(variable) (22) (Opcode: 0xF0) - variable[7](teststr) (byte) - 111, 64: member access (35) - 112, 65: type(array) (23) - 113, 66: this. (180) - 114, 67: type(variable) (22) (Opcode: 0xF0) - variable[7](teststr) (byte) - 117, 68: member access (35) - 118, 69: Convert to string (34) - 119, 70: type(variable) (22) (Opcode: 0xF0) - variable[10](uppercase) (byte) - 122, 71: Call function (6) - 123, 72: "=" (50) -*/ - this.teststr = this.teststr.upper(); - -/* - 124, 73: this. (180) - 125, 74: type(variable) (22) (Opcode: 0xF0) - variable[11](obj2) (byte) - 128, 75: member access (35) - 129, 76: type(array) (23) - 130, 77: End of array (37) - 131, 78: "=" (50) -*/ - this.obj2 = {}; - -/* - 132, 79: temp. (189) - 133, 80: type(variable) (22) (Opcode: 0xF0) - variable[12](arr1) (byte) - 136, 81: member access (35) - 137, 82: type(array) (23) - 138, 83: type(string) (21) (Opcode: 0xF0) - variable[13](ghi) (byte) - 141, 84: type(string) (21) (Opcode: 0xF0) - variable[14](def) (byte) - 144, 85: type(string) (21) (Opcode: 0xF0) - variable[15](abc) (byte) - 147, 86: End of array (37) - 148, 87: "=" (50) -*/ - temp.arr1 = {"abc", "def", "ghi"}; - -/* - 149, 88: temp. (189) - 150, 89: type(variable) (22) (Opcode: 0xF0) - variable[16](arr2) (byte) - 153, 90: member access (35) - 154, 91: type(array) (23) - 155, 92: type(string) (21) (Opcode: 0xF0) - variable[17](pqr) (byte) - 158, 93: type(string) (21) (Opcode: 0xF0) - variable[18](mno) (byte) - 161, 94: type(string) (21) (Opcode: 0xF0) - variable[19](jkl) (byte) - 164, 95: End of array (37) - 165, 96: "=" (50) -*/ - temp.arr2 = {"jkl", "mno", "pqr"}; - -/* - 166, 97: type(array) (23) - 167, 98: temp. (189) - 168, 99: type(variable) (22) (Opcode: 0xF0) - variable[16](arr2) (byte) - 171, 100: member access (35) - 172, 101: this. (180) - 173, 102: type(variable) (22) (Opcode: 0xF0) - variable[11](obj2) (byte) - 176, 103: member access (35) - 177, 104: Convert to object (36) - 178, 105: type(variable) (22) (Opcode: 0xF0) - variable[20](addarray) (byte) - 181, 106: member access (35) - 182, 107: Call function (6) - 183, 108: Decrease last operand index by 1 (32) -*/ - this.obj2.addarray(temp.arr2); - -/* - 184, 109: type(array) (23) - 185, 110: temp. (189) - 186, 111: type(variable) (22) (Opcode: 0xF0) - variable[12](arr1) (byte) - 189, 112: member access (35) - 190, 113: type(number) (20) (Opcode: 0xF3) - double(1) (byte) - 193, 114: this. (180) - 194, 115: type(variable) (22) (Opcode: 0xF0) - variable[11](obj2) (byte) - 197, 116: member access (35) - 198, 117: Convert to object (36) - 199, 118: type(variable) (22) (Opcode: 0xF0) - variable[21](insertarray) (byte) - 202, 119: member access (35) - 203, 120: Call function (6) - 204, 121: Decrease last operand index by 1 (32) -*/ - this.obj2.insertarray(1, temp.arr1); - -/* - 205, 122: this. (180) - 206, 123: type(variable) (22) (Opcode: 0xF0) - variable[22](test36) (byte) - 209, 124: member access (35) - 210, 125: type(string) (21) (Opcode: 0xF0) - variable[23](hi) (byte) - 213, 126: "=" (50) -*/ - this.test36 = "hi"; - -/* - 214, 127: temp. (189) - 215, 128: type(variable) (22) (Opcode: 0xF0) - variable[24](v) (byte) - 218, 129: member access (35) - 219, 130: type(string) (21) (Opcode: 0xF0) - variable[25](36) (byte) - 222, 131: "=" (50) -*/ - temp.v = "36"; - -/* - 223, 132: type(array) (23) - 224, 133: type(string) (21) (Opcode: 0xF0) - variable[26](this.test) (byte) - 227, 134: temp. (189) - 228, 135: type(variable) (22) (Opcode: 0xF0) - variable[24](v) (byte) - 231, 136: member access (35) - 232, 137: Convert to string (34) - 233, 138: @ (113) - 234, 139: makevar() (41) - 235, 140: type(variable) (22) (Opcode: 0xF0) - variable[27](echo) (byte) - 238, 141: Call function (6) - 239, 142: Decrease last operand index by 1 (32) -*/ - echo(makevar("this.test" @ temp.v)); - -/* - 240, 143: temp. (189) - 241, 144: type(variable) (22) (Opcode: 0xF0) - variable[28](val) (byte) - 244, 145: member access (35) - 245, 146: type(variable) (22) (Opcode: 0xF0) - variable[29](serverr) (byte) - 248, 147: Convert to object (36) - 249, 148: type(variable) (22) (Opcode: 0xF0) - variable[30](someflag) (byte) - 252, 149: member access (35) - 253, 150: "=" (50) -*/ - temp.val = serverr.someflag; - echo(temp.val); - - temp.randfloat = float("420.69"); - echo(temp.randfloat); - - temp.escapestr = "test',str"; - echo(temp.escapestr.escape()); - -/* - 312, 187: type(number) (20) (Opcode: 0xF6) - double(0.1) (string) - 317, 188: sleep() (8) -*/ - sleep(0.1); - - arrayInit(); - testLoop(); -} - -function arrayInit() -{ -/* - 342, 204: this. (180) - 343, 205: type(variable) (22) (Opcode: 0xF0) - variable[38](obj3) (byte) - 346, 206: member access (35) - 347, 207: type(number) (20) (Opcode: 0xF3) - double(4) (byte) - 350, 208: new[] (38) - 351, 209: "=" (50) -*/ - this.obj3 = new[4]; - -/* - 352, 210: this. (180) - 353, 211: type(variable) (22) (Opcode: 0xF0) - variable[38](obj3) (byte) - 356, 212: member access (35) - 357, 213: Convert to object (36) - 358, 214: type(number) (20) (Opcode: 0xF3) - double(1) (byte) - 361, 215: type(string) (21) (Opcode: 0xF0) - variable[23](hi) (byte) - 364, 216: Array assignment (132) -*/ - this.obj3[1] = "hi"; - -/* - 365, 217: this. (180) - 366, 218: type(variable) (22) (Opcode: 0xF0) - variable[39](obj4) (byte) - 369, 219: member access (35) - 370, 220: type(number) (20) (Opcode: 0xF3) - double(4) (byte) - 373, 221: new[] (38) - 374, 222: type(number) (20) (Opcode: 0xF3) - double(2) (byte) - 377, 223: new[][] for each extra dimension (142) - 378, 224: type(number) (20) (Opcode: 0xF3) - double(1) (byte) - 381, 225: new[][] for each extra dimension (142) - 382, 226: "=" (50) -*/ - this.obj4 = new[4][2][1]; - -/* - 383, 227: this. (180) - 384, 228: type(variable) (22) (Opcode: 0xF0) - variable[40](obj5) (byte) - 387, 229: member access (35) - 388, 230: type(array) (23) - 389, 231: this. (180) - 390, 232: type(variable) (22) (Opcode: 0xF0) - variable[41](getfunctions) (byte) - 393, 233: member access (35) - 394, 234: Call function (6) - 395, 235: "=" (50) -*/ - this.obj5 = this.getfunctions(); - -/* - 396, 236: this. (180) - 397, 237: type(variable) (22) (Opcode: 0xF0) - variable[42](obj6) (byte) - 400, 238: member access (35) - 401, 239: type(array) (23) - 402, 240: this. (180) - 403, 241: type(variable) (22) (Opcode: 0xF0) - variable[43](getvarnames) (byte) - 406, 242: member access (35) - 407, 243: Call function (6) - 408, 244: "=" (50) -*/ - this.obj6 = this.getvarnames(); - -/* - 409, 245: this. (180) - 410, 246: type(variable) (22) (Opcode: 0xF0) - variable[44](obj7) (byte) - 413, 247: member access (35) - 414, 248: type(array) (23) - 415, 249: this. (180) - 416, 250: type(variable) (22) (Opcode: 0xF0) - variable[45](getdynamicvarnames) (byte) - 419, 251: member access (35) - 420, 252: Call function (6) - 421, 253: "=" (50) -*/ - this.obj7 = this.getdynamicvarnames(); - -/* - 422, 254: this. (180) - 423, 255: type(variable) (22) (Opcode: 0xF0) - variable[46](obj8) (byte) - 426, 256: member access (35) - 427, 257: type(array) (23) - 428, 258: this. (180) - 429, 259: type(variable) (22) (Opcode: 0xF0) - variable[47](geteditvarnames) (byte) - 432, 260: member access (35) - 433, 261: Call function (6) - 434, 262: "=" (50) -*/ - this.obj8 = this.geteditvarnames(); - -/* - 435, 263: this. (180) - 436, 264: type(variable) (22) (Opcode: 0xF0) - variable[48](obj9) (byte) - 439, 265: member access (35) - 440, 266: type(array) (23) - 441, 267: this. (180) - 442, 268: type(variable) (22) (Opcode: 0xF0) - variable[49](getstaticvarnames) (byte) - 445, 269: member access (35) - 446, 270: Call function (6) - 447, 271: "=" (50) -*/ - this.obj9 = this.getstaticvarnames(); -} - -/* - // loop var 0: temp.v - // loop var 1: echo - // loop var 2: this.obj - - 452, 274: Set operation index (1) (Opcode: 0xF4) - double(316) (word) - 456, 275: type(array) (23) - 457, 276: End of function definition parameters (51) - 458, 277: { //Start of function code? (10) - 459, 278: Start of function call? (9) - 460, 279: temp. (189) - 461, 280: type(variable) (22) (Opcode: 0xF0) - variable[24](v) (byte) - 464, 281: member access (35) - 465, 282: Mark as loop variable (47) - 466, 283: Assign loop variable index (45) (Opcode: 0xF3) - double(0) (byte) - 469, 284: Decrease last operand index by 1 (32) - 470, 285: type(variable) (22) (Opcode: 0xF0) - variable[27](echo) (byte) - 473, 286: Mark as loop variable (47) - 474, 287: Assign loop variable index (45) (Opcode: 0xF3) - double(1) (byte) - 477, 288: Decrease last operand index by 1 (32) - 478, 289: this. (180) - 479, 290: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 482, 291: member access (35) - 483, 292: Mark as loop variable (47) - 484, 293: Assign loop variable index (45) (Opcode: 0xF3) - double(2) (byte) - 487, 294: Decrease last operand index by 1 (32) - 488, 295: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 491, 296: Loop variable (46) (Opcode: 0xF3) - double(2) (byte) - 494, 297: Convert to object (36) - 495, 298: type(number) (20) (Opcode: 0xF3) - double(0) (byte) - 498, 299: for (a: b) (163) (Opcode: 0xF4) - double(311) (word) - - 502, 300: Start of function call? (9) - 503, 301: type(array) (23) - 504, 302: type(string) (21) (Opcode: 0xF0) - variable[50](T: ) (byte) - 507, 303: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 510, 304: Convert to string (34) - 511, 305: @ (113) - 512, 306: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 515, 307: Call function (6) - - 516, 308: Decrease last operand index by 1 (32) - 517, 309: Increment by 1 (52) - 518, 310: Set operation index (1) (Opcode: 0xF4) - double(299) (word) - 522, 311: Decrease last operand index by 1 (32) - 523, 312: Decrease last operand index by 1 (32) - 524, 313: Decrease last operand index by 1 (32) - 525, 314: type(number) (20) (Opcode: 0xF3) - double(0) (byte) - 528, 315: } //End of function code (7) -*/ - -function testLoop() -{ - for (temp.v : this.obj) { - echo("T: " @ temp.v); - } -} - - - -function onCreated() { -/* - 7, 5: type(array) (23) - 8, 6: type(string) (21) (Opcode: 0xF0) - variable[0](test: ) (byte) - 11, 7: player. (182) - 12, 8: type(variable) (22) (Opcode: 0xF0) - variable[1](x) (byte) - 15, 9: member access (35) - 16, 10: Convert to float (33) - 17, 11: type(number) (20) (Opcode: 0xF3) - double(5) (byte) - 20, 12: - binary (61) - 21, 13: Convert to string (34) - 22, 14: @ (113) - 23, 15: type(variable) (22) (Opcode: 0xF0) - variable[2](echo) (byte) - 26, 16: Call function (6) - 27, 17: Decrease last operand index by 1 (32) -*/ - echo("test: " @ (player.x - 5)); -} - - -//#CLIENTSIDE -function onCreated() -{ -/* - 7, 5: temp. (189) - 8, 6: type(variable) (22) (Opcode: 0xF0) - variable[0](g) (byte) - 11, 7: member access (35) - 12, 8: Mark as loop variable (47) - 13, 9: Assign loop variable index (45) (Opcode: 0xF3) - double(0) (byte) - 16, 10: Decrease last operand index by 1 (32) -*/ - - - -/* - 17, 11: temp. (189) - 18, 12: type(variable) (22) (Opcode: 0xF0) - variable[1](b) (byte) - 21, 13: member access (35) - 22, 14: type(variable) (22) (Opcode: 0xF0) - variable[2](unknown_object) (byte) - 25, 15: type(string) (21) (Opcode: 0xF0) - variable[3](TStaticVar) (byte) - 28, 16: new Object? (42) - 29, 17: "=" (50) -*/ - temp.b = new TStaticVar(); - -/* - 30, 18: temp. (189) - 31, 19: type(variable) (22) (Opcode: 0xF0) - variable[1](b) (byte) - 34, 20: member access (35) - 35, 21: Convert to object (36) - 36, 22: type(variable) (22) (Opcode: 0xF0) - variable[4](c) (byte) - 39, 23: member access (35) - 40, 24: type(string) (21) (Opcode: 0xF0) - variable[5](hi) (byte) - 43, 25: "=" (50) -*/ - temp.b.c = "hi"; - -/* - 44, 26: temp. (189) - 45, 27: type(variable) (22) (Opcode: 0xF0) - variable[6](a) (byte) - 48, 28: member access (35) - 49, 29: type(variable) (22) (Opcode: 0xF0) - variable[2](unknown_object) (byte) - 52, 30: type(string) (21) (Opcode: 0xF0) - variable[3](TStaticVar) (byte) - 55, 31: new Object? (42) - 56, 32: "=" (50) -*/ - temp.a = new TStaticVar("test", "djer", temp.b); - -/* - 57, 33: temp. (189) - 58, 34: type(variable) (22) (Opcode: 0xF0) - variable[6](a) (byte) - 61, 35: member access (35) - 62, 36: Convert to object (36) - 63, 37: type(variable) (22) (Opcode: 0xF0) - variable[7](ekjf) (byte) - 66, 38: member access (35) - 67, 39: type(string) (21) (Opcode: 0xF0) - variable[8](ee) (byte) - 70, 40: "=" (50) -*/ - temp.a.ekjf = "ee"; - -/* - 71, 41: temp. (189) - 72, 42: type(variable) (22) (Opcode: 0xF0) - variable[9](d) (byte) - 75, 43: member access (35) - 76, 44: type(variable) (22) (Opcode: 0xF0) - variable[10](Something) (byte) - 79, 45: inline new? (40) - 80, 46: type(string) (21) (Opcode: 0xF0) - variable[11](GuiButtonCtrl) (byte) - 83, 47: new Object? (42) - 84, 48: "=" (50) -*/ - temp.d = new GuiButtonCtrl(Something); - -/* - 85, 49: temp. (189) - 86, 50: type(variable) (22) (Opcode: 0xF0) - variable[9](d) (byte) - 89, 51: member access (35) - 90, 52: Convert to object (36) - 91, 53: type(variable) (22) (Opcode: 0xF0) - variable[12](text) (byte) - 94, 54: member access (35) - 95, 55: type(string) (21) (Opcode: 0xF0) - variable[13](test btn: ) (byte) - 98, 56: temp. (189) - 99, 57: type(variable) (22) (Opcode: 0xF0) - variable[6](a) (byte) - 102, 58: member access (35) - 103, 59: Convert to object (36) - 104, 60: type(variable) (22) (Opcode: 0xF0) - variable[7](ekjf) (byte) - 107, 61: member access (35) - 108, 62: Convert to string (34) - 109, 63: @ (113) - 110, 64: "=" (50) -*/ - temp.d.text = "test btn: " @ temp.a.ekjf; - -/* - 111, 65: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 114, 66: type(number) (20) (Opcode: 0xF3) - double(0) (byte) - 117, 67: "=" (50) - 118, 68: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 121, 69: Convert to float (33) - 122, 70: type(number) (20) (Opcode: 0xF3) - double(5) (byte) - 125, 71: < (72) - 126, 72: if (4) (Opcode: 0xF3) - double(78) (byte) - 129, 73: Start of function call? (9) - 130, 74: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 133, 75: Increment by 1 (52) - 134, 76: Decrease last operand index by 1 (32) - 135, 77: Set operation index (1) (Opcode: 0xF3) - double(68) (byte) -*/ - temp.g = 0; - while (temp.g < 5) { - temp.g++; - } - -/* - 138, 78: type(array) (23) - 139, 79: type(string) (21) (Opcode: 0xF0) - variable[14](Test: ) (byte) - 142, 80: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 145, 81: Convert to string (34) - 146, 82: @ (113) - 147, 83: type(variable) (22) (Opcode: 0xF0) - variable[15](echo) (byte) - 150, 84: Call function (6) - 151, 85: Decrease last operand index by 1 (32) -*/ - echo("Test: " @ temp.g); -} - - -function onCreated() { -/* - 7, 5: type(array) (23) - 8, 6: type(string) (21) (Opcode: 0xF0) - variable[0](--start) (byte) - 11, 7: type(variable) (22) (Opcode: 0xF0) - variable[1](echo) (byte) - 14, 8: Call function (6) - 15, 9: Decrease last operand index by 1 (32) -*/ - echo("--start"); - - -/* - 16, 10: type(variable) (22) (Opcode: 0xF0) - variable[2](ObjName) (byte) - 19, 11: inline new? (40) - 20, 12: Copy last operand (30) - 21, 13: Copy last operand (30) - 22, 14: Copy last operand (30) - 23, 15: type(string) (21) (Opcode: 0xF0) - variable[3](GuiButtonCtrl) (byte) - 26, 16: Convert to string (34) - 27, 17: new Object? (42) - 28, 18: "=" (50) -*/ - new GuiButtonCtrl(ObjName) - { -/* - 29, 19: Convert to object (36) - 30, 20: with (150) (Opcode: 0xF3) - double(43) (byte) - 33, 21: type(variable) (22) (Opcode: 0xF0) - variable[4](profile) (byte) - 36, 22: type(variable) (22) (Opcode: 0xF0) - variable[5](GuiBlueButtonProfile) (byte) - 39, 23: "=" (50) - 40, 24: type(variable) (22) (Opcode: 0xF0) - variable[6](text) (byte) - 43, 25: type(string) (21) (Opcode: 0xF0) - variable[7](button) (byte) - 46, 26: "=" (50) - 47, 27: type(variable) (22) (Opcode: 0xF0) - variable[8](x) (byte) - 50, 28: type(number) (20) (Opcode: 0xF3) - double(30) (byte) - 53, 29: "=" (50) - 54, 30: type(variable) (22) (Opcode: 0xF0) - variable[9](y) (byte) - 57, 31: type(number) (20) (Opcode: 0xF3) - double(30) (byte) - 60, 32: "=" (50) - 61, 33: type(variable) (22) (Opcode: 0xF0) - variable[10](width) (byte) - 64, 34: type(number) (20) (Opcode: 0xF4) - double(150) (word) - 68, 35: "=" (50) - 69, 36: type(variable) (22) (Opcode: 0xF0) - variable[11](height) (byte) - 72, 37: type(number) (20) (Opcode: 0xF4) - double(150) (word) - 76, 38: "=" (50) - 77, 39: type(variable) (22) (Opcode: 0xF0) - variable[12](visible) (byte) - 80, 40: type(number) (20) (Opcode: 0xF3) - double(1) (byte) - 83, 41: "=" (50) - 84, 42: End of with (151) -*/ - profile = GuiBlueButtonProfile; - text = "button"; - x = 30; - y = 30; - width = 150; - height = 150; - visible = 1; - }; - -/* - 85, 43: type(array) (23) - 86, 44: Swap last two operands (31) - 87, 45: type(variable) (22) (Opcode: 0xF0) - variable[13](addcontrol) (byte) - 90, 46: Call function (6) - 91, 47: Decrease last operand index by 1 (32) -*/ - -/* - 92, 48: type(array) (23) - 93, 49: type(string) (21) (Opcode: 0xF0) - variable[14](--end) (byte) - 96, 50: type(variable) (22) (Opcode: 0xF0) - variable[1](echo) (byte) - 99, 51: Call function (6) - 100, 52: Decrease last operand index by 1 (32) -*/ - echo("--end"); -} - - -/* -output: -Test 1: 4 -Test 2: 4 -Test 3: 4 -Test 4: 4 -Test 5: -5 -Test 6: 1 -Test 7: 0 -Test 8: 0 -*/ -function onCreated() -{ - temp.i = 5; -/* - 32, 18: type(array) (23) - 33, 19: type(string) (21) (Opcode: 0xF0) - variable[2](Test 1: ) (byte) - 36, 20: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 39, 21: Decrement by 1 (53) - 40, 22: Convert to string (34) - 41, 23: @ (113) - 42, 24: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 45, 25: Call function (6) - 46, 26: Decrease last operand index by 1 (32) -*/ - echo("Test 1: " @ --temp.i); - - /* - 47, 27: type(array) (23) - 48, 28: type(string) (21) (Opcode: 0xF0) - variable[3](Test 2: ) (byte) - 51, 29: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 54, 30: Copy last operand (30) - 55, 31: Convert to float (33) - 56, 32: Swap last two operands (31) - 57, 33: Decrement by 1 (53) - 58, 34: Decrease last operand index by 1 (32) - 59, 35: Convert to string (34) - 60, 36: @ (113) - 61, 37: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 64, 38: Call function (6) - 65, 39: Decrease last operand index by 1 (32) - */ - echo("Test 2: " @ temp.i--); - -/* - 66, 40: type(array) (23) - 67, 41: type(string) (21) (Opcode: 0xF0) - variable[4](Test 3: ) (byte) - 70, 42: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 73, 43: Increment by 1 (52) - 74, 44: Convert to string (34) - 75, 45: @ (113) - 76, 46: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 79, 47: Call function (6) - 80, 48: Decrease last operand index by 1 (32) -*/ - echo("Test 3: " @ ++temp.i); - -/* - 81, 49: type(array) (23) - 82, 50: type(string) (21) (Opcode: 0xF0) - variable[5](Test 4: ) (byte) - 85, 51: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 88, 52: Copy last operand (30) - 89, 53: Convert to float (33) - 90, 54: Swap last two operands (31) - 91, 55: Increment by 1 (52) - 92, 56: Decrease last operand index by 1 (32) - 93, 57: Convert to string (34) - 94, 58: @ (113) - 95, 59: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 98, 60: Call function (6) - 99, 61: Decrease last operand index by 1 (32) -*/ - echo("Test 4: " @ temp.i++); - -/* - 100, 62: type(array) (23) - 101, 63: type(string) (21) (Opcode: 0xF0) - variable[6](Test 5: ) (byte) - 104, 64: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 107, 65: Convert to float (33) - 108, 66: - unary (69) - 109, 67: Convert to string (34) - 110, 68: @ (113) - 111, 69: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 114, 70: Call function (6) - 115, 71: Decrease last operand index by 1 (32) -*/ - echo("Test 5: " @ -temp.i); - - temp.i = 0; - -/* - 123, 75: type(array) (23) - 124, 76: type(string) (21) (Opcode: 0xF0) - variable[7](Test 6: ) (byte) - 127, 77: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 130, 78: Convert to float (33) - 131, 79: ! (68) - 132, 80: Convert to string (34) - 133, 81: @ (113) - 134, 82: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 137, 83: Call function (6) - 138, 84: Decrease last operand index by 1 (32) -*/ - echo("Test 6: " @ !temp.i); - - temp.i = 1; - echo("Test 7: " @ !temp.i); - - temp.i = 2; - echo("Test 8: " @ !temp.i); -} - - - - -function onMouseDown(temp.mtype) -{ - if (temp.mtype == "left") { - this.pid = onFindPlayers(); - - if (this.pid >= 0) - { - if (this.pid == 0) - { - player.showProfile(); - } - else - { - onShowMenu(); - } - } - } -} - -function onFindPlayers() -{ - // Method 1 - UNTESTED - - /*temp.found = testplayer(mousex, mousey); - - if (temp.found) - { - return temp.found; - } - else - { - return -1; - }*/ - - // Method 2 - echo("searching"); - for (temp.I = 0; temp.I < players.size(); temp.I++) - { - echo("t: " @ players[temp.I].x @ ", " @ players[temp.I].y @ " vs " @ mousex @ "," @ mousey); - if (mousex in |players[temp.I].x, players[temp.I].x + 3|) { - if (mousey in |players[temp.I].y, players[temp.I].y + 3|) { - echo("found"); - return temp.I; - } - } - } - - return -1; -} - -function onMouseDown(temp.mtype) -{ -/* - 12, 8: type(variable) (22) (Opcode: 0xF0) - variable[1](mousex) (byte) - 15, 9: player. (182) - 16, 10: type(variable) (22) (Opcode: 0xF0) - variable[2](x) (byte) - 19, 11: member access (35) - 20, 12: Convert to float (33) - 21, 13: player. (182) - 22, 14: type(variable) (22) (Opcode: 0xF0) - variable[2](x) (byte) - 25, 15: member access (35) - 26, 16: Convert to float (33) - 27, 17: type(number) (20) (Opcode: 0xF3) - double(3) (byte) - 30, 18: + (60) - 31, 19: in <> (80) (Opcode: 0xF3) - double(0) (byte) - 34, 20: if (4) (Opcode: 0xF3) - double(26) (byte) - 37, 21: type(array) (23) - 38, 22: type(string) (21) (Opcode: 0xF0) - variable[3](in range) (byte) - 41, 23: type(variable) (22) (Opcode: 0xF0) - variable[4](echo) (byte) - 44, 24: Call function (6) - 45, 25: Decrease last operand index by 1 (32) -*/ - if (mousex in |player.x, player.x + 3|) { - echo("in range"); - } -} - -function onCreated() { - -/* - 7, 5: player. (182) - 8, 6: type(variable) (22) (Opcode: 0xF0) - variable[0](x) (byte) - 11, 7: member access (35) - 12, 8: Convert to float (33) - 13, 9: type(number) (20) (Opcode: 0xF3) - double(15) (byte) - 16, 10: > (73) - 17, 11: if (4) (Opcode: 0xF3) - double(24) (byte) - 20, 12: player. (182) - 21, 13: type(variable) (22) (Opcode: 0xF0) - variable[1](y) (byte) - 24, 14: member access (35) - 25, 15: Convert to float (33) - 26, 16: type(number) (20) (Opcode: 0xF3) - double(30) (byte) - 29, 17: < (72) - 30, 18: if (4) (Opcode: 0xF3) - double(24) (byte) - 33, 19: type(array) (23) - 34, 20: type(string) (21) (Opcode: 0xF0) - variable[2](and op) (byte) - 37, 21: type(variable) (22) (Opcode: 0xF0) - variable[3](echo) (byte) - 40, 22: Call function (6) - 41, 23: Decrease last operand index by 1 (32) -*/ - - if (player.x > 15 && player.y < 30) { - echo("and op"); - } - -/* - 42, 24: player. (182) - 43, 25: type(variable) (22) (Opcode: 0xF0) - variable[0](x) (byte) - 46, 26: member access (35) - 47, 27: Convert to float (33) - 48, 28: type(number) (20) (Opcode: 0xF3) - double(15) (byte) - 51, 29: > (73) - 52, 30: || (3) (Opcode: 0xF3) - double(37) (byte) - 55, 31: player. (182) - 56, 32: type(variable) (22) (Opcode: 0xF0) - variable[1](y) (byte) - 59, 33: member access (35) - 60, 34: Convert to float (33) - 61, 35: type(number) (20) (Opcode: 0xF3) - double(30) (byte) - 64, 36: < (72) - 65, 37: if (4) (Opcode: 0xF3) - double(43) (byte) - 68, 38: type(array) (23) - 69, 39: type(string) (21) (Opcode: 0xF0) - variable[4](or op) (byte) - 72, 40: type(variable) (22) (Opcode: 0xF0) - variable[3](echo) (byte) - 75, 41: Call function (6) - 76, 42: Decrease last operand index by 1 (32) -*/ - - if (player.x > 15 || player.y < 30) { - echo("or op"); - } -} - -//#CLIENTSIDE -function onCreated() -{ - this.commands = {"Profile"}; - echo("EE"); -} - -function onMouseDown(temp.mtype) -{ - this.pid = onFindPlayers(); - - if (this.pid >= 0) - { - //if (this.pid == 0) - { - //player.showProfile(); - } - // else - { - onShowMenu(); - } - } -} - -function onFindPlayers() -{ - // Method 1 - UNTESTED - - /*temp.found = testplayer(mousex, mousey); - - if (temp.found) - { - return temp.found; - } - else - { - return -1; - }*/ - - // Method 2 - for (temp.I = 0; temp.I < players.size(); temp.I++) - { - if (mousex in |players[temp.I].x, players[temp.I].x + 3| && mousey in |players[temp.I].y, players[temp.I].y + 3|) - { - return temp.I; - } - } - - return -1; -} - -function onShowMenu() -{ - new GuiContextMenuCtrl(Profile_Menu) - { - profile = "GuiBluePopUpMenuProfile"; - textprofile = "GuiBlueTextListProfile"; - text = players[thiso.pid].account; - width = 20; - - clearrows(); - - addRow(0, players[thiso.pid].account); - addrow(-1, "-"); - for (temp.I = 0; temp.I < thiso.commands.size(); temp.I++) - { - addRow(temp.I + 1, thiso.commands[temp.I]); - } - - open(mousescreenx, mousescreeny); - } -} - -function Profile_Menu.onSelect(entryid, text) -{ - switch (text) - { - case "Profile": - { - players[this.pid].showProfile(); - - break; - } - - case "test": - { - echo("test"); - break; - } - - case "kfkf": - { - echo("yes"); - say2("hi"); - break; - } - - default: - { - echo("fallthrough"); - break; - } - } - - Profile_Menu.destroy(); -} - - -function onCreated() { - temp.tst = {3, 5, 7, "ee", "fkfk", 5, 143, 5839, 96, 819, 941}; - - echo("Test 1: " @ this.commands[0]); - - if (this.commands[0] == "Profile") - echo("EE"); - - temp.idx = 0; - for (temp.v : temp.tst) { - temp.idx++; - echo("Loop index: " @ temp.idx @ " = " @ temp.v); - - if (temp.v == 143) - break; - if (temp.v == 5) - continue; - - echo("Val: " @ temp.v); - } -} - -//#CLIENTSIDE -function onCreated() { - temp.z = random(1, 20); - - temp.z++; - this.a = temp.z++; - this.b = ++temp.z; - this.c = temp.z--; - this.d = --temp.z; - - echo(format("%d, %d, %d, %d", this.a, this.b, this.c, this.d)); -} - - -//#CLIENTSIDE -function onCreated() { - temp.a = player.nick @ player.account; - temp.b = player.nick NL player.account; - temp.c = player.nick TAB player.account; - temp.d = player.nick SPC player.account; - - player.chat = temp.a @ temp.b @ temp.c @ temp.d; -} - -function onCreated() { -/* - 6, 4: this. (180) - 7, 5: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 10, 6: member access (35) - 11, 7: type(number) (20) (Opcode: 0xF3) - double(3) (byte) - 14, 8: new[] (38) - 15, 9: type(number) (20) (Opcode: 0xF3) - double(2) (byte) - 18, 10: new[][] for each extra dimension (142) - 19, 11: "=" (50) -*/ - this.obj = new[3][2]; - -/* - 20, 12: this. (180) - 21, 13: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 24, 14: member access (35) - 25, 15: Convert to object (36) - 26, 16: type(number) (20) (Opcode: 0xF3) - double(1) (byte) - 29, 17: type(number) (20) (Opcode: 0xF3) - double(2) (byte) - 32, 18: type(number) (20) (Opcode: 0xF3) - double(3) (byte) - 35, 19: [a,b] assignment (134) -*/ - this.obj[1,2] = 3; - -/* - 36, 20: temp. (189) - 37, 21: type(variable) (22) (Opcode: 0xF0) - variable[1](v) (byte) - 40, 22: member access (35) - 41, 23: type(variable) (22) (Opcode: 0xF0) - variable[2](tiles) (byte) - 44, 24: Convert to object (36) - 45, 25: type(number) (20) (Opcode: 0xF3) - double(17) (byte) - 48, 26: type(number) (20) (Opcode: 0xF3) - double(16) (byte) - 51, 27: [a,b] (133) - 52, 28: "=" (50) -*/ - temp.v = tiles[17,16]; - -/* - 53, 29: player. (182) - 54, 30: type(variable) (22) (Opcode: 0xF0) - variable[3](chat) (byte) - 57, 31: member access (35) - 58, 32: type(string) (21) (Opcode: 0xF0) - variable[4](T: ) (byte) - 61, 33: temp. (189) - 62, 34: type(variable) (22) (Opcode: 0xF0) - variable[1](v) (byte) - 65, 35: member access (35) - 66, 36: Convert to string (34) - 67, 37: @ (113) - 68, 38: "=" (50) -*/ - player.chat = "T: " @ temp.v; -} - -public function test() { - player.chat = this.obj; -} - - -function onCreated() -{ - temp.v = "test"; - temp.arr = new[3]; - - - // temp.dump = getVal( obj.(@ temp.vars[i] ) ); -} - -function onCreated() { -/* - 6, 4: temp. (189) - 7, 5: type(variable) (22) (Opcode: 0xF0) - variable[0](a) (byte) - 10, 6: member access (35) - 11, 7: type(true) (24) - 12, 8: "=" (50) -*/ - temp.a = true; - -/* - 13, 9: temp. (189) - 14, 10: type(variable) (22) (Opcode: 0xF0) - variable[1](b) (byte) - 17, 11: member access (35) - 18, 12: temp. (189) - 19, 13: type(variable) (22) (Opcode: 0xF0) - variable[0](a) (byte) - 22, 14: member access (35) - 23, 15: Convert to float (33) - 24, 16: || (3) (Opcode: 0xF3) - double(21) (byte) - 27, 17: temp. (189) - 28, 18: type(variable) (22) (Opcode: 0xF0) - variable[2](c) (byte) - 31, 19: member access (35) - 32, 20: Convert to float (33) - 33, 21: End of inline conditional? (44) - 34, 22: "=" (50) -*/ - temp.b = (temp.a || temp.c); - -/* - 35, 23: player. (182) - 36, 24: type(variable) (22) (Opcode: 0xF0) - variable[3](chat) (byte) - 39, 25: member access (35) - 40, 26: type(string) (21) (Opcode: 0xF0) - variable[4](Test: ) (byte) - 43, 27: temp. (189) - 44, 28: type(variable) (22) (Opcode: 0xF0) - variable[1](b) (byte) - 47, 29: member access (35) - 48, 30: Convert to string (34) - 49, 31: @ (113) - 50, 32: "=" (50) -*/ - player.chat = "Test: " @ temp.b; -} - - -function onCreated() { -/* - 7, 5: temp. (189) - 8, 6: type(variable) (22) (Opcode: 0xF0) - variable[0](b) (byte) - 11, 7: member access (35) - 12, 8: Mark as loop variable (47) - 13, 9: Assign loop variable index (45) (Opcode: 0xF3) - double(0) (byte) - 16, 10: Decrease last operand index by 1 (32) - 17, 11: temp. (189) - 18, 12: type(variable) (22) (Opcode: 0xF0) - variable[1](a) (byte) - 21, 13: member access (35) - 22, 14: Mark as loop variable (47) - 23, 15: Assign loop variable index (45) (Opcode: 0xF3) - double(1) (byte) - 26, 16: Decrease last operand index by 1 (32) -*/ - -/* - 27, 17: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 30, 18: type(true) (24) - 31, 19: "=" (50) -*/ - temp.a = true; - -/* - 32, 20: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 35, 21: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 38, 22: Convert to float (33) - 39, 23: && (5) (Opcode: 0xF3) - double(28) (byte) - 42, 24: temp. (189) - 43, 25: type(variable) (22) (Opcode: 0xF0) - variable[2](c) (byte) - 46, 26: member access (35) - 47, 27: Convert to float (33) - 48, 28: End of inline conditional? (44) - 49, 29: "=" (50) -*/ - temp.b = (temp.a && temp.c); - -/* - 50, 30: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 53, 31: Convert to float (33) - 54, 32: || (3) (Opcode: 0xF3) - double(35) (byte) - 57, 33: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 60, 34: Convert to float (33) - 61, 35: if (4) (Opcode: 0xF3) - double(41) (byte) - 64, 36: type(array) (23) - 65, 37: type(string) (21) (Opcode: 0xF0) - variable[3](One is true) (byte) - 68, 38: type(variable) (22) (Opcode: 0xF0) - variable[4](echo) (byte) - 71, 39: Call function (6) - 72, 40: Decrease last operand index by 1 (32) -*/ - if (temp.a || temp.b) { - echo("One is true"); - } - -/* - 73, 41: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 76, 42: Convert to float (33) - 77, 43: if (4) (Opcode: 0xF3) - double(52) (byte) - 80, 44: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 83, 45: Convert to float (33) - 84, 46: if (4) (Opcode: 0xF3) - double(52) (byte) - 87, 47: type(array) (23) - 88, 48: type(string) (21) (Opcode: 0xF0) - variable[5](Both is true) (byte) - 91, 49: type(variable) (22) (Opcode: 0xF0) - variable[4](echo) (byte) - 94, 50: Call function (6) - 95, 51: Decrease last operand index by 1 (32) -*/ - if (temp.a && temp.b) { - echo("Both is true"); - } - -/* - 96, 52: Loop variable (46) (Opcode: 0xF3) - double(1) (byte) - 99, 53: Convert to float (33) - 100, 54: if (4) (Opcode: 0xF3) - double(64) (byte) - 103, 55: Loop variable (46) (Opcode: 0xF3) - double(0) (byte) - 106, 56: Convert to float (33) - 107, 57: ! (68) - 108, 58: if (4) (Opcode: 0xF3) - double(64) (byte) - 111, 59: type(array) (23) - 112, 60: type(string) (21) (Opcode: 0xF0) - variable[6](Only temp.a is true) (byte) - 115, 61: type(variable) (22) (Opcode: 0xF0) - variable[4](echo) (byte) - 118, 62: Call function (6) - 119, 63: Decrease last operand index by 1 (32) -*/ - if (temp.a && !temp.b) { - echo("Only temp.a is true"); - } -} - - - -//#CLIENTSIDE -function onCreated() { -/* - 7, 5: temp. (189) - 8, 6: type(variable) (22) (Opcode: 0xF0) - variable[0](q) (byte) - 11, 7: member access (35) - 12, 8: type(array) (23) - 13, 9: type(string) (21) (Opcode: 0xF0) - variable[1](asdf) (byte) - 16, 10: type(string) (21) (Opcode: 0xF0) - variable[2](some) (byte) - 19, 11: End of array (37) - 20, 12: "=" (50) -*/ - - temp.q = { "some", "asdf" }; - -/* - 21, 13: temp. (189) - 22, 14: type(variable) (22) (Opcode: 0xF0) - variable[3](I) (byte) - 25, 15: member access (35) - 26, 16: type(number) (20) (Opcode: 0xF3) - double(3) (byte) - 29, 17: "=" (50) -*/ - temp.I = 3; - -/* - 30, 18: this. (180) - 31, 19: type(variable) (22) (Opcode: 0xF0) - variable[4](items2) (byte) - 34, 20: member access (35) - 35, 21: Convert to object (36) - 36, 22: type(number) (20) (Opcode: 0xF3) - double(4) (byte) - 39, 23: setarray() (39) -*/ - setarray(this.items2, 4); - -/* - 40, 24: this. (180) - 41, 25: type(variable) (22) (Opcode: 0xF0) - variable[5](items) (byte) - 44, 26: member access (35) - 45, 27: Convert to object (36) - 46, 28: obj.clear() (141) -*/ - this.items.clear(); - -/* - 47, 29: this. (180) - 48, 30: type(variable) (22) (Opcode: 0xF0) - variable[5](items) (byte) - 51, 31: member access (35) - 52, 32: Convert to object (36) - 53, 33: type(array) (23) - 54, 34: temp. (189) - 55, 35: type(variable) (22) (Opcode: 0xF0) - variable[0](q) (byte) - 58, 36: member access (35) - 59, 37: temp. (189) - 60, 38: type(variable) (22) (Opcode: 0xF0) - variable[3](I) (byte) - 63, 39: member access (35) - 64, 40: End of array (37) - 65, 41: addstring() (136) -*/ - this.items.add({temp.I, temp.q}); - -/* - 66, 42: type(array) (23) - 67, 43: type(string) (21) (Opcode: 0xF0) - variable[6](Test: ) (byte) - 70, 44: this. (180) - 71, 45: type(variable) (22) (Opcode: 0xF0) - variable[5](items) (byte) - 74, 46: member access (35) - 75, 47: Convert to object (36) - 76, 48: obj.size() (130) - 77, 49: Convert to string (34) - 78, 50: @ (113) - 79, 51: type(variable) (22) (Opcode: 0xF0) - variable[7](echo) (byte) - 82, 52: Call function (6) - 83, 53: Decrease last operand index by 1 (32) -*/ - echo("Test: " @ this.items.size()); -} - - -public function isHuman() { -/* - 6, 4: type(variable) (22) (Opcode: 0xF0) - variable[0](clientr) (byte) - 9, 5: Convert to object (36) - 10, 6: type(variable) (22) (Opcode: 0xF0) - variable[1](race) (byte) - 13, 7: member access (35) - 14, 8: type(string) (21) (Opcode: 0xF0) - variable[2](human) (byte) - 17, 9: == (70) - 18, 10: if (4) (Opcode: 0xF3) - double(13) (byte) - 21, 11: type(true) (24) - 22, 12: Set operation index (1) (Opcode: 0xF3) - double(14) (byte) - 25, 13: type(false) (25) -*/ - return (clientr.race == "human" ? true : false); -} - - -public function someFunction() { -/* - 7, 5: this. (180) - 8, 6: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 11, 7: member access (35) - 12, 8: type(number) (20) (Opcode: 0xF3) - double(6) (byte) - 15, 9: new[] (38) - 16, 10: "=" (50) - -*/ - this.obj = new[6]; - -/* - 17, 11: temp. (189) - 18, 12: type(variable) (22) (Opcode: 0xF0) - variable[1](str) (byte) - 21, 13: member access (35) - 22, 14: this. (180) - 23, 15: type(variable) (22) (Opcode: 0xF0) - variable[0](obj) (byte) - 26, 16: member access (35) - 27, 17: Convert to string (34) - 28, 18: type(string) (21) (Opcode: 0xF0) - variable[2]( ,) (byte) - 31, 19: obj.tokenize() (118) - 32, 20: "=" (50) -*/ - temp.str = this.obj.tokenize(); - -/* - 33, 21: type(array) (23) - 34, 22: type(string) (21) (Opcode: 0xF0) - variable[3](Test: ) (byte) - 37, 23: temp. (189) - 38, 24: type(variable) (22) (Opcode: 0xF0) - variable[1](str) (byte) - 41, 25: member access (35) - 42, 26: Convert to string (34) - 43, 27: @ (113) - 44, 28: type(variable) (22) (Opcode: 0xF0) - variable[4](echo) (byte) - 47, 29: Call function (6) - 48, 30: Decrease last operand index by 1 (32) - 49, 31: type(number) (20) (Opcode: 0xF3) - double(0) (byte) -*/ - echo("Test: " @ temp.str); -} - - - -/* -//#CLIENTSIDE -function onCreated() { - this.func = this.func1; - this.func(123); - - this.func2 = function() { - echo("nameless functions"); - }; - } - function func1(param) { - echo("param: " @ param); - } -*/ - - - - - - - - -//#CLIENTSIDE -function onCreated() -{ - /* - 496, 294: this. (180) - 497, 295: type(variable) (22) (Opcode: 0xF0) - variable[52](particleSystemEditor) (byte) - 500, 296: member access (35) - 501, 297: type(variable) (22) (Opcode: 0xF0) - variable[53](unknown_object) (byte) - 504, 298: type(string) (21) (Opcode: 0xF0) - variable[0](TParticleSystemEditor) (byte) - 507, 299: new Object? (42) - 508, 300: "=" (50) -*/ - this.particleSystemEditor = new TParticleSystemEditor(); - player.chat = "fired2: " @ ++this.i; - -/* - 527, 311: this. (180) - 528, 312: type(variable) (22) (Opcode: 0xF0) - variable[55](someobj) (byte) - 531, 313: member access (35) - 532, 314: type(variable) (22) (Opcode: 0xF0) - variable[53](unknown_object) (byte) - 535, 315: type(string) (21) (Opcode: 0xF0) - variable[16](GuiWindowCtrl) (byte) - 538, 316: new Object? (42) - 539, 317: "=" (50) -*/ - this.someobj = new GuiWindowCtrl(); - this.someobj.show(); - - player.chat = "fired2.1: " @ ++this.i; - -/* - 571, 337: this. (180) - 572, 338: type(variable) (22) (Opcode: 0xF0) - variable[58](someobj2) (byte) - 575, 339: member access (35) - 576, 340: type(string) (21) (Opcode: 0xF0) - variable[59](SomeWindow) (byte) - 579, 341: inline new? (40) - 580, 342: type(string) (21) (Opcode: 0xF0) - variable[16](GuiWindowCtrl) (byte) - 583, 343: new Object? (42) - 584, 344: "=" (50) -*/ - this.someobj2 = new GuiWindowCtrl("SomeWindow"); - this.someobj2.show(); - player.chat = "fired2.2: " @ ++this.i; - -/* - 616, 364: this. (180) - 617, 365: type(variable) (22) (Opcode: 0xF0) - variable[61](someobj3) (byte) - 620, 366: member access (35) - 621, 367: type(string) (21) (Opcode: 0xF0) - variable[62](arg1) (byte) - 624, 368: inline new? (40) - 625, 369: type(string) (21) (Opcode: 0xF0) - variable[0](TParticleSystemEditor) (byte) - 628, 370: new Object? (42) - 629, 371: "=" (50) -*/ - this.someobj3 = new TParticleSystemEditor("arg1"); - player.chat = "fired2.3: " @ ++this.i; - -/* - 648, 382: this. (180) - 649, 383: type(variable) (22) (Opcode: 0xF0) - variable[64](someobj4) (byte) - 652, 384: member access (35) - 653, 385: type(variable) (22) (Opcode: 0xF0) - variable[53](unknown_object) (byte) - 656, 386: type(string) (21) (Opcode: 0xF0) - variable[0](TParticleSystemEditor) (byte) - 659, 387: new Object? (42) - 660, 388: "=" (50) -*/ - this.someobj4 = new TParticleSystemEditor("arg1", "arg2", "arg3"); - player.chat = "fired3: " @ ++this.i; - -/* - 679, 399: this. (180) - 680, 400: type(variable) (22) (Opcode: 0xF0) - variable[66](anotherobj) (byte) - 683, 401: member access (35) - 684, 402: type(variable) (22) (Opcode: 0xF0) - variable[53](unknown_object) (byte) - 687, 403: type(string) (21) (Opcode: 0xF0) - variable[3](TStaticVar) (byte) - 690, 404: new Object? (42) - 691, 405: "=" (50) -*/ - this.anotherobj = new TStaticVar(); - player.chat = "fired4: " @ ++this.i; - -/* - 710, 416: this. (180) - 711, 417: type(variable) (22) (Opcode: 0xF0) - variable[68](anotherobj2) (byte) - 714, 418: member access (35) - 715, 419: type(string) (21) (Opcode: 0xF0) - variable[13](test) (byte) - 718, 420: inline new? (40) - 719, 421: type(string) (21) (Opcode: 0xF0) - variable[3](TStaticVar) (byte) - 722, 422: new Object? (42) - 723, 423: "=" (50) -*/ - this.anotherobj2 = new TStaticVar("test"); - player.chat = "fired5: " @ ++this.i; - -/* - 742, 434: this. (180) - 743, 435: type(variable) (22) (Opcode: 0xF0) - variable[70](anotherobj3) (byte) - 746, 436: member access (35) - 747, 437: type(variable) (22) (Opcode: 0xF0) - variable[53](unknown_object) (byte) - 750, 438: type(string) (21) (Opcode: 0xF0) - variable[3](TStaticVar) (byte) - 753, 439: new Object? (42) - 754, 440: "=" (50) -*/ - this.anotherobj3 = new TStaticVar("test", "abc"); - player.chat = "fired6: " @ ++this.i; - - this.particleSystemEditor.initialize(findImg(300)); - player.chat = "fired8: " @ ++this.i; -} - - diff --git a/src/CompilerThreadJob.h b/src/CompilerThreadJob.h index 1a4b883..673b773 100644 --- a/src/CompilerThreadJob.h +++ b/src/CompilerThreadJob.h @@ -8,7 +8,7 @@ #include #include "encoding/buffer.h" -#include "GS2Context.h" +#include "compiler/GS2Context.h" /////// This class will allow you to queue lambda functions into a threadpool diff --git a/src/ast/astvisitor.h b/src/ast/NodeVisitor.h similarity index 96% rename from src/ast/astvisitor.h rename to src/ast/NodeVisitor.h index 034707d..d606a7d 100644 --- a/src/ast/astvisitor.h +++ b/src/ast/NodeVisitor.h @@ -6,7 +6,9 @@ class NodeVisitor { public: - virtual void Visit(class Node *node) = 0; + virtual ~NodeVisitor() = default; + + virtual void Visit(class Node *node) = 0; virtual void Visit(class StatementNode *node) = 0; virtual void Visit(class StatementBlock *node) = 0; virtual void Visit(class StatementIfNode *node) = 0; diff --git a/src/ast/ast.h b/src/ast/ast.h index 5848232..9d539af 100644 --- a/src/ast/ast.h +++ b/src/ast/ast.h @@ -9,7 +9,7 @@ #include #include "ast/expressiontypes.h" -#include "ast/astvisitor.h" +#include "ast/NodeVisitor.h" #define _NodeName(name) \ inline static const char * NodeName = name; \ diff --git a/src/GS2Bytecode.cpp b/src/codegen/GS2Bytecode.cpp similarity index 100% rename from src/GS2Bytecode.cpp rename to src/codegen/GS2Bytecode.cpp diff --git a/src/GS2Bytecode.h b/src/codegen/GS2Bytecode.h similarity index 100% rename from src/GS2Bytecode.h rename to src/codegen/GS2Bytecode.h diff --git a/src/GS2BuiltInFunctions.cpp b/src/compiler/GS2BuiltInFunctions.cpp similarity index 100% rename from src/GS2BuiltInFunctions.cpp rename to src/compiler/GS2BuiltInFunctions.cpp diff --git a/src/GS2BuiltInFunctions.h b/src/compiler/GS2BuiltInFunctions.h similarity index 100% rename from src/GS2BuiltInFunctions.h rename to src/compiler/GS2BuiltInFunctions.h diff --git a/src/visitors/GS2CompilerVisitor.cpp b/src/compiler/GS2CompilerVisitor.cpp similarity index 99% rename from src/visitors/GS2CompilerVisitor.cpp rename to src/compiler/GS2CompilerVisitor.cpp index 138a720..8e5436b 100644 --- a/src/visitors/GS2CompilerVisitor.cpp +++ b/src/compiler/GS2CompilerVisitor.cpp @@ -4,8 +4,8 @@ #include "ast/ast.h" #include "visitors/FunctionInspectVisitor.h" -#include "visitors/GS2CompilerVisitor.h" -#include "Parser.h" +#include "compiler/GS2CompilerVisitor.h" +#include "parser/Parser.h" opcode::Opcode getExpressionOpCode(ExpressionOp op) { diff --git a/src/visitors/GS2CompilerVisitor.h b/src/compiler/GS2CompilerVisitor.h similarity index 99% rename from src/visitors/GS2CompilerVisitor.h rename to src/compiler/GS2CompilerVisitor.h index efd9eb4..504db0f 100644 --- a/src/visitors/GS2CompilerVisitor.h +++ b/src/compiler/GS2CompilerVisitor.h @@ -7,7 +7,7 @@ #include #include #include -#include "ast/astvisitor.h" +#include "ast/NodeVisitor.h" #include "GS2Bytecode.h" #include "GS2BuiltInFunctions.h" diff --git a/src/GS2Context.cpp b/src/compiler/GS2Context.cpp similarity index 98% rename from src/GS2Context.cpp rename to src/compiler/GS2Context.cpp index a863a6a..464a14b 100644 --- a/src/GS2Context.cpp +++ b/src/compiler/GS2Context.cpp @@ -1,7 +1,7 @@ #include #include "GS2Context.h" #include "encoding/graalencoding.h" -#include "visitors/GS2CompilerVisitor.h" +#include "compiler/GS2CompilerVisitor.h" #include "GS2Bytecode.h" #include "Parser.h" diff --git a/src/GS2Context.h b/src/compiler/GS2Context.h similarity index 96% rename from src/GS2Context.h rename to src/compiler/GS2Context.h index 56348af..8fb0699 100644 --- a/src/GS2Context.h +++ b/src/compiler/GS2Context.h @@ -5,6 +5,7 @@ #include #include +#include "gs2compiler_export.h" #include "encoding/buffer.h" #include "exceptions/GS2CompilerError.h" #include "GS2BuiltInFunctions.h" @@ -18,7 +19,7 @@ struct CompilerResponse std::set joinedClasses; }; -class GS2Context +class GS2COMPILER_EXPORT GS2Context { public: GS2Context(); diff --git a/src/main.cpp b/src/main.cpp index 80ad789..8278c94 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,7 +6,7 @@ #include #include #include -#include "GS2Context.h" +#include "compiler/GS2Context.h" struct Response { diff --git a/src/memory/ArenaAllocator.h b/src/memory/ArenaAllocator.h new file mode 100644 index 0000000..c7ff882 --- /dev/null +++ b/src/memory/ArenaAllocator.h @@ -0,0 +1,120 @@ +#pragma once + +#ifndef ARENAALLOCATOR_H +#define ARENAALLOCATOR_H + +#include +#include +#include +#include + +template +class ArenaAllocator { +public: + static constexpr size_t CHUNK_SIZE = DefaultChunkSize; + + ArenaAllocator() : current_(nullptr), remaining_(0) {} + ArenaAllocator(const ArenaAllocator&) = delete; + ArenaAllocator& operator=(const ArenaAllocator&) = delete; + + ArenaAllocator(ArenaAllocator&& other) noexcept + : chunks_(std::move(other.chunks_)), + current_(std::exchange(other.current_, nullptr)), + remaining_(std::exchange(other.remaining_, 0)) { + } + + ArenaAllocator& operator=(ArenaAllocator&& other) noexcept { + if (this != &other) { + chunks_ = std::move(other.chunks_); + current_ = std::exchange(other.current_, nullptr); + remaining_ = std::exchange(other.remaining_, 0); + } + return *this; + } + + ~ArenaAllocator() = default; + + /** + * Allocate and construct an object of type T + * + * @tparam T The type to allocate + * @tparam Args Constructor argument types + * @param args Constructor arguments + * @return Pointer to constructed object + */ + template + [[nodiscard]] T* allocate(Args&&... args) { + void* ptr = allocate_raw(sizeof(T), alignof(T)); + return std::construct_at(static_cast(ptr), std::forward(args)...); + } + + /** + * Reset the arena, freeing all allocated memory + */ + void reset() noexcept { + chunks_.clear(); + current_ = nullptr; + remaining_ = 0; + } + + /** + * Get total allocated memory (including overhead) + */ + [[nodiscard]] size_t total_allocated() const { + size_t total = 0; + for (const auto& chunk : chunks_) { + total += chunk.size; + } + return total; + } + + /** + * Get number of chunks allocated + */ + [[nodiscard]] size_t chunk_count() const { + return chunks_.size(); + } + +private: + /** + * Represents a memory chunk + */ + struct Chunk { + std::unique_ptr data; + size_t size{}; + }; + + /** + * Allocate raw memory with proper alignment + * + * @param size Number of bytes to allocate + * @param alignment Required alignment (must be power of 2) + * @return Pointer to allocated memory + */ + void* allocate_raw(size_t size, size_t alignment) { + void* ptr = current_; + size_t space = remaining_; + + if (!ptr || !std::align(alignment, size, ptr, space)) { + // Need a new chunk + size_t chunk_size = std::max(size + alignment, CHUNK_SIZE); + chunks_.push_back(Chunk{ + std::make_unique(chunk_size), + chunk_size + }); + ptr = current_ = chunks_.back().data.get(); + space = remaining_ = chunk_size; + std::align(alignment, size, ptr, space); + } + + current_ = static_cast(ptr) + size; + remaining_ = space - size; + return ptr; + } + + std::vector chunks_; + std::byte* current_; + size_t remaining_; +}; + +#endif // ARENAALLOCATOR_H diff --git a/src/Parser.cpp b/src/parser/Parser.cpp similarity index 94% rename from src/Parser.cpp rename to src/parser/Parser.cpp index baba284..413fa1a 100644 --- a/src/Parser.cpp +++ b/src/parser/Parser.cpp @@ -62,7 +62,7 @@ std::string unquoteString(std::string_view str) } ParserContext::ParserContext(GS2ErrorService& service) - : lineNumber(0), columnNumber(0), buffer(nullptr), failed(false), inputStringPtr(nullptr), + : lineNumber(0), columnNumber(0), scanner(nullptr), buffer(nullptr), failed(false), inputStringPtr(nullptr), lambdaFunctionCount(0), programNode(nullptr), errorService(service) { yylex_init_extra(this, &scanner); @@ -83,9 +83,13 @@ ParserContext::~ParserContext() void ParserContext::cleanup() { - for (auto& n : nodes) - delete n; - nodes.clear(); +#ifdef DBGALLOCATIONS + printf("Memory allocated for nodes: %zu bytes in %zu chunks\n", + nodeArena.total_allocated(), nodeArena.chunk_count()); +#endif + + // Reset arena - frees all nodes at once + nodeArena.reset(); } void ParserContext::reset() diff --git a/src/Parser.h b/src/parser/Parser.h similarity index 89% rename from src/Parser.h rename to src/parser/Parser.h index 4c4f6de..f993c5b 100644 --- a/src/Parser.h +++ b/src/parser/Parser.h @@ -14,6 +14,7 @@ #include #include "ast/ast.h" +#include "memory/ArenaAllocator.h" #include "exceptions/GS2CompilerError.h" typedef void* yyscan_t; @@ -111,14 +112,6 @@ class ParserContext template T *alloc(P&&... params); - /* - * Deallocate node instance, recommend avoid using - * as any node allocated with alloc() will be deallocated - * by a call to cleanup(), or in the destructor of the context - */ - template - void dealloc(T *n); - private: /** * Cleanup any nodes allocated @@ -141,7 +134,7 @@ class ParserContext std::unordered_map> stringTable; std::stack switchCases; - std::vector nodes; + ArenaAllocator<> nodeArena; StatementBlock* programNode; GS2ErrorService& errorService; }; @@ -204,27 +197,15 @@ inline void ParserContext::addError(GS2CompilerError error) /* * Memory Allocation for Nodes + * + * Uses arena allocator for fast allocation with excellent cache locality. + * All nodes are freed together when the ParserContext is destroyed or reset. */ template inline T *ParserContext::alloc(P && ...params) { - T *n = new T(std::forward

(params)...); - nodes.push_back(n); + T *n = nodeArena.allocate(std::forward

(params)...); return n; } -/* - * Memory Deallocation for Nodes - */ -template -inline void ParserContext::dealloc(T *n) -{ - if (n) - { - nodes.erase(std::remove(nodes.begin(), nodes.end(), n), nodes.end()); - delete n; - } -} - - #endif diff --git a/generator/gs2parser.y b/src/parser/gs2parser.y similarity index 100% rename from generator/gs2parser.y rename to src/parser/gs2parser.y diff --git a/generator/gs2scanner.l b/src/parser/gs2scanner.l similarity index 100% rename from generator/gs2scanner.l rename to src/parser/gs2scanner.l diff --git a/src/ast/astnodevisitor.h b/src/visitors/ASTNodeVisitor.h similarity index 99% rename from src/ast/astnodevisitor.h rename to src/visitors/ASTNodeVisitor.h index 6eecca5..881b6c1 100644 --- a/src/ast/astnodevisitor.h +++ b/src/visitors/ASTNodeVisitor.h @@ -3,7 +3,7 @@ #ifndef ASTVISITORIMPL_H #define ASTVISITORIMPL_H -#include "ast.h" +#include "../ast/ast.h" class ASTNodeVisitor : public NodeVisitor { diff --git a/src/visitors/FunctionInspectVisitor.h b/src/visitors/FunctionInspectVisitor.h index c915cd2..94bd145 100644 --- a/src/visitors/FunctionInspectVisitor.h +++ b/src/visitors/FunctionInspectVisitor.h @@ -3,7 +3,7 @@ #ifndef FUNCTIONINSPECTVISITOR_H #define FUNCTIONINSPECTVISITOR_H -#include "ast/astnodevisitor.h" +#include "ASTNodeVisitor.h" class FunctionInspectVisitor : public ASTNodeVisitor { diff --git a/test-workflow.sh b/test-workflow.sh deleted file mode 100755 index 470faaf..0000000 --- a/test-workflow.sh +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/bash -# Test GitHub Actions workflow locally using 'act' - -set -e - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# Check if act is installed -if ! command -v act &> /dev/null; then - echo -e "${RED}Error: 'act' is not installed${NC}" - echo "" - echo "Install act with:" - echo " macOS: brew install act" - echo " Linux: curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash" - echo " Windows: choco install act-cli" - echo "" - echo "Visit: https://github.com/nektos/act" - exit 1 -fi - -# Function to print usage -usage() { - echo -e "${BLUE}GitHub Actions Local Testing Tool${NC}" - echo "" - echo "Usage: $0 [command] [options]" - echo "" - echo "Commands:" - echo " list - List all available workflows and jobs" - echo " quick - Quick test (Ubuntu Release build only)" - echo " full - Full matrix test (all OS and build types)" - echo " ubuntu - Test Ubuntu builds (Debug + Release)" - echo " macos - Test macOS builds (Debug + Release)" - echo " windows - Test Windows builds (Debug + Release)" - echo " debug - Test Debug builds (all platforms)" - echo " release - Test Release builds (all platforms)" - echo " dry-run - Show what would run without executing" - echo " custom - Run custom act command (pass additional args)" - echo "" - echo "Options:" - echo " -v, --verbose - Verbose output" - echo " -h, --help - Show this help message" - echo "" - echo "Examples:" - echo " $0 quick # Fast test on Ubuntu Release" - echo " $0 ubuntu -v # Test Ubuntu with verbose output" - echo " $0 custom -j build-and-test --matrix os:macos-latest" - exit 0 -} - -# Parse global options -VERBOSE="" -while [[ $# -gt 0 ]]; do - case $1 in - -h|--help) - usage - ;; - -v|--verbose) - VERBOSE="-v" - shift - ;; - *) - break - ;; - esac -done - -COMMAND=${1:-quick} - -echo -e "${GREEN}Testing GitHub Actions workflow locally...${NC}" -echo "" - -case $COMMAND in - list) - echo -e "${YELLOW}Available workflows and jobs:${NC}" - act -l - ;; - - quick) - echo -e "${YELLOW}Running quick test (Ubuntu Release)...${NC}" - act --rm push -j build-and-test \ - --matrix os:ubuntu-latest \ - --matrix build_type:Release \ - -W .github/workflows/ci.yml \ - $VERBOSE - ;; - - full) - echo -e "${YELLOW}Running full matrix test (this will take a while)...${NC}" - echo -e "${RED}Warning: This will test all OS/build_type combinations${NC}" - read -p "Continue? (y/N) " -n 1 -r - echo - if [[ $REPLY =~ ^[Yy]$ ]]; then - act --rm --bind push -j build-and-test \ - -W .github/workflows/ci.yml \ - $VERBOSE - else - echo "Cancelled." - exit 0 - fi - ;; - - ubuntu) - echo -e "${YELLOW}Testing Ubuntu builds (Debug + Release)...${NC}" - echo "Running Release build..." - act --rm --bind push -j build-and-test \ - --matrix os:ubuntu-latest \ - --matrix build_type:Release \ - -W .github/workflows/ci.yml \ - $VERBOSE - - echo "" - echo "Running Debug build..." - act --rm --bind push -j build-and-test \ - --matrix os:ubuntu-latest \ - --matrix build_type:Debug \ - -W .github/workflows/ci.yml \ - $VERBOSE - ;; - - macos) - echo -e "${YELLOW}Testing macOS builds (Debug + Release)...${NC}" - echo "Running Release build..." - act --rm --bind push -j build-and-test \ - --matrix os:macos-latest \ - --matrix build_type:Release \ - -W .github/workflows/ci.yml \ - $VERBOSE - - echo "" - echo "Running Debug build..." - act --rm --bind push -j build-and-test \ - --matrix os:macos-latest \ - --matrix build_type:Debug \ - -W .github/workflows/ci.yml \ - $VERBOSE - ;; - - windows) - echo -e "${YELLOW}Testing Windows builds (Debug + Release)...${NC}" - echo "Running Release build..." - act --rm --bind push -j build-and-test \ - --matrix os:windows-latest \ - --matrix build_type:Release \ - -W .github/workflows/ci.yml \ - $VERBOSE - - echo "" - echo "Running Debug build..." - act --rm --bind push -j build-and-test \ - --matrix os:windows-latest \ - --matrix build_type:Debug \ - -W .github/workflows/ci.yml \ - $VERBOSE - ;; - - debug) - echo -e "${YELLOW}Testing Debug builds (all platforms)...${NC}" - act --rm --bind push -j build-and-test \ - --matrix build_type:Debug \ - -W .github/workflows/ci.yml \ - $VERBOSE - ;; - - release) - echo -e "${YELLOW}Testing Release builds (all platforms)...${NC}" - act --rm --bind push -j build-and-test \ - --matrix build_type:Release \ - -W .github/workflows/ci.yml \ - $VERBOSE - ;; - - dry-run) - echo -e "${YELLOW}Dry run - showing what would execute...${NC}" - act -n -W .github/workflows/ci.yml - ;; - - custom) - shift # Remove 'custom' from args - echo -e "${YELLOW}Running custom act command...${NC}" - echo "Command: act --rm --bind push -W .github/workflows/ci.yml $@" - act --rm --bind push -W .github/workflows/ci.yml "$@" - ;; - - *) - echo -e "${RED}Error: Unknown command '$COMMAND'${NC}" - echo "" - usage - ;; -esac - -echo "" -echo -e "${GREEN}Done!${NC}" \ No newline at end of file diff --git a/tests/tools/run_tests.py b/tests/tools/run_tests.py index 77ca6a3..b6e3afc 100755 --- a/tests/tools/run_tests.py +++ b/tests/tools/run_tests.py @@ -72,6 +72,7 @@ def _find_compiler(self) -> Path: """Find the GS2 compiler executable""" possible_paths = [ self.project_root / "bin" / "gs2test", + self.project_root / "build" / "bin" / "gs2test", self.project_root / "build" / "gs2test", self.project_root / "build" / "Debug" / "gs2test", self.project_root / "build" / "Release" / "gs2test", From b1579926d5ee44ead6879f7d803a1a35e266d170 Mon Sep 17 00:00:00 2001 From: joey <1166538+xtjoeytx@users.noreply.github.com> Date: Sat, 7 Feb 2026 16:23:20 -0500 Subject: [PATCH 2/7] Feature/cmake fetchcontent (#29) * arena allocator for ast node allocations & change directory structure * cmake changes * fix gs2test location * Attempt to fix windows build * ^ * ^ * ^ * package fix attempt * Fix rust build * Remove fmtlib dependency * cmake changes * fix osx? * ^ * ^ * ^ * ^ * Remove submodule winflexbison --- .gitmodules | 3 - CMakeLists.txt | 271 ++++++++++++++++++++------------------ dependencies/winflexbison | 1 - 3 files changed, 144 insertions(+), 131 deletions(-) delete mode 160000 dependencies/winflexbison diff --git a/.gitmodules b/.gitmodules index 0445495..a7a569e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "dependencies/winflexbison"] - path = dependencies/winflexbison - url = https://github.com/lexxmark/winflexbison.git [submodule "dependencies/emsdk"] path = dependencies/emsdk url = https://github.com/emscripten-core/emsdk.git diff --git a/CMakeLists.txt b/CMakeLists.txt index ec63432..8e06367 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,44 +1,54 @@ -cmake_minimum_required(VERSION 3.14) +cmake_minimum_required(VERSION 3.28) project(gs2parser VERSION 1.0) include(GenerateExportHeader) +set(CMAKE_CXX_SCAN_FOR_MODULES OFF) -set(CMAKE_DEBUG_POSTFIX _d) +if(PROJECT_IS_TOP_LEVEL) + set(CMAKE_DEBUG_POSTFIX _d) + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(BIN_DIR "bin" CACHE STRING "Binary output directory") + set(BIN_DIR "bin" CACHE STRING "Binary output directory") -# specify the C++ standard -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED True) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) + # Set up output directories in the build tree + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${BIN_DIR}) -# Set up output directories in the build tree -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${BIN_DIR}) + # Second, for multi-config builds (e.g. msvc) + foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${BIN_DIR}) + endforeach() -# Second, for multi-config builds (e.g. msvc) -foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} ) - string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG ) - set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/lib ) - set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/lib ) - set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${BIN_DIR} ) -endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES ) - -if(WIN32 OR APPLE) - set(CMAKE_SHARED_LIBRARY_PREFIX "") - set(CMAKE_STATIC_LIBRARY_PREFIX "lib") -endif() - -if(APPLE) - set(CMAKE_OSX_DEPLOYMENT_TARGET "13.3") + if(APPLE) + set(CMAKE_OSX_DEPLOYMENT_TARGET "13.3") + endif() endif() if(WIN32 AND NOT MINGW) - execute_process(COMMAND ${CMAKE_COMMAND} -S${CMAKE_CURRENT_SOURCE_DIR}/dependencies/winflexbison -B${CMAKE_CURRENT_SOURCE_DIR}/dependencies/winflexbison/build-winflex-bison -GNinja -DCMAKE_BUILD_TYPE=Release) - execute_process(COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/winflexbison/build-winflex-bison --parallel 8) - LIST(APPEND CMAKE_PROGRAM_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/winflexbison/bin/Release) + include(FetchContent) + FetchContent_Declare(winflexbison + GIT_REPOSITORY https://github.com/lexxmark/winflexbison.git + GIT_TAG 2040672b690523e6a5b2e51480d90132a39d4c76 + ) + FetchContent_Populate(winflexbison) + execute_process( + COMMAND ${CMAKE_COMMAND} + -S ${winflexbison_SOURCE_DIR} + -B ${winflexbison_BINARY_DIR} + -G Ninja + -DCMAKE_BUILD_TYPE=Release + ) + execute_process( + COMMAND ${CMAKE_COMMAND} + --build ${winflexbison_BINARY_DIR} + --parallel + ) + list(APPEND CMAKE_PROGRAM_PATH ${winflexbison_SOURCE_DIR}/bin/Release) set(FLEX_FLAGS "--wincompat") -endif(WIN32 AND NOT MINGW) +endif() find_package(BISON 3.4 REQUIRED) find_package(FLEX REQUIRED) @@ -48,84 +58,96 @@ FLEX_TARGET(GS2Scanner src/parser/gs2scanner.l ${CMAKE_CURRENT_BINARY_DIR}/lex.y ADD_FLEX_BISON_DEPENDENCY(GS2Scanner GS2Parser) set(SOURCES - # AST - src/ast/ast.cpp + # AST + src/ast/ast.cpp - # Encoding - src/encoding/buffer.cpp + # Encoding + src/encoding/buffer.cpp - # Codegen - src/codegen/GS2Bytecode.cpp + # Codegen + src/codegen/GS2Bytecode.cpp - # Compiler - src/compiler/GS2BuiltInFunctions.cpp - src/compiler/GS2CompilerVisitor.cpp - src/compiler/GS2Context.cpp + # Compiler + src/compiler/GS2BuiltInFunctions.cpp + src/compiler/GS2CompilerVisitor.cpp + src/compiler/GS2Context.cpp - # Parser - src/parser/Parser.cpp - ${BISON_GS2Parser_OUTPUTS} - ${FLEX_GS2Scanner_OUTPUTS} + # Parser + src/parser/Parser.cpp + ${BISON_GS2Parser_OUTPUTS} + ${FLEX_GS2Scanner_OUTPUTS} ) set(HEADERS - # AST - src/ast/ast.h - src/ast/expressiontypes.h - src/ast/NodeVisitor.h - - # Encoding - src/encoding/buffer.h - src/encoding/graalencoding.h - - # Codegen - src/codegen/GS2Bytecode.h - - # Compiler - src/compiler/GS2BuiltInFunctions.h - src/compiler/GS2CompilerVisitor.h - src/compiler/GS2Context.h - - # Parser - src/parser/Parser.h - ${BISON_GS2Parser_INPUT} - ${FLEX_GS2Scanner_INPUT} - - # Memory - src/memory/ArenaAllocator.h - - # Visitors - src/visitors/ASTNodeVisitor.h - src/visitors/FunctionInspectVisitor.h - src/visitors/GS2SourceVisitor.h - - # Utils / Misc - src/CompilerThreadJob.h - src/exceptions/GS2CompilerError.h - src/opcodes.h - src/utils/ContextThreadPool.h - src/utils/EventHandler.h + # AST + src/ast/ast.h + src/ast/expressiontypes.h + src/ast/NodeVisitor.h + + # Encoding + src/encoding/buffer.h + src/encoding/graalencoding.h + + # Codegen + src/codegen/GS2Bytecode.h + + # Compiler + src/compiler/GS2BuiltInFunctions.h + src/compiler/GS2CompilerVisitor.h + src/compiler/GS2Context.h + + # Parser + src/parser/Parser.h + ${BISON_GS2Parser_INPUT} + ${FLEX_GS2Scanner_INPUT} + + # Memory + src/memory/ArenaAllocator.h + + # Visitors + src/visitors/ASTNodeVisitor.h + src/visitors/FunctionInspectVisitor.h + src/visitors/GS2SourceVisitor.h + + # Utils / Misc + src/CompilerThreadJob.h + src/exceptions/GS2CompilerError.h + src/opcodes.h + src/utils/ContextThreadPool.h + src/utils/EventHandler.h ) set(SOURCES_ALL ${SOURCES} ${HEADERS}) -# Use standard BUILD_SHARED_LIBS; Emscripten doesn't support shared libs +option(BUILD_SHARED_LIBS "Build shared libraries" ON) if(EMSCRIPTEN) - set(BUILD_SHARED_LIBS OFF) + set(BUILD_SHARED_LIBS OFF CACHE BOOL "Emscripten doesn't support shared libs" FORCE) endif() -option(BUILD_SHARED_LIBS "Build shared libraries" ON) add_library(gs2compiler ${SOURCES_ALL} bindings/c/c_interface.cpp) +add_library(gs2parser::gs2compiler ALIAS gs2compiler) generate_export_header(gs2compiler - BASE_NAME GS2COMPILER - EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/gs2compiler_export.h + BASE_NAME GS2COMPILER + EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/gs2compiler_export.h ) +target_compile_features(gs2compiler PUBLIC cxx_std_23) +set_target_properties(gs2compiler PROPERTIES + POSITION_INDEPENDENT_CODE ON + CXX_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON +) +if(WIN32 OR APPLE) + if(BUILD_SHARED_LIBS) + set_target_properties(gs2compiler PROPERTIES PREFIX "") + endif() +endif() + target_include_directories(gs2compiler - PUBLIC + PUBLIC $ $ - PRIVATE + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/parser ${CMAKE_CURRENT_SOURCE_DIR}/src/codegen ${CMAKE_CURRENT_SOURCE_DIR}/src/compiler @@ -141,17 +163,21 @@ if(WIN32 AND MINGW) target_compile_options(gs2compiler PRIVATE "-fno-rtti") endif() -if(EMSCRIPTEN) - add_executable(gs2test bindings/js/js_interface.cpp) - set_target_properties(gs2test PROPERTIES LINK_FLAGS "--embind-emit-tsd=gs2test.d.ts -s ENVIRONMENT=web -s DYNAMIC_EXECUTION=0 -s SINGLE_FILE=1 -s MODULARIZE -s 'EXPORT_NAME=GS2Compiler' --bind") -else() - add_executable(gs2test src/main.cpp) +option(GS2PARSER_BUILD_GS2TEST "Build gs2test executable" ${PROJECT_IS_TOP_LEVEL}) + +if(GS2PARSER_BUILD_GS2TEST) + if(EMSCRIPTEN) + add_executable(gs2test bindings/js/js_interface.cpp) + set_target_properties(gs2test PROPERTIES LINK_FLAGS "--embind-emit-tsd=gs2test.d.ts -s ENVIRONMENT=web -s DYNAMIC_EXECUTION=0 -s SINGLE_FILE=1 -s MODULARIZE -s 'EXPORT_NAME=GS2Compiler' --bind") + else() + add_executable(gs2test src/main.cpp) + endif() + target_link_libraries(gs2test PRIVATE gs2compiler) endif() -target_link_libraries(gs2test PRIVATE gs2compiler) # Test suite integration # Only configure tests if this is the main project (not a subproject) -if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) +if(PROJECT_IS_TOP_LEVEL) # Enable testing enable_testing() @@ -163,60 +189,51 @@ if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/tests/outputs) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/tests/reports) - # Custom target: Run all tests with verbose output - add_custom_target(run-tests - COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/tools/run_tests.py + set(TEST_RUNNER_CMD + ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/tools/run_tests.py --project-root ${CMAKE_CURRENT_SOURCE_DIR} --scripts-dir ${CMAKE_CURRENT_SOURCE_DIR}/tests/scripts --baselines-dir ${CMAKE_CURRENT_SOURCE_DIR}/tests/baselines --output-dir ${CMAKE_BINARY_DIR}/tests/outputs --reports-dir ${CMAKE_BINARY_DIR}/tests/reports - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Running test suite" - DEPENDS gs2test + ) + + add_custom_target(run-tests + COMMAND ${TEST_RUNNER_CMD} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Running test suite" + DEPENDS gs2test ) # Custom target: Generate/update baselines add_custom_target(test-baselines - COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/tools/run_tests.py - --project-root ${CMAKE_CURRENT_SOURCE_DIR} - --scripts-dir ${CMAKE_CURRENT_SOURCE_DIR}/tests/scripts - --baselines-dir ${CMAKE_CURRENT_SOURCE_DIR}/tests/baselines - --output-dir ${CMAKE_BINARY_DIR}/tests/outputs - --reports-dir ${CMAKE_BINARY_DIR}/tests/reports - --update-baselines - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating test baselines" - DEPENDS gs2test + COMMAND ${TEST_RUNNER_CMD} --update-baselines + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating test baselines" + DEPENDS gs2test ) # Custom target: Clean test artifacts add_custom_target(test-clean - COMMAND ${CMAKE_COMMAND} -E rm -rf ${CMAKE_BINARY_DIR}/tests/outputs - COMMAND ${CMAKE_COMMAND} -E rm -rf ${CMAKE_BINARY_DIR}/tests/reports - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/tests/outputs - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/tests/reports - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Cleaning test artifacts" + COMMAND ${CMAKE_COMMAND} -E rm -rf ${CMAKE_BINARY_DIR}/tests/outputs + COMMAND ${CMAKE_COMMAND} -E rm -rf ${CMAKE_BINARY_DIR}/tests/reports + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/tests/outputs + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/tests/reports + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Cleaning test artifacts" ) # CTest integration for CI/CD add_test( - NAME regression_tests - COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/tools/run_tests.py - --project-root ${CMAKE_CURRENT_SOURCE_DIR} - --scripts-dir ${CMAKE_CURRENT_SOURCE_DIR}/tests/scripts - --baselines-dir ${CMAKE_CURRENT_SOURCE_DIR}/tests/baselines - --output-dir ${CMAKE_BINARY_DIR}/tests/outputs - --reports-dir ${CMAKE_BINARY_DIR}/tests/reports - --quiet - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + NAME regression_tests + COMMAND ${TEST_RUNNER_CMD} --quiet + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) # Set test properties set_tests_properties(regression_tests PROPERTIES - TIMEOUT 60 - FAIL_REGULAR_EXPRESSION "Regressions detected" + TIMEOUT 60 + FAIL_REGULAR_EXPRESSION "Regressions detected" ) message(STATUS "Test suite configured") diff --git a/dependencies/winflexbison b/dependencies/winflexbison deleted file mode 160000 index 9118533..0000000 --- a/dependencies/winflexbison +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 911853359017d3e817d638a0de18881eb7960de9 From 43ae0e4076ac30429e825412508ffc477b9ed205 Mon Sep 17 00:00:00 2001 From: joey <1166538+xtjoeytx@users.noreply.github.com> Date: Sat, 7 Feb 2026 16:50:58 -0500 Subject: [PATCH 3/7] fix merge (#31) --- CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0803c0f..8e06367 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,7 +142,6 @@ if(WIN32 OR APPLE) set_target_properties(gs2compiler PROPERTIES PREFIX "") endif() endif() -option(BUILD_SHARED_LIBS "Build shared libraries" ON) target_include_directories(gs2compiler PUBLIC @@ -175,7 +174,6 @@ if(GS2PARSER_BUILD_GS2TEST) endif() target_link_libraries(gs2test PRIVATE gs2compiler) endif() -target_link_libraries(gs2test PRIVATE gs2compiler) # Test suite integration # Only configure tests if this is the main project (not a subproject) From 6a93fb1fc3e27301df5674ba9fedd01d692823b1 Mon Sep 17 00:00:00 2001 From: joey <1166538+xtjoeytx@users.noreply.github.com> Date: Sun, 22 Feb 2026 22:36:58 -0500 Subject: [PATCH 4/7] Bunch of memory leak fixes (lack of calling destructor), reduced new usage in parser, and refactored built-ins --- src/ast/ast.h | 14 +-- src/compiler/GS2BuiltInFunctions.cpp | 140 ++++++++++++++------------- src/compiler/GS2BuiltInFunctions.h | 48 ++------- src/compiler/GS2CompilerVisitor.cpp | 12 +-- src/compiler/GS2CompilerVisitor.h | 4 +- src/compiler/GS2Context.cpp | 3 +- src/compiler/GS2Context.h | 2 - src/memory/ArenaAllocator.h | 30 +++++- src/parser/Parser.cpp | 1 - src/parser/gs2parser.y | 19 ++-- 10 files changed, 127 insertions(+), 146 deletions(-) diff --git a/src/ast/ast.h b/src/ast/ast.h index 9d539af..c419d65 100644 --- a/src/ast/ast.h +++ b/src/ast/ast.h @@ -253,7 +253,6 @@ class ExpressionArrayIndexNode : public ExpressionNode if (list) { exprList = std::move(*list); - delete list; } for (const auto& expr : exprList) @@ -523,7 +522,6 @@ class ExpressionFnCallNode : public ExpressionNode if (argList) { args = std::move(*argList); - delete argList; } takeOwnership(funcExpr, objExpr); @@ -566,7 +564,6 @@ class ExpressionNewArrayNode : public ExpressionNode if (dim) { dimensions = std::move(*dim); - delete dim; } } @@ -596,7 +593,6 @@ class ExpressionNewObjectNode : public ExpressionNode if (argList) { args = std::move(*argList); - delete argList; } takeOwnership(newExpr); @@ -628,7 +624,6 @@ class ExpressionListNode : public ExpressionNode if (argList) { args = std::move(*argList); - delete argList; } for (const auto& node : args) @@ -701,7 +696,6 @@ class StatementFnDeclNode : public StatementNode if (argList) { args = std::move(*argList); - delete argList; } takeOwnership(stmtBlock); @@ -731,7 +725,6 @@ class StatementNewNode : public StatementNode if (argList) { args = std::move(*argList); - delete argList; } takeOwnership(stmtBlock); @@ -899,7 +892,6 @@ class StatementSwitchNode : public StatementNode if (caseNodes) { cases = std::move(*caseNodes); - delete caseNodes; } takeOwnership(expr); @@ -943,11 +935,7 @@ class EnumList addMember(member); } - ~EnumList() - { - for (const auto& n : members) - delete n; - } + ~EnumList() = default; void addMember(EnumMember *member); diff --git a/src/compiler/GS2BuiltInFunctions.cpp b/src/compiler/GS2BuiltInFunctions.cpp index e80ec26..3179b38 100644 --- a/src/compiler/GS2BuiltInFunctions.cpp +++ b/src/compiler/GS2BuiltInFunctions.cpp @@ -1,3 +1,5 @@ +#include +#include #include "GS2BuiltInFunctions.h" // Signature characters: [return][...params] @@ -7,294 +9,298 @@ // o -> OP_CONV_TO_OBJECT // s -> OP_CONV_TO_STRING -const BuiltInCmd builtInCmds[] = { - { +template +consteval std::array sortByName(std::array arr) +{ + std::ranges::sort(arr, [](const BuiltInCmd& a, const BuiltInCmd& b) { + return a.name < b.name; + }); + return arr; +} + +static constexpr auto builtInCmds = sortByName(std::array{ + BuiltInCmd{ .name = "sleep", .op = opcode::OP_SLEEP, .flags = CMD_NOOPT, .sig = "-f", }, - { + BuiltInCmd{ .name = "sin", .op = opcode::OP_SIN, .sig = "ff" }, - { + BuiltInCmd{ .name = "char", .op = opcode::OP_CHAR, .sig = "ff" }, - { + BuiltInCmd{ .name = "cos", .op = opcode::OP_COS, .sig = "ff" }, - { + BuiltInCmd{ .name = "arctan", .op = opcode::OP_ARCTAN, .sig = "ff" }, - { + BuiltInCmd{ .name = "vecx", .op = opcode::OP_VECX, .sig = "ff" }, - { + BuiltInCmd{ .name = "vecy", .op = opcode::OP_VECY, .sig = "ff" }, - { + BuiltInCmd{ .name = "abs", .op = opcode::OP_ABS, .sig = "ff" }, - { + BuiltInCmd{ .name = "exp", .op = opcode::OP_EXP, .sig = "ff" }, - { + BuiltInCmd{ .name = "log", .op = opcode::OP_LOG, .sig = "fff" }, - { + BuiltInCmd{ .name = "min", .op = opcode::OP_MIN, .sig = "fff" }, - { + BuiltInCmd{ .name = "max", .op = opcode::OP_MAX, .sig = "fff" }, - { + BuiltInCmd{ .name = "pow", .op = opcode::OP_POW, .flags = CMD_RETURN_VALUE, .sig = "fff" }, - { + BuiltInCmd{ .name = "random", .op = opcode::OP_RANDOM, .sig = "fff" }, - { + BuiltInCmd{ .name = "arraylen", .op = opcode::OP_OBJ_SIZE, .sig = "fo" }, - { + BuiltInCmd{ .name = "sarraylen", .op = opcode::OP_OBJ_SIZE, .sig = "fo" }, - { + BuiltInCmd{ .name = "setarray", .op = opcode::OP_SETARRAY, .flags = CmdFlags::CMD_NOOPT, .sig = "-of" }, - { + BuiltInCmd{ .name = "getangle", .op = opcode::OP_GETANGLE, .flags = CMD_RETURN_VALUE, .sig = "fff" }, - { + BuiltInCmd{ .name = "getdir", .op = opcode::OP_GETDIR, .flags = CMD_RETURN_VALUE, .sig = "fff" }, - { + BuiltInCmd{ .name = "waitfor", .op = opcode::OP_WAITFOR, .flags = CMD_RETURN_VALUE, .sig = "xssf" }, - { + BuiltInCmd{ .name = "format", .op = opcode::OP_FORMAT, .flags = CMD_USE_ARRAY | CMD_REVERSE_ARGS | CMD_RETURN_VALUE, .sig = "xs" }, - { + BuiltInCmd{ .name = "makevar", .op = opcode::OP_MAKEVAR, .convert_object_op = opcode::OP_CONV_TO_STRING, .sig = "s" } -}; +}); -const BuiltInCmd builtInObjCmds[] = { - { +static constexpr auto builtInObjCmds = sortByName(std::array{ + BuiltInCmd{ .name = "index", .op = opcode::OP_OBJ_INDEX, .convert_object_op = opcode::OP_CONV_TO_OBJECT, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_RETURN_VALUE, .sig = "fx" }, - - { + BuiltInCmd{ .name = "type", .op = opcode::OP_OBJ_TYPE, .convert_object_op = opcode::OP_CONV_TO_OBJECT }, - - { + BuiltInCmd{ .name = "indices", .op = opcode::OP_OBJ_INDICES }, - - { + BuiltInCmd{ .name = "link", .op = opcode::OP_OBJ_LINK }, - - { + BuiltInCmd{ .name = "trim", .op = opcode::OP_OBJ_TRIM, .convert_object_op = opcode::OP_CONV_TO_STRING }, - - { + BuiltInCmd{ .name = "length", .op = opcode::OP_OBJ_LENGTH, .convert_object_op = opcode::OP_CONV_TO_STRING }, - - { + BuiltInCmd{ .name = "pos", .op = opcode::OP_OBJ_POS, .convert_object_op = opcode::OP_CONV_TO_STRING, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_RETURN_VALUE, .sig = "fs" }, - - { + BuiltInCmd{ .name = "charat", .op = opcode::OP_OBJ_CHARAT, .convert_object_op = opcode::OP_CONV_TO_STRING, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_RETURN_VALUE, .sig = "sf" }, - - { + BuiltInCmd{ .name = "substring", .op = opcode::OP_OBJ_SUBSTR, .convert_object_op = opcode::OP_CONV_TO_STRING, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_RETURN_VALUE, .sig = "sff" }, - - { + BuiltInCmd{ .name = "starts", .op = opcode::OP_OBJ_STARTS, .convert_object_op = opcode::OP_CONV_TO_STRING, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_RETURN_VALUE, }, - - { + BuiltInCmd{ .name = "ends", .op = opcode::OP_OBJ_ENDS, .convert_object_op = opcode::OP_CONV_TO_STRING, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_RETURN_VALUE, }, - - { + BuiltInCmd{ .name = "tokenize", .op = opcode::OP_OBJ_TOKENIZE, .convert_object_op = opcode::OP_CONV_TO_STRING, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_RETURN_VALUE, }, - - { + BuiltInCmd{ .name = "positions", .op = opcode::OP_OBJ_POSITIONS, .convert_object_op = opcode::OP_CONV_TO_STRING, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_RETURN_VALUE, .sig = "os" }, - - { + BuiltInCmd{ .name = "size", .op = opcode::OP_OBJ_SIZE, .convert_object_op = opcode::OP_CONV_TO_OBJECT }, - { + BuiltInCmd{ .name = "subarray", .op = opcode::OP_OBJ_SUBARRAY }, - { + BuiltInCmd{ .name = "clear", .op = opcode::OP_OBJ_CLEAR, .convert_object_op = opcode::OP_CONV_TO_OBJECT, .flags = CmdFlags::CMD_NOOPT, }, - { + BuiltInCmd{ .name = "add", .op = opcode::OP_OBJ_ADDSTRING, .convert_object_op = opcode::OP_CONV_TO_OBJECT, .flags = CmdFlags::CMD_OBJECT_FIRST, }, - { + BuiltInCmd{ .name = "delete", .op = opcode::OP_OBJ_DELETESTRING, .convert_object_op = opcode::OP_CONV_TO_OBJECT, .flags = CmdFlags::CMD_OBJECT_FIRST, }, - { + BuiltInCmd{ .name = "insert", .op = opcode::OP_OBJ_INSERTSTRING, .convert_object_op = opcode::OP_CONV_TO_OBJECT, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_REVERSE_ARGS, }, - { + BuiltInCmd{ .name = "remove", .op = opcode::OP_OBJ_REMOVESTRING, .convert_object_op = opcode::OP_CONV_TO_OBJECT, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_REVERSE_ARGS, }, - { + BuiltInCmd{ .name = "replace", .op = opcode::OP_OBJ_REPLACESTRING, .convert_object_op = opcode::OP_CONV_TO_OBJECT, .flags = CmdFlags::CMD_OBJECT_FIRST | CmdFlags::CMD_REVERSE_ARGS, }, -}; +}); -GS2BuiltInFunctions GS2BuiltInFunctions::getBuiltIn() +template +constexpr const BuiltInCmd* findIn(const std::array& table, std::string_view name) { - GS2BuiltInFunctions functions; + auto it = std::ranges::lower_bound(table, name, std::less<>{}, &BuiltInCmd::name); - for (const auto& cmd : builtInCmds) - functions.builtInCmdMap.insert({ cmd.name, cmd }); + if (it != table.end() && it->name == name) + return &*it; - for (const auto& cmd : builtInObjCmds) - functions.builtInObjMap.insert({ cmd.name, cmd }); + return nullptr; +} - return functions; +const BuiltInCmd* findBuiltInCmd(std::string_view name) +{ + return findIn(builtInCmds, name); +} + +const BuiltInCmd* findBuiltInObjCmd(std::string_view name) +{ + return findIn(builtInObjCmds, name); } diff --git a/src/compiler/GS2BuiltInFunctions.h b/src/compiler/GS2BuiltInFunctions.h index 02fdee8..7d17aa1 100644 --- a/src/compiler/GS2BuiltInFunctions.h +++ b/src/compiler/GS2BuiltInFunctions.h @@ -3,9 +3,8 @@ #ifndef GS2BUILTINFUNCTIONS_H #define GS2BUILTINFUNCTIONS_H -#include +#include #include -#include #include "opcodes.h" enum CmdFlags @@ -17,62 +16,33 @@ enum CmdFlags CMD_OBJECT_FIRST = uint8_t(1 << 3) // Visit the object before you visit arguments (needed for setarray) }; -const uint8_t DEFAULT_CMD_FLAGS = CMD_USE_ARRAY | CMD_REVERSE_ARGS | CMD_RETURN_VALUE; -const uint8_t DEFAULT_OBJ_CMD_FLAGS = CMD_USE_ARRAY | CMD_REVERSE_ARGS | CMD_RETURN_VALUE; +constexpr uint8_t DEFAULT_CMD_FLAGS = CMD_USE_ARRAY | CMD_REVERSE_ARGS | CMD_RETURN_VALUE; +constexpr uint8_t DEFAULT_OBJ_CMD_FLAGS = CMD_USE_ARRAY | CMD_REVERSE_ARGS | CMD_RETURN_VALUE; struct BuiltInCmd { - std::string name; // Function Name + std::string_view name; // Function Name opcode::Opcode op; // Op-code for built in command, or OP_CALL opcode::Opcode convert_object_op{ opcode::OP_NONE }; // Convert object to this type [used for object.call() functions] uint8_t flags = (CMD_REVERSE_ARGS | CMD_RETURN_VALUE); // See above for cmd options - std::string sig; + std::string_view sig; }; -const BuiltInCmd defaultCall = { +constexpr BuiltInCmd defaultCall = { "", opcode::OP_CALL, opcode::OP_NONE, DEFAULT_CMD_FLAGS }; -const BuiltInCmd defaultObjCall = { +constexpr BuiltInCmd defaultObjCall = { "", opcode::OP_CALL, opcode::OP_CONV_TO_OBJECT, DEFAULT_OBJ_CMD_FLAGS }; -struct GS2BuiltInFunctions -{ - std::unordered_map builtInCmdMap; - std::unordered_map builtInObjMap; - - GS2BuiltInFunctions() { } - - GS2BuiltInFunctions(GS2BuiltInFunctions&& o) noexcept; - GS2BuiltInFunctions(const GS2BuiltInFunctions&) = delete; - - GS2BuiltInFunctions& operator= (GS2BuiltInFunctions&& o) noexcept; - GS2BuiltInFunctions& operator= (const GS2BuiltInFunctions&) = delete; - - static GS2BuiltInFunctions getBuiltIn(); -}; - -inline GS2BuiltInFunctions& GS2BuiltInFunctions::operator=(GS2BuiltInFunctions&& o) noexcept -{ - if (this != &o) - { - builtInCmdMap = std::move(o.builtInCmdMap); - builtInObjMap = std::move(o.builtInObjMap); - } - - return *this; -} - -inline GS2BuiltInFunctions::GS2BuiltInFunctions(GS2BuiltInFunctions&& o) noexcept -{ - *this = std::move(o); -} +const BuiltInCmd* findBuiltInCmd(std::string_view name); +const BuiltInCmd* findBuiltInObjCmd(std::string_view name); #endif diff --git a/src/compiler/GS2CompilerVisitor.cpp b/src/compiler/GS2CompilerVisitor.cpp index 8e5436b..025df70 100644 --- a/src/compiler/GS2CompilerVisitor.cpp +++ b/src/compiler/GS2CompilerVisitor.cpp @@ -5,6 +5,7 @@ #include "ast/ast.h" #include "visitors/FunctionInspectVisitor.h" #include "compiler/GS2CompilerVisitor.h" +#include "compiler/GS2BuiltInFunctions.h" #include "parser/Parser.h" opcode::Opcode getExpressionOpCode(ExpressionOp op) @@ -49,8 +50,8 @@ opcode::Opcode getExpressionOpCode(ExpressionOp op) } } -GS2CompilerVisitor::GS2CompilerVisitor(ParserContext & context, GS2BuiltInFunctions & builtin) - : parserContext(context), builtIn(builtin), +GS2CompilerVisitor::GS2CompilerVisitor(ParserContext & context) + : parserContext(context), _isCopyAssignment(false), _isInlineConditional(true), _isInsideExpression(false), _newObjectCount(0) { fail_label = success_label = exit_label = createLabel(); @@ -832,16 +833,15 @@ void GS2CompilerVisitor::Visit(ExpressionFnCallNode *node) { auto isObjectCall = (node->objExpr != nullptr); - // Build-in commands - auto& cmdList = (isObjectCall ? builtIn.builtInObjMap : builtIn.builtInCmdMap); + // Built-in commands std::string funcName = node->funcExpr->toString(); #ifdef DBGEMITTERS printf("Call Function: %s (obj call: %d)\n", funcName.c_str(), isObjectCall ? 1 : 0); #endif - auto iter = cmdList.find(funcName); - BuiltInCmd cmd = (iter != cmdList.end() ? iter->second : (isObjectCall ? defaultObjCall : defaultCall)); + const BuiltInCmd* found = isObjectCall ? findBuiltInObjCmd(funcName) : findBuiltInCmd(funcName); + BuiltInCmd cmd = found ? *found : (isObjectCall ? defaultObjCall : defaultCall); { auto argumentVisitFn = [&](auto arg_iter, auto arg_iter_end, auto sig_iter, auto sig_iter_end) { diff --git a/src/compiler/GS2CompilerVisitor.h b/src/compiler/GS2CompilerVisitor.h index 504db0f..2b7aea6 100644 --- a/src/compiler/GS2CompilerVisitor.h +++ b/src/compiler/GS2CompilerVisitor.h @@ -9,7 +9,6 @@ #include #include "ast/NodeVisitor.h" #include "GS2Bytecode.h" -#include "GS2BuiltInFunctions.h" class ParserContext; @@ -19,7 +18,7 @@ class GS2CompilerVisitor : public NodeVisitor using jmp_address = uint32_t; public: - GS2CompilerVisitor(ParserContext& context, GS2BuiltInFunctions& builtin); + GS2CompilerVisitor(ParserContext& context); Buffer getByteCode(); const std::set& getJoinedClasses() const; @@ -62,7 +61,6 @@ class GS2CompilerVisitor : public NodeVisitor private: GS2Bytecode byteCode; ParserContext& parserContext; - GS2BuiltInFunctions& builtIn; std::set joinedClasses; bool _isCopyAssignment; diff --git a/src/compiler/GS2Context.cpp b/src/compiler/GS2Context.cpp index 464a14b..475633e 100644 --- a/src/compiler/GS2Context.cpp +++ b/src/compiler/GS2Context.cpp @@ -8,7 +8,6 @@ GS2Context::GS2Context() : errorService([this](auto && PH1) { handleError(std::forward(PH1)); }) { - builtIn = GS2BuiltInFunctions::getBuiltIn(); } void GS2Context::handleError(GS2CompilerError& error) @@ -33,7 +32,7 @@ CompilerResponse GS2Context::compile(const std::string& script) if (stmtBlock) { // Walk the AST tree to produce bytecode - GS2CompilerVisitor compilerVisitor(parserContext, builtIn); + GS2CompilerVisitor compilerVisitor(parserContext); compilerVisitor.Visit(stmtBlock); return CompilerResponse{ diff --git a/src/compiler/GS2Context.h b/src/compiler/GS2Context.h index 8fb0699..31a6418 100644 --- a/src/compiler/GS2Context.h +++ b/src/compiler/GS2Context.h @@ -8,7 +8,6 @@ #include "gs2compiler_export.h" #include "encoding/buffer.h" #include "exceptions/GS2CompilerError.h" -#include "GS2BuiltInFunctions.h" struct CompilerResponse { @@ -32,7 +31,6 @@ class GS2COMPILER_EXPORT GS2Context static CompilerResponse Compile(const std::string& script, const std::string& scriptType, const std::string& scriptName, bool saveToDisk); private: - GS2BuiltInFunctions builtIn; GS2ErrorService errorService; std::vector errors; diff --git a/src/memory/ArenaAllocator.h b/src/memory/ArenaAllocator.h index c7ff882..7a354c0 100644 --- a/src/memory/ArenaAllocator.h +++ b/src/memory/ArenaAllocator.h @@ -5,8 +5,10 @@ #include #include +#include #include #include +#include template class ArenaAllocator { @@ -19,20 +21,25 @@ class ArenaAllocator { ArenaAllocator(ArenaAllocator&& other) noexcept : chunks_(std::move(other.chunks_)), + dtors_(std::move(other.dtors_)), current_(std::exchange(other.current_, nullptr)), remaining_(std::exchange(other.remaining_, 0)) { } ArenaAllocator& operator=(ArenaAllocator&& other) noexcept { if (this != &other) { + reset(); chunks_ = std::move(other.chunks_); + dtors_ = std::move(other.dtors_); current_ = std::exchange(other.current_, nullptr); remaining_ = std::exchange(other.remaining_, 0); } return *this; } - ~ArenaAllocator() = default; + ~ArenaAllocator() { + reset(); + } /** * Allocate and construct an object of type T @@ -45,13 +52,26 @@ class ArenaAllocator { template [[nodiscard]] T* allocate(Args&&... args) { void* ptr = allocate_raw(sizeof(T), alignof(T)); - return std::construct_at(static_cast(ptr), std::forward(args)...); + T* obj = std::construct_at(static_cast(ptr), std::forward(args)...); + + if constexpr (!std::is_trivially_destructible_v) { + dtors_.push_back(DtorRecord{ + obj, + [](void* p) noexcept { std::destroy_at(static_cast(p)); } + }); + } + + return obj; } /** * Reset the arena, freeing all allocated memory */ void reset() noexcept { + for (const auto& dtor : std::ranges::reverse_view(dtors_)) { + dtor.destroy(dtor.ptr); + } + dtors_.clear(); chunks_.clear(); current_ = nullptr; remaining_ = 0; @@ -76,6 +96,11 @@ class ArenaAllocator { } private: + struct DtorRecord { + void* ptr{}; + void (*destroy)(void*) noexcept = nullptr; + }; + /** * Represents a memory chunk */ @@ -113,6 +138,7 @@ class ArenaAllocator { } std::vector chunks_; + std::vector dtors_; std::byte* current_; size_t remaining_; }; diff --git a/src/parser/Parser.cpp b/src/parser/Parser.cpp index 413fa1a..8ca14db 100644 --- a/src/parser/Parser.cpp +++ b/src/parser/Parser.cpp @@ -156,7 +156,6 @@ void ParserContext::addEnum(EnumList *enumList, std::string prefix) } } - delete enumList; } void ParserContext::addConstant(const std::string& ident, ExpressionIdentifierNode *node) diff --git a/src/parser/gs2parser.y b/src/parser/gs2parser.y index 28d2149..804f345 100644 --- a/src/parser/gs2parser.y +++ b/src/parser/gs2parser.y @@ -132,9 +132,6 @@ typedef void* yyscan_t; // Destructors for allocated std vectors incase an error happens // during parsing before ownership is moved to the node -%destructor { delete $$; } -%destructor { delete $$; } -%destructor { delete $$; } %start program @@ -168,15 +165,15 @@ decl_enum: ; enum_list: - enum_item { $$ = new EnumList($1); } + enum_item { $$ = parser->alloc($1); } | enum_list ',' enum_item { $$ = $1; $1->addMember($3); } | enum_list error ',' { $$ = $1; parser->addParserError("missing comma in enum list"); } ; enum_item: - T_IDENTIFIER { $$ = new EnumMember($1); } - | T_IDENTIFIER '=' T_INT { $$ = new EnumMember($1, $3); } - | T_IDENTIFIER '=' '-' T_INT { $$ = new EnumMember($1, -$4); } + T_IDENTIFIER { $$ = parser->alloc($1); } + | T_IDENTIFIER '=' T_INT { $$ = parser->alloc($1, $3); } + | T_IDENTIFIER '=' '-' T_INT { $$ = parser->alloc($1, -$4); } ; stmt_list: @@ -261,7 +258,7 @@ stmt_switch: stmt_caseblock_list: stmt_caseblock_list stmt_caseblock { $$ = $1; $$->push_back(parser->popCaseExpr()); } - | stmt_caseblock { $$ = new std::vector(); $$->push_back(parser->popCaseExpr()); } + | stmt_caseblock { $$ = parser->alloc>(); $$->push_back(parser->popCaseExpr()); } ; stmt_case_options: @@ -290,8 +287,8 @@ expr_list_with_empty: expr_list: expr_list ',' expr { $1->push_back($3); } | expr_list ',' expr_functionobj { $1->push_back($3); } - | expr { $$ = new std::vector(); $$->reserve(12); $$->push_back($1); } - | expr_functionobj { $$ = new std::vector(); $$->reserve(12); $$->push_back($1); } + | expr { $$ = parser->alloc>(); $$->reserve(12); $$->push_back($1); } + | expr_functionobj { $$ = parser->alloc>(); $$->reserve(12); $$->push_back($1); } ; constant: @@ -443,7 +440,7 @@ array_idx: array_idx_list: array_idx_list array_idx { $$ = $1; $$->push_back($2); } - | array_idx { $$ = new std::vector(); $$->push_back($1); } + | array_idx { $$ = parser->alloc>(); $$->push_back($1); } ; expr_new: From d0686df99a80018e73b8ff6337cb5b9a8a15986e Mon Sep 17 00:00:00 2001 From: joey <1166538+xtjoeytx@users.noreply.github.com> Date: Sun, 22 Feb 2026 22:37:44 -0500 Subject: [PATCH 5/7] remove comments, forgot to stage --- src/parser/gs2parser.y | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/parser/gs2parser.y b/src/parser/gs2parser.y index 804f345..af066da 100644 --- a/src/parser/gs2parser.y +++ b/src/parser/gs2parser.y @@ -129,11 +129,6 @@ typedef void* yyscan_t; %type array_idx %type array_idx_list - - // Destructors for allocated std vectors incase an error happens - // during parsing before ownership is moved to the node - - %start program %% From 8e3595922c98680c91f48288708bbd874225934b Mon Sep 17 00:00:00 2001 From: joey <1166538+xtjoeytx@users.noreply.github.com> Date: Mon, 23 Feb 2026 11:53:43 -0500 Subject: [PATCH 6/7] Fix: Function declaration pre-jump targets wrong address MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Bug 1 — All pre-jumps pointed to end of script: Every function's OP_SET_INDEX pre-jump was deferred and patched in getByteCode() to the final opIndex. If top-level code appeared between function groups, it was silently skipped. - Bug 2 — Duplicate function names left unpatched jumps: When addFunction rejected a duplicate name, the second declaration's jmpLoc was discarded, leaving its OP_SET_INDEX targeting address 0. Test: Added functions/04_prejump_grouping.gs2 covering interleaved top-level code between function groups. This should fix issue #1 --- .gitignore | 1 + CMakeLists.txt | 6 +- src/ast/ast.h | 8 +- src/codegen/GS2Bytecode.cpp | 20 +- src/codegen/GS2Bytecode.h | 4 +- src/compiler/GS2CompilerVisitor.cpp | 537 ++++++++---------- src/compiler/GS2CompilerVisitor.h | 131 ++++- .../advanced/g2k1/weapon-Day-Night.bytecode | Bin 1894 -> 0 bytes .../advanced/g2k1/weapon-Staff_Boots.bytecode | Bin 1256 -> 0 bytes .../g2k1/weapon-Systems_Main.bytecode | Bin 134 -> 0 bytes .../advanced/g2k1/weaponApple Seeds.bytecode | Bin 619 -> 0 bytes .../advanced/g2k1/weaponBasket.bytecode | Bin 491 -> 0 bytes .../advanced/g2k1/weaponBread Stack.bytecode | Bin 752 -> 0 bytes .../advanced/g2k1/weaponCandies.bytecode | Bin 568 -> 0 bytes .../advanced/g2k1/weaponCatch Net.bytecode | Bin 640 -> 0 bytes .../advanced/g2k1/weaponDiamond Axe.bytecode | Bin 238 -> 0 bytes .../advanced/g2k1/weaponDiving.bytecode | Bin 241 -> 0 bytes .../advanced/g2k1/weaponDraisine.bytecode | Bin 3071 -> 0 bytes .../advanced/g2k1/weaponGold Axe.bytecode | Bin 317 -> 0 bytes .../advanced/g2k1/weaponGold Hammer.bytecode | Bin 234 -> 0 bytes .../g2k1/weaponHat-Trading-GS2.bytecode | Bin 2522 -> 0 bytes .../advanced/g2k1/weaponHat-Trading.bytecode | Bin 2523 -> 0 bytes .../advanced/g2k1/weaponMemeCentral.bytecode | Bin 268 -> 0 bytes .../advanced/g2k1/weaponMetal Axe.bytecode | Bin 319 -> 0 bytes .../advanced/g2k1/weaponMetal Hammer.bytecode | Bin 236 -> 0 bytes .../advanced/g2k1/weaponMining Bomb.bytecode | Bin 745 -> 0 bytes .../g2k1/weaponParticleEditor.bytecode | Bin 32127 -> 0 bytes .../g2k1/weaponRailroad Destroyer.bytecode | Bin 214 -> 0 bytes .../advanced/g2k1/weaponRoller.bytecode | Bin 368 -> 0 bytes .../advanced/g2k1/weaponRope.bytecode | Bin 90 -> 0 bytes .../advanced/g2k1/weaponShovel.bytecode | Bin 786 -> 0 bytes .../advanced/g2k1/weaponSkip.bytecode | Bin 90 -> 0 bytes .../advanced/g2k1/weaponSpin.bytecode | Bin 630 -> 0 bytes .../advanced/g2k1/weaponTestGS2.bytecode | Bin 493 -> 0 bytes .../advanced/g2k1/weaponTorch.bytecode | Bin 266 -> 0 bytes .../advanced/g2k1/weaponTrading Item.bytecode | Bin 3052 -> 0 bytes .../advanced/g2k1/weaponViolin.bytecode | Bin 493 -> 0 bytes .../advanced/g2k1/weaponWater Can.bytecode | Bin 749 -> 0 bytes .../g2k1/weaponWooden Hammer.bytecode | Bin 234 -> 0 bytes .../advanced/g2k1/weapongxtest.bytecode | Bin 9478 -> 0 bytes .../advanced/g2k1/weaponjoey_test.bytecode | Bin 1436 -> 0 bytes .../graalx/weapon%045CarSystem.bytecode | Bin 5908 -> 0 bytes .../advanced/graalx/weapon%045CarSystem.json | 6 +- .../graalx/weapon%045Movement.bytecode | Bin 2946 -> 0 bytes .../advanced/graalx/weapon%045System.bytecode | Bin 9475 -> 0 bytes .../advanced/graalx/weapon+Ammo.bytecode | Bin 324 -> 0 bytes .../advanced/graalx/weapon+DogTag.bytecode | Bin 1631 -> 0 bytes .../advanced/graalx/weapon+Food.bytecode | Bin 394 -> 0 bytes .../advanced/graalx/weapon+Guns.bytecode | Bin 3885 -> 0 bytes .../graalx/weapon+Guns_Debug.bytecode | Bin 5953 -> 0 bytes .../advanced/graalx/weapon+Guns_Debug.json | 6 +- .../advanced/graalx/weapon+Guns_KuJi.bytecode | Bin 3051 -> 0 bytes .../advanced/graalx/weapon+Guns_M4.bytecode | Bin 3916 -> 0 bytes .../graalx/weapon+Guns_Shotgun.bytecode | Bin 3300 -> 0 bytes .../advanced/graalx/weapon+Hats.bytecode | Bin 652 -> 0 bytes .../advanced/graalx/weapon+Melee.bytecode | Bin 1256 -> 0 bytes .../advanced/graalx/weapon+Presents.bytecode | Bin 205 -> 0 bytes .../advanced/graalx/weapon+Seeds.bytecode | Bin 629 -> 0 bytes .../advanced/graalx/weapon-BizSystem.bytecode | Bin 3830 -> 0 bytes .../advanced/graalx/weapon-BuySys.bytecode | Bin 1921 -> 0 bytes .../advanced/graalx/weapon-DRescript.bytecode | Bin 38 -> 0 bytes .../advanced/graalx/weapon-Death.bytecode | Bin 2664 -> 0 bytes .../weapon-EraThingyForKinetaro.bytecode | Bin 38 -> 0 bytes .../advanced/graalx/weapon-Events.bytecode | Bin 2544 -> 0 bytes .../advanced/graalx/weapon-FoodSys.bytecode | Bin 38 -> 0 bytes .../advanced/graalx/weapon-Functions.bytecode | Bin 440 -> 0 bytes .../graalx/weapon-Gang Control.bytecode | Bin 4673 -> 0 bytes .../advanced/graalx/weapon-GangSys.bytecode | Bin 9797 -> 0 bytes .../advanced/graalx/weapon-GraalDB.bytecode | Bin 3031 -> 0 bytes .../advanced/graalx/weapon-Gravity.bytecode | Bin 836 -> 0 bytes .../advanced/graalx/weapon-Gui.bytecode | Bin 3206 -> 0 bytes .../advanced/graalx/weapon-HotelSys.bytecode | Bin 3904 -> 0 bytes .../graalx/weapon-Job Quests.bytecode | Bin 3475 -> 0 bytes .../advanced/graalx/weapon-Map.bytecode | Bin 4537 -> 0 bytes .../advanced/graalx/weapon-Minimap.bytecode | Bin 38 -> 0 bytes .../advanced/graalx/weapon-Movement.bytecode | Bin 2979 -> 0 bytes .../advanced/graalx/weapon-Movement2.bytecode | Bin 6953 -> 0 bytes .../advanced/graalx/weapon-NBuySys.bytecode | Bin 1921 -> 0 bytes .../graalx/weapon-NewGangSys.bytecode | Bin 961 -> 0 bytes .../graalx/weapon-NewMovement.bytecode | Bin 2823 -> 0 bytes .../graalx/weapon-NewWeather.bytecode | Bin 265 -> 0 bytes .../advanced/graalx/weapon-News.bytecode | Bin 3665 -> 0 bytes .../advanced/graalx/weapon-Profile.bytecode | Bin 3153 -> 0 bytes .../advanced/graalx/weapon-QMenu.bytecode | Bin 7335 -> 0 bytes .../advanced/graalx/weapon-Shake.bytecode | Bin 292 -> 0 bytes .../advanced/graalx/weapon-Staff.bytecode | Bin 1086 -> 0 bytes .../advanced/graalx/weapon-Staff.json | 6 +- .../advanced/graalx/weapon-StaffTool.bytecode | Bin 1534 -> 0 bytes .../advanced/graalx/weapon-System.bytecode | Bin 9496 -> 0 bytes .../advanced/graalx/weapon-Vault.bytecode | Bin 3720 -> 0 bytes .../advanced/graalx/weapon-Virus.bytecode | Bin 717 -> 0 bytes .../advanced/graalx/weapon-Weather.bytecode | Bin 2287 -> 0 bytes .../graalx/weaponBackups_Radio.bytecode | Bin 1500 -> 0 bytes .../advanced/graalx/weaponBrasas.bytecode | Bin 1463 -> 0 bytes .../graalx/weaponEvents_Lazer.bytecode | Bin 1882 -> 0 bytes .../graalx/weaponEvents_Zombie.bytecode | Bin 1114 -> 0 bytes .../advanced/graalx/weaponFileEditor.bytecode | Bin 1849 -> 0 bytes .../graalx/weaponFrankie_Test.bytecode | Bin 38 -> 0 bytes .../graalx/weaponItems_ATM Card.bytecode | Bin 352 -> 0 bytes .../graalx/weaponItems_Body Armor.bytecode | Bin 38 -> 0 bytes .../graalx/weaponItems_Boots.bytecode | Bin 723 -> 0 bytes .../graalx/weaponItems_Chemicals.bytecode | Bin 225 -> 0 bytes .../graalx/weaponItems_Cure Virus.bytecode | Bin 223 -> 0 bytes .../graalx/weaponItems_Land Mine.bytecode | Bin 356 -> 0 bytes .../graalx/weaponItems_Medkit.bytecode | Bin 602 -> 0 bytes .../graalx/weaponItems_Suit Saver.bytecode | Bin 3368 -> 0 bytes .../graalx/weaponJobs_Fishing Rod.bytecode | Bin 3387 -> 0 bytes .../graalx/weaponJobs_Mining Axe.bytecode | Bin 1496 -> 0 bytes .../graalx/weaponJobs_Mining TNT.bytecode | Bin 464 -> 0 bytes .../graalx/weaponJobs_Roller.bytecode | Bin 547 -> 0 bytes .../advanced/graalx/weaponJobs_Seeds.bytecode | Bin 836 -> 0 bytes .../graalx/weaponJobs_Shovel.bytecode | Bin 1283 -> 0 bytes .../advanced/graalx/weaponJobs_Stack.bytecode | Bin 898 -> 0 bytes .../graalx/weaponJobs_Water Can.bytecode | Bin 1235 -> 0 bytes .../advanced/graalx/weaponKinetaro.bytecode | Bin 1813 -> 0 bytes .../advanced/graalx/weaponKuJi_Items.bytecode | Bin 1443 -> 0 bytes .../advanced/graalx/weaponKuJi_Staff.bytecode | Bin 2154 -> 0 bytes .../advanced/graalx/weaponKuJi_Tool.bytecode | Bin 1374 -> 0 bytes .../advanced/graalx/weaponKuJi_Tool.json | 6 +- .../graalx/weaponLevelEditor.bytecode | Bin 6737 -> 0 bytes .../advanced/graalx/weaponLevelGen.bytecode | Bin 63 -> 0 bytes .../advanced/graalx/weaponNotepad.bytecode | Bin 2599 -> 0 bytes .../graalx/weaponRC_AttributesWindow.bytecode | Bin 1431 -> 0 bytes .../graalx/weaponRC_NCControl.bytecode | Bin 3417 -> 0 bytes .../graalx/weaponRC_RightsWindow.bytecode | Bin 3257 -> 0 bytes .../advanced/graalx/weaponRWA_Plane.bytecode | Bin 3424 -> 0 bytes .../advanced/graalx/weaponRadio.bytecode | Bin 1650 -> 0 bytes .../graalx/weaponRemoteControl.bytecode | Bin 6137 -> 0 bytes .../advanced/graalx/weaponRock Throw.bytecode | Bin 488 -> 0 bytes .../advanced/graalx/weaponStaff_Axe.bytecode | Bin 935 -> 0 bytes .../weaponSystems_ArchetypeEditor.bytecode | Bin 63 -> 0 bytes .../advanced/graalx/weaponSystems_B2.bytecode | Bin 286 -> 0 bytes .../graalx/weaponSystems_BackupSys.bytecode | Bin 493 -> 0 bytes .../graalx/weaponSystems_FoodSys.bytecode | Bin 515 -> 0 bytes .../graalx/weaponSystems_Free.bytecode | Bin 3835 -> 0 bytes .../graalx/weaponSystems_IRC.bytecode | Bin 38 -> 0 bytes .../graalx/weaponSystems_Mail.bytecode | Bin 5137 -> 0 bytes .../graalx/weaponSystems_Party.bytecode | Bin 381 -> 0 bytes .../graalx/weaponSystems_TradeMenu.bytecode | Bin 684 -> 0 bytes .../graalx/weaponSystems_TradeMenu.json | 6 +- .../graalx/weaponSystems_Vote.bytecode | Bin 789 -> 0 bytes .../advanced/graalx/weaponTig_NPC.bytecode | Bin 2269 -> 0 bytes .../graalx/weaponToys_CDPlayer.bytecode | Bin 3336 -> 0 bytes .../graalx/weaponToys_GameEngine.bytecode | Bin 2540 -> 0 bytes .../advanced/graalx/weaponToys_gPod.bytecode | Bin 2624 -> 0 bytes .../graalx/weaponTwinny_Tool.bytecode | Bin 564 -> 0 bytes .../advanced/graalx/weaponVote.bytecode | Bin 2438 -> 0 bytes .../advanced/graalx/weaponVulcan.bytecode | Bin 52 -> 0 bytes .../graalx/weaponWeapons_Grenade.bytecode | Bin 38 -> 0 bytes .../graalx/weaponWeapons_Hand Cuffs.bytecode | Bin 944 -> 0 bytes .../loginserver/weapon-Adventure.bytecode | Bin 429 -> 0 bytes .../loginserver/weapon-IRC_Installer.bytecode | Bin 5004 -> 0 bytes .../loginserver/weapon-IRC_Login4.bytecode | Bin 161 -> 0 bytes .../loginserver/weapon-LoginScreen.bytecode | Bin 10573 -> 0 bytes .../loginserver/weapon-ReShared.bytecode | Bin 986 -> 0 bytes .../weapon-Rescripted_-F2LogWindow.bytecode | Bin 1592 -> 0 bytes .../weapon-Rescripted_IRC_Login2.bytecode | Bin 6213 -> 0 bytes .../weapon-Rescripted_IRC_Login2001.bytecode | Bin 8691 -> 0 bytes .../weapon-Rescripted_IRC_Login3.bytecode | Bin 404 -> 0 bytes .../weapon-Rescripted_IRC_Login4.bytecode | Bin 99 -> 0 bytes .../weapon-Rescripted_Serverlist.bytecode | Bin 37076 -> 0 bytes .../weapon-ServerListScreen.bytecode | Bin 33833 -> 0 bytes .../weapon-Serverlist_Patches.bytecode | Bin 267 -> 0 bytes .../weapon-Staff_GUIExplorer.bytecode | Bin 2608 -> 0 bytes .../weapon-Staff_GraalShop.bytecode | Bin 69892 -> 0 bytes .../weapon-StartConnectMessage.bytecode | Bin 2348 -> 0 bytes .../loginserver/weaponTestScript.bytecode | Bin 90 -> 0 bytes tests/baselines/basic/01_variables.bytecode | Bin 185 -> 0 bytes tests/baselines/basic/02_constants.bytecode | Bin 121 -> 0 bytes tests/baselines/basic/03_data_types.bytecode | Bin 349 -> 0 bytes tests/baselines/classes/01_objects.bytecode | Bin 563 -> 0 bytes tests/baselines/classes/02_arrays.bytecode | Bin 605 -> 0 bytes .../edge_cases/01_large_numbers.bytecode | Bin 367 -> 0 bytes .../edge_cases/02_long_strings.bytecode | Bin 704 -> 0 bytes .../edge_cases/03_deep_nesting.bytecode | Bin 922 -> 0 bytes .../expressions/01_arithmetic.bytecode | Bin 318 -> 0 bytes .../expressions/02_comparison.bytecode | Bin 321 -> 0 bytes .../baselines/expressions/03_logical.bytecode | Bin 372 -> 0 bytes .../baselines/expressions/04_bitwise.bytecode | Bin 219 -> 0 bytes .../expressions/05_assignment.bytecode | Bin 212 -> 0 bytes .../functions/01_basic_functions.bytecode | Bin 635 -> 0 bytes .../baselines/functions/02_recursion.bytecode | Bin 393 -> 0 bytes tests/baselines/functions/03_lambdas.bytecode | Bin 898 -> 0 bytes .../functions/04_prejump_grouping.json | 12 + .../statements/01_conditionals.bytecode | Bin 464 -> 0 bytes tests/baselines/statements/02_loops.bytecode | Bin 375 -> 0 bytes tests/baselines/statements/03_switch.bytecode | Bin 425 -> 0 bytes tests/baselines/statements/04_with.bytecode | Bin 468 -> 0 bytes .../scripts/functions/04_prejump_grouping.gs2 | 18 + tests/tools/run_tests.py | 35 +- 190 files changed, 411 insertions(+), 391 deletions(-) delete mode 100644 tests/baselines/advanced/g2k1/weapon-Day-Night.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weapon-Staff_Boots.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weapon-Systems_Main.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponApple Seeds.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponBasket.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponBread Stack.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponCandies.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponCatch Net.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponDiamond Axe.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponDiving.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponDraisine.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponGold Axe.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponGold Hammer.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponHat-Trading-GS2.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponHat-Trading.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponMemeCentral.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponMetal Axe.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponMetal Hammer.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponMining Bomb.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponParticleEditor.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponRailroad Destroyer.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponRoller.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponRope.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponShovel.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponSkip.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponSpin.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponTestGS2.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponTorch.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponTrading Item.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponViolin.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponWater Can.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponWooden Hammer.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weapongxtest.bytecode delete mode 100644 tests/baselines/advanced/g2k1/weaponjoey_test.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon%045CarSystem.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon%045Movement.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon%045System.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Ammo.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+DogTag.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Food.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Guns.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Guns_Debug.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Guns_KuJi.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Guns_M4.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Guns_Shotgun.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Hats.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Melee.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Presents.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon+Seeds.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-BizSystem.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-BuySys.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-DRescript.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Death.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-EraThingyForKinetaro.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Events.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-FoodSys.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Functions.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Gang Control.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-GangSys.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-GraalDB.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Gravity.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Gui.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-HotelSys.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Job Quests.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Map.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Minimap.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Movement.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Movement2.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-NBuySys.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-NewGangSys.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-NewMovement.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-NewWeather.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-News.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Profile.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-QMenu.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Shake.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Staff.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-StaffTool.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-System.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Vault.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Virus.bytecode delete mode 100644 tests/baselines/advanced/graalx/weapon-Weather.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponBackups_Radio.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponBrasas.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponEvents_Lazer.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponEvents_Zombie.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponFileEditor.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponFrankie_Test.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponItems_ATM Card.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponItems_Body Armor.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponItems_Boots.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponItems_Chemicals.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponItems_Cure Virus.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponItems_Land Mine.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponItems_Medkit.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponItems_Suit Saver.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponJobs_Fishing Rod.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponJobs_Mining Axe.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponJobs_Mining TNT.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponJobs_Roller.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponJobs_Seeds.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponJobs_Shovel.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponJobs_Stack.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponJobs_Water Can.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponKinetaro.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponKuJi_Items.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponKuJi_Staff.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponKuJi_Tool.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponLevelEditor.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponLevelGen.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponNotepad.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponRC_AttributesWindow.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponRC_NCControl.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponRC_RightsWindow.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponRWA_Plane.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponRadio.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponRemoteControl.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponRock Throw.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponStaff_Axe.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponSystems_ArchetypeEditor.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponSystems_B2.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponSystems_BackupSys.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponSystems_FoodSys.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponSystems_Free.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponSystems_IRC.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponSystems_Mail.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponSystems_Party.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponSystems_TradeMenu.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponSystems_Vote.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponTig_NPC.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponToys_CDPlayer.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponToys_GameEngine.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponToys_gPod.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponTwinny_Tool.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponVote.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponVulcan.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponWeapons_Grenade.bytecode delete mode 100644 tests/baselines/advanced/graalx/weaponWeapons_Hand Cuffs.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-Adventure.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-IRC_Installer.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-IRC_Login4.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-LoginScreen.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-ReShared.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-Rescripted_-F2LogWindow.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-Rescripted_IRC_Login2.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-Rescripted_IRC_Login2001.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-Rescripted_IRC_Login3.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-Rescripted_IRC_Login4.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-Rescripted_Serverlist.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-ServerListScreen.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-Serverlist_Patches.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-Staff_GUIExplorer.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-Staff_GraalShop.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weapon-StartConnectMessage.bytecode delete mode 100644 tests/baselines/advanced/loginserver/weaponTestScript.bytecode delete mode 100644 tests/baselines/basic/01_variables.bytecode delete mode 100644 tests/baselines/basic/02_constants.bytecode delete mode 100644 tests/baselines/basic/03_data_types.bytecode delete mode 100644 tests/baselines/classes/01_objects.bytecode delete mode 100644 tests/baselines/classes/02_arrays.bytecode delete mode 100644 tests/baselines/edge_cases/01_large_numbers.bytecode delete mode 100644 tests/baselines/edge_cases/02_long_strings.bytecode delete mode 100644 tests/baselines/edge_cases/03_deep_nesting.bytecode delete mode 100644 tests/baselines/expressions/01_arithmetic.bytecode delete mode 100644 tests/baselines/expressions/02_comparison.bytecode delete mode 100644 tests/baselines/expressions/03_logical.bytecode delete mode 100644 tests/baselines/expressions/04_bitwise.bytecode delete mode 100644 tests/baselines/expressions/05_assignment.bytecode delete mode 100644 tests/baselines/functions/01_basic_functions.bytecode delete mode 100644 tests/baselines/functions/02_recursion.bytecode delete mode 100644 tests/baselines/functions/03_lambdas.bytecode create mode 100644 tests/baselines/functions/04_prejump_grouping.json delete mode 100644 tests/baselines/statements/01_conditionals.bytecode delete mode 100644 tests/baselines/statements/02_loops.bytecode delete mode 100644 tests/baselines/statements/03_switch.bytecode delete mode 100644 tests/baselines/statements/04_with.bytecode create mode 100644 tests/scripts/functions/04_prejump_grouping.gs2 diff --git a/.gitignore b/.gitignore index 64b023b..59544c6 100644 --- a/.gitignore +++ b/.gitignore @@ -77,5 +77,6 @@ __pycache__/ .DS_Store # Test artifacts (generated in build directory, but ignore strays) +tests/baselines/**/*.bytecode tests/reports/*.json tests/outputs/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e06367..430a062 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -206,10 +206,10 @@ if(PROJECT_IS_TOP_LEVEL) ) # Custom target: Generate/update baselines - add_custom_target(test-baselines + add_custom_target(update-test-baselines COMMAND ${TEST_RUNNER_CMD} --update-baselines WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating test baselines" + COMMENT "Updating test baselines" DEPENDS gs2test ) @@ -243,7 +243,7 @@ if(PROJECT_IS_TOP_LEVEL) message(STATUS " Reports in: ${CMAKE_BINARY_DIR}/tests/reports") message(STATUS " Available targets:") message(STATUS " run-tests - Run test suite with verbose output") - message(STATUS " test-baselines - Generate/update baseline bytecode") + message(STATUS " update-test-baselines - Generate/update baseline bytecode") message(STATUS " test-clean - Clean test artifacts") message(STATUS " test or ctest - Run tests (quiet, for CI/CD)") diff --git a/src/ast/ast.h b/src/ast/ast.h index c419d65..a23242d 100644 --- a/src/ast/ast.h +++ b/src/ast/ast.h @@ -498,17 +498,17 @@ class ExpressionUnaryOpNode : public ExpressionNode return expr->toString() + std::string(ExpressionOpToString(op)); } - virtual ExpressionType expressionType() const + ExpressionType expressionType() const override { switch (op) { case ExpressionOp::UnaryMinus: case ExpressionOp::UnaryNot: return ExpressionType::EXPR_NUMBER; + default: + return expr->expressionType(); } - - return expr->expressionType(); - } + } }; class ExpressionFnCallNode : public ExpressionNode diff --git a/src/codegen/GS2Bytecode.cpp b/src/codegen/GS2Bytecode.cpp index 471b4ca..b530e0d 100644 --- a/src/codegen/GS2Bytecode.cpp +++ b/src/codegen/GS2Bytecode.cpp @@ -28,15 +28,6 @@ int32_t GS2Bytecode::getStringConst(const std::string& str) Buffer GS2Bytecode::getByteCode() { - // This fixes a weird bug in which the last function was uncallable, - // i am unsure if this is a bug with our specific client or something - // weird is happening during compilation that is causing the issue. - // I've used identical bytecode as per the decompiler, and still - // ran into this issue so I believe its a client issue. - // Either way, emitting this op seems to fix it. *shrugs* - // - joey - emit(opcode::OP_RET); - Buffer byteCode; // GS1EventFlags @@ -93,12 +84,6 @@ Buffer GS2Bytecode::getByteCode() functionTableBuffer.Write(func.opIndex); functionTableBuffer.write(func.functionName.c_str(), func.functionName.length()); functionTableBuffer.write('\0'); - - // emit a jump before the function declaration to the last op index - if (func.jmpLoc != 0) - { - emit(short(opIndex), func.jmpLoc - 2); - } } } @@ -130,7 +115,7 @@ Buffer GS2Bytecode::getByteCode() return byteCode; } -void GS2Bytecode::addFunction(std::string functionName, uint32_t opIdx, size_t jmpLoc) +void GS2Bytecode::addFunction(std::string functionName, uint32_t opIdx) { auto ret = functionSet.insert(functionName); @@ -138,8 +123,7 @@ void GS2Bytecode::addFunction(std::string functionName, uint32_t opIdx, size_t j { functionTable.push_back(FunctionEntry{ std::move(functionName), - opIdx, - jmpLoc + opIdx }); } else diff --git a/src/codegen/GS2Bytecode.h b/src/codegen/GS2Bytecode.h index 5caad07..447cf15 100644 --- a/src/codegen/GS2Bytecode.h +++ b/src/codegen/GS2Bytecode.h @@ -17,12 +17,12 @@ struct FunctionEntry { std::string functionName; uint32_t opIndex; - size_t jmpLoc; }; class GS2Bytecode { friend class GS2CompilerVisitor; + friend class JumpTarget; private: GS2Bytecode() : opIndex(0), lastOp(opcode::Opcode::OP_NONE) {} @@ -30,7 +30,7 @@ class GS2Bytecode Buffer getByteCode(); int32_t getStringConst(const std::string& str); - void addFunction(std::string functionName, uint32_t opIdx, size_t jmpLoc); + void addFunction(std::string functionName, uint32_t opIdx); /* * Functions to emit bytecode into the underlying buffer diff --git a/src/compiler/GS2CompilerVisitor.cpp b/src/compiler/GS2CompilerVisitor.cpp index 025df70..1ddf19e 100644 --- a/src/compiler/GS2CompilerVisitor.cpp +++ b/src/compiler/GS2CompilerVisitor.cpp @@ -1,6 +1,5 @@ #include #include -#include #include "ast/ast.h" #include "visitors/FunctionInspectVisitor.h" @@ -51,38 +50,8 @@ opcode::Opcode getExpressionOpCode(ExpressionOp op) } GS2CompilerVisitor::GS2CompilerVisitor(ParserContext & context) - : parserContext(context), - _isCopyAssignment(false), _isInlineConditional(true), _isInsideExpression(false), _newObjectCount(0) + : parserContext(context) { - fail_label = success_label = exit_label = createLabel(); - break_label = continue_label = 0; -} - -GS2CompilerVisitor::label_id GS2CompilerVisitor::createLabel() -{ - static label_id counter = 0; - auto id = ++counter; - return id; -} - -void GS2CompilerVisitor::writeLabels() -{ - for (const auto& [label, locs] : label_locs) - { - if (label == exit_label) - continue; - - auto label_iter = label_addr.find(label); - if (label_iter != label_addr.end()) - { - auto write_addr = label_iter->second; - - for (const auto& loc : locs) - { - byteCode.emit(short(write_addr), loc); - } - } - } } void GS2CompilerVisitor::Visit(Node *node) @@ -102,11 +71,48 @@ void GS2CompilerVisitor::Visit(Node *node) void GS2CompilerVisitor::Visit(StatementBlock *node) { - for (const auto& n : node->statements) + if (!_isRootBlock) + { + for (const auto& n : node->statements) + { + assert(n != nullptr); + n->visit(this); + } + return; + } + + _isRootBlock = false; + JumpTarget fnSkip(byteCode); + fn_skip_target = &fnSkip; + + for (const auto& n : node->statements) { assert(n != nullptr); + + size_t pendingBefore = fnSkip.pendingCount(); + auto opIndexBefore = byteCode.getOpIndex(); + n->visit(this); + + bool addedPrejump = (fnSkip.pendingCount() > pendingBefore); + + if (!addedPrejump && fnSkip.pendingCount() > 0) + { + fnSkip.resolve(opIndexBefore); + fnSkip.reset(); + } } + + // Trailing OP_RET fixes a weird bug in which the last function was + // uncallable on certain clients. Emitted here (before resolving the + // final function-skip group) so that the pre-jump lands after it, + // matching the legacy target address. - joey + byteCode.emit(opcode::OP_RET); + + if (fnSkip.pendingCount() > 0) + fnSkip.resolveHere(); + + fn_skip_target = nullptr; } void GS2CompilerVisitor::Visit(StatementFnDeclNode *node) @@ -115,14 +121,9 @@ void GS2CompilerVisitor::Visit(StatementFnDeclNode *node) printf("Declare function: %s\n", node->ident->c_str()); #endif - size_t jmpLoc = 0; - - if (node->emit_prejump) + if (node->emit_prejump && fn_skip_target) { - byteCode.emit(opcode::OP_SET_INDEX); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); // replaced with jump index to last opcode - jmpLoc = byteCode.getBytecodePos(); + fn_skip_target->emitJump(opcode::OP_SET_INDEX); } bool is_universe = false; @@ -149,7 +150,7 @@ void GS2CompilerVisitor::Visit(StatementFnDeclNode *node) std::swap(funcName, funcNameUni); } - byteCode.addFunction(funcName, byteCode.getOpIndex(), jmpLoc); + byteCode.addFunction(funcName, byteCode.getOpIndex()); { byteCode.emit(opcode::OP_TYPE_ARRAY); @@ -192,51 +193,43 @@ void GS2CompilerVisitor::Visit(ExpressionTernaryOpNode *node) { node->condition->visit(this); - label_id save_labels[] = { success_label, fail_label }; + ScopeGuard guard(*this); - auto new_fail_label = createLabel(); - auto new_success_label = createLabel(); + JumpTarget falseBranch(byteCode); + JumpTarget end(byteCode); { - fail_label = new_fail_label; - success_label = new_success_label; + fail_target = &falseBranch; + success_target = &end; // Convert the result of the expression to a number since this // value will be used for the following if () stmt if (!IsBooleanReturningOp(byteCode.getLastOp())) byteCode.emitConversionOp(node->condition->expressionType(), ExpressionType::EXPR_NUMBER); - byteCode.emit(opcode::OP_IF); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - addLocation(new_fail_label, byteCode.getBytecodePos() - 2); + falseBranch.emitJump(opcode::OP_IF); node->leftExpr->visit(this); // set the continue position to the right-hand expression, skipping // over the jump on the left-hand expression - setLocation(new_fail_label, byteCode.getOpIndex() + 1); + falseBranch.resolve(byteCode.getOpIndex() + 1); } // emit a jump to the end of this else block for the previous if-block - byteCode.emit(opcode::OP_SET_INDEX); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - addLocation(new_success_label, byteCode.getBytecodePos() - 2); + end.emitJump(opcode::OP_SET_INDEX); node->rightExpr->visit(this); - setLocation(new_success_label, byteCode.getOpIndex()); - - success_label = save_labels[0]; - fail_label = save_labels[1]; + end.resolveHere(); } void GS2CompilerVisitor::Visit(ExpressionBinaryOpNode *node) { if (node->op == ExpressionOp::LogicalAnd || node->op == ExpressionOp::LogicalOr) { - label_id save_labels[] = { fail_label, success_label }; + ScopeGuard guard(*this); + JumpTarget inlineTarget(byteCode); bool isFirstBinaryExpr = !_isInsideExpression; if (isFirstBinaryExpr) { @@ -245,60 +238,49 @@ void GS2CompilerVisitor::Visit(ExpressionBinaryOpNode *node) // If its a conditional expression we need to create new jump labels which leads // to OP_INLINE_CONDITIONAL emitted at the end of the first binary expression if (_isInlineConditional) - success_label = fail_label = createLabel(); + { + success_target = &inlineTarget; + fail_target = &inlineTarget; + } } - auto tmp_success_label = success_label; - auto tmp_fail_label = fail_label; + auto* tmp_success = success_target; + auto* tmp_fail = fail_target; bool is_inline_cond = _isInlineConditional; if (node->op == ExpressionOp::LogicalAnd) { - auto new_success_label = createLabel(); - success_label = new_success_label; + JumpTarget afterLhs(byteCode); + success_target = &afterLhs; node->left->visit(this); byteCode.emitConversionOp(node->left->expressionType(), ExpressionType::EXPR_NUMBER); - setLocation(new_success_label, byteCode.getOpIndex()); - success_label = tmp_success_label; - fail_label = tmp_fail_label; + afterLhs.resolveHere(); + success_target = tmp_success; + fail_target = tmp_fail; if (is_inline_cond) - { - byteCode.emit(opcode::OP_AND); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - addLocation(fail_label, byteCode.getBytecodePos() - 2); - } + fail_target->emitJump(opcode::OP_AND); else - { - byteCode.emit(opcode::OP_IF); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - addLocation(fail_label, byteCode.getBytecodePos() - 2); - } + fail_target->emitJump(opcode::OP_IF); node->right->visit(this); byteCode.emitConversionOp(node->right->expressionType(), ExpressionType::EXPR_NUMBER); } else if (node->op == ExpressionOp::LogicalOr) { - auto new_fail_label = createLabel(); - fail_label = new_fail_label; + JumpTarget afterLhs(byteCode); + fail_target = &afterLhs; node->left->visit(this); byteCode.emitConversionOp(node->left->expressionType(), ExpressionType::EXPR_NUMBER); - byteCode.emit(opcode::OP_OR); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - addLocation(success_label, byteCode.getBytecodePos() - 2); + success_target->emitJump(opcode::OP_OR); - setLocation(new_fail_label, byteCode.getOpIndex()); - auto success_label_copy = success_label; - success_label = tmp_success_label; - fail_label = tmp_fail_label; + afterLhs.resolveHere(); + success_target = tmp_success; + fail_target = tmp_fail; node->right->visit(this); byteCode.emitConversionOp(node->right->expressionType(), ExpressionType::EXPR_NUMBER); @@ -306,19 +288,13 @@ void GS2CompilerVisitor::Visit(ExpressionBinaryOpNode *node) if (isFirstBinaryExpr) { - setLocation(tmp_success_label, byteCode.getOpIndex()); - - fail_label = save_labels[0]; - success_label = save_labels[1]; _isInsideExpression = false; if (is_inline_cond) + { + inlineTarget.resolveHere(); byteCode.emit(opcode::Opcode::OP_INLINE_CONDITIONAL); - } - else - { - success_label = tmp_success_label; - fail_label = tmp_fail_label; + } } return; @@ -499,16 +475,17 @@ void GS2CompilerVisitor::Visit(ExpressionUnaryOpNode* node) } auto temp_inlinecond = _isInlineConditional; - label_id save_labels[] = { success_label, fail_label, 0 }; + ScopeGuard guard(*this); + JumpTarget inlineTarget(byteCode); bool isFirstBinaryExpr = !_isInsideExpression; if (isFirstBinaryExpr) { _isInsideExpression = true; _isInlineConditional = true; - save_labels[2] = createLabel(); - success_label = fail_label = save_labels[2]; + success_target = &inlineTarget; + fail_target = &inlineTarget; } node->expr->visit(this); @@ -518,10 +495,7 @@ void GS2CompilerVisitor::Visit(ExpressionUnaryOpNode* node) _isInsideExpression = false; _isInlineConditional = temp_inlinecond; - success_label = save_labels[0]; - fail_label = save_labels[1]; - - setLocation(save_labels[2], byteCode.getOpIndex()); + inlineTarget.resolveHere(); } if (node->opFirst) @@ -577,31 +551,35 @@ void GS2CompilerVisitor::Visit(ExpressionUnaryOpNode* node) return; } + + default: + return; } } - else + + switch (node->op) { - switch (node->op) + case ExpressionOp::Increment: + case ExpressionOp::Decrement: { - case ExpressionOp::Increment: - case ExpressionOp::Decrement: - { - auto opCode = getExpressionOpCode(node->op); - assert(opCode != opcode::Opcode::OP_NONE); + auto opCode = getExpressionOpCode(node->op); + assert(opCode != opcode::Opcode::OP_NONE); - // TODO(joey): need to fix - byteCode.emit(opcode::OP_COPY_LAST_OP); - byteCode.emit(opcode::OP_CONV_TO_FLOAT); - byteCode.emit(opcode::OP_SWAP_LAST_OPS); - byteCode.emit(opCode); - byteCode.emit(opcode::OP_INDEX_DEC); - return; - } + // TODO(joey): need to fix + byteCode.emit(opcode::OP_COPY_LAST_OP); + byteCode.emit(opcode::OP_CONV_TO_FLOAT); + byteCode.emit(opcode::OP_SWAP_LAST_OPS); + byteCode.emit(opCode); + byteCode.emit(opcode::OP_INDEX_DEC); + return; + } + default: + { + std::string errorMsg = std::format("Undefined opcode in UnaryExpression {}: {}", static_cast(node->op), ExpressionOpToString(node->op)); + parserContext.addError({ ErrorLevel::E_ERROR, GS2CompilerError::ErrorCategory::Compiler, std::move(errorMsg) }); + return; } } - - std::string errorMsg = std::format("Undefined opcode in UnaryExpression {}: {}", static_cast(node->op), ExpressionOpToString(node->op)); - parserContext.addError({ ErrorLevel::E_ERROR, GS2CompilerError::ErrorCategory::Compiler, std::move(errorMsg) }); } void GS2CompilerVisitor::Visit(ExpressionStrConcatNode *node) @@ -998,15 +976,14 @@ void GS2CompilerVisitor::Visit(StatementReturnNode *node) { if (node->expr) { - label_id save_labels[] = { success_label, fail_label }; - - fail_label = success_label = createLabel(); + ScopeGuard guard(*this); + JumpTarget exprEnd(byteCode); + success_target = &exprEnd; + fail_target = &exprEnd; node->expr->visit(this); - setLocation(success_label, byteCode.getOpIndex()); - success_label = save_labels[0]; - fail_label = save_labels[1]; + exprEnd.resolveHere(); } else { @@ -1019,14 +996,14 @@ void GS2CompilerVisitor::Visit(StatementReturnNode *node) void GS2CompilerVisitor::Visit(StatementIfNode* node) { - label_id save_labels[] = { success_label, fail_label }; + ScopeGuard guard(*this); - auto new_success_label = createLabel(); - auto new_fail_label = createLabel(); + JumpTarget condEnd(byteCode); + JumpTarget falseBranch(byteCode); { - success_label = new_success_label; - fail_label = new_fail_label; + success_target = &condEnd; + fail_target = &falseBranch; { _isInlineConditional = false; @@ -1040,12 +1017,9 @@ void GS2CompilerVisitor::Visit(StatementIfNode* node) byteCode.emitConversionOp(node->expr->expressionType(), ExpressionType::EXPR_NUMBER); // set the break point to the start of the OP_IF instruction - setLocation(new_success_label, byteCode.getOpIndex()); + condEnd.resolveHere(); - byteCode.emit(opcode::OP_IF); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - addLocation(new_fail_label, byteCode.getBytecodePos() - 2); + falseBranch.emitJump(opcode::OP_IF); node->thenBlock->visit(this); @@ -1053,12 +1027,9 @@ void GS2CompilerVisitor::Visit(StatementIfNode* node) // continue to the next instruction, but if their is an else-block we must // skip the next instruction since its a jmp to the end of the if-else chain auto nextOpcode = byteCode.getOpIndex() + (node->elseBlock ? 1 : 0); - setLocation(new_fail_label, nextOpcode); + falseBranch.resolve(nextOpcode); } - success_label = save_labels[0]; - fail_label = save_labels[1]; - if (node->elseBlock) { // emit a jump to the end of this else block for the previous if-block @@ -1070,9 +1041,6 @@ void GS2CompilerVisitor::Visit(StatementIfNode* node) node->elseBlock->visit(this); byteCode.emit(short(byteCode.getOpIndex()), elseLoc); - - success_label = save_labels[0]; - fail_label = save_labels[1]; } } @@ -1121,56 +1089,42 @@ void GS2CompilerVisitor::Visit(ExpressionNewObjectNode *node) void GS2CompilerVisitor::Visit(StatementWhileNode *node) { - label_id save_labels[] = {success_label, fail_label, continue_label, break_label}; - - { - auto new_break_label = createLabel(); - auto new_continue_label = createLabel(); + ScopeGuard guard(*this); - break_label = new_break_label; - continue_label = new_continue_label; + JumpTarget breakJmp(byteCode); + JumpTarget continueJmp(byteCode); - // Set the continue breakpoint to the start of the loop - setLocation(continue_label, byteCode.getOpIndex()); + break_target = &breakJmp; + continue_target = &continueJmp; - { - _isInlineConditional = false; - node->expr->visit(this); - _isInlineConditional = true; - } + // Set the continue breakpoint to the start of the loop + continueJmp.resolveHere(); - byteCode.emitConversionOp(node->expr->expressionType(), ExpressionType::EXPR_NUMBER); + { + _isInlineConditional = false; + node->expr->visit(this); + _isInlineConditional = true; + } - byteCode.emit(opcode::OP_IF); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - addLocation(new_break_label, byteCode.getBytecodePos() - 2); + byteCode.emitConversionOp(node->expr->expressionType(), ExpressionType::EXPR_NUMBER); - // Increment loop count - byteCode.emit(opcode::OP_CMD_CALL); + breakJmp.emitJump(opcode::OP_IF); - node->block->visit(this); + // Increment loop count + byteCode.emit(opcode::OP_CMD_CALL); - // Jump back to condition - byteCode.emit(opcode::OP_SET_INDEX); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - addLocation(new_continue_label, byteCode.getBytecodePos() - 2); + node->block->visit(this); - // Set the fail breakpoint to after the while-statement - setLocation(new_break_label, byteCode.getOpIndex()); - } + // Jump back to condition + continueJmp.emitJump(opcode::OP_SET_INDEX); - // restore labels - success_label = save_labels[0]; - fail_label = save_labels[1]; - continue_label = save_labels[2]; - break_label = save_labels[3]; + // Set the fail breakpoint to after the while-statement + breakJmp.resolveHere(); } void GS2CompilerVisitor::Visit(StatementBreakNode* node) { - if (break_label <= 0) + if (!break_target) { std::string errorMsg = std::format("`break` outside loop detected"); parserContext.addError({ ErrorLevel::E_WARNING, GS2CompilerError::ErrorCategory::Compiler, std::move(errorMsg) }); @@ -1178,15 +1132,12 @@ void GS2CompilerVisitor::Visit(StatementBreakNode* node) } // Emit jump out of loop - byteCode.emit(opcode::OP_SET_INDEX); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - addLocation(break_label, byteCode.getBytecodePos() - 2); + break_target->emitJump(opcode::OP_SET_INDEX); } void GS2CompilerVisitor::Visit(StatementContinueNode* node) { - if (continue_label <= 0) + if (!continue_target) { std::string errorMsg = std::format("`continue` outside loop detected"); parserContext.addError({ ErrorLevel::E_WARNING, GS2CompilerError::ErrorCategory::Compiler, std::move(errorMsg) }); @@ -1194,10 +1145,7 @@ void GS2CompilerVisitor::Visit(StatementContinueNode* node) } // Emit jump back to the loop-condition - byteCode.emit(opcode::OP_SET_INDEX); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - addLocation(continue_label, byteCode.getBytecodePos() - 2); + continue_target->emitJump(opcode::OP_SET_INDEX); } void GS2CompilerVisitor::Visit(StatementForNode *node) @@ -1222,53 +1170,40 @@ void GS2CompilerVisitor::Visit(StatementForNode *node) byteCode.emit(opcode::OP_TYPE_TRUE); } - label_id save_labels[] = {success_label, fail_label, continue_label, break_label}; - - { - auto new_break_label = createLabel(); - auto new_continue_label = createLabel(); - - break_label = new_break_label; - continue_label = new_continue_label; + ScopeGuard guard(*this); - // Emit if-loop on conditional expression, with a failed jump to the end-block - byteCode.emit(opcode::OP_IF); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - - // Add break location for the jump out of the loop - addLocation(new_break_label, byteCode.getBytecodePos() - 2); + JumpTarget breakJmp(byteCode); + JumpTarget continueJmp(byteCode); - // Increment loop count - byteCode.emit(opcode::OP_CMD_CALL); + break_target = &breakJmp; + continue_target = &continueJmp; - // Emit block - if (node->block) - node->block->visit(this); + // Emit if-loop on conditional expression, with a failed jump to the end-block + breakJmp.emitJump(opcode::OP_IF); - // Set the continue location before the post-op - setLocation(new_continue_label, byteCode.getOpIndex()); + // Increment loop count + byteCode.emit(opcode::OP_CMD_CALL); - // Emit post-op - if (node->postop) - { - // TODO(joey): discard return - node->postop->visit(this); - } + // Emit block + if (node->block) + node->block->visit(this); - // Emit jump back to condition - byteCode.emit(opcode::OP_SET_INDEX); - byteCode.emitDynamicNumber(startLoopOp); + // Set the continue location before the post-op + continueJmp.resolveHere(); - // Write out the breakpoint jumps - setLocation(new_break_label, byteCode.getOpIndex()); + // Emit post-op + if (node->postop) + { + // TODO(joey): discard return + node->postop->visit(this); } - // restore labels - success_label = save_labels[0]; - fail_label = save_labels[1]; - continue_label = save_labels[2]; - break_label = save_labels[3]; + // Emit jump back to condition + byteCode.emit(opcode::OP_SET_INDEX); + byteCode.emitDynamicNumber(startLoopOp); + + // Write out the breakpoint jumps + breakJmp.resolveHere(); } void GS2CompilerVisitor::Visit(StatementNewNode* node) @@ -1370,45 +1305,32 @@ void GS2CompilerVisitor::Visit(StatementForEachNode *node) byteCode.emit(opcode::OP_TYPE_NUMBER); byteCode.emitDynamicNumber(0); - label_id save_labels[] = { success_label, fail_label, continue_label, break_label }; - - { - auto new_break_label = createLabel(); - auto new_continue_label = createLabel(); + ScopeGuard guard(*this); - break_label = new_break_label; - continue_label = new_continue_label; - - auto startLoopOp = byteCode.getOpIndex(); - byteCode.emit(opcode::OP_FOREACH); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); + JumpTarget breakJmp(byteCode); + JumpTarget continueJmp(byteCode); - // Add break location for the jump out of the loop - addLocation(new_break_label, byteCode.getBytecodePos() - 2); + break_target = &breakJmp; + continue_target = &continueJmp; - byteCode.emit(opcode::OP_CMD_CALL); - node->block->visit(this); + auto startLoopOp = byteCode.getOpIndex(); + breakJmp.emitJump(opcode::OP_FOREACH); - // Set the continue location before we increment the idx - setLocation(new_continue_label, byteCode.getOpIndex()); - byteCode.emit(opcode::OP_INC); + byteCode.emit(opcode::OP_CMD_CALL); + node->block->visit(this); - // jump to beginning of the for-each loop - byteCode.emit(opcode::OP_SET_INDEX); - byteCode.emitDynamicNumber(startLoopOp); + // Set the continue location before we increment the idx + continueJmp.resolveHere(); + byteCode.emit(opcode::OP_INC); - // Write out the breakpoint jumps - setLocation(new_break_label, byteCode.getOpIndex()); - } + // jump to beginning of the for-each loop + byteCode.emit(opcode::OP_SET_INDEX); + byteCode.emitDynamicNumber(startLoopOp); - // restore labels - success_label = save_labels[0]; - fail_label = save_labels[1]; - continue_label = save_labels[2]; - break_label = save_labels[3]; + // Write out the breakpoint jumps + breakJmp.resolveHere(); - // pop the idx variable + // pop the idx variable (after guard restores targets) byteCode.emit(opcode::OP_INDEX_DEC); } @@ -1431,69 +1353,64 @@ void GS2CompilerVisitor::Visit(StatementSwitchNode* node) // endloc: // .... - // save labels - label_id save_labels[] = { break_label, continue_label, success_label, fail_label }; + ScopeGuard guard(*this); - { - auto new_break_label = createLabel(); + JumpTarget breakJmp(byteCode); - std::vector caseStartOp; + std::vector caseAddrs; - // jump to case-test - byteCode.emit(opcode::OP_SET_INDEX); - byteCode.emit(char(0xF4)); - byteCode.emit(short(0)); - size_t caseTestLoc = byteCode.getBytecodePos() - 2; + // jump to case-test + byteCode.emit(opcode::OP_SET_INDEX); + byteCode.emit(char(0xF4)); + byteCode.emit(short(0)); + size_t caseTestLoc = byteCode.getBytecodePos() - 2; - // case-list: - for (const auto& caseNode : node->cases) - { - auto new_case_label = createLabel(); - setLocation(new_case_label, byteCode.getOpIndex()); + // case-list: + for (const auto& caseNode : node->cases) + { + auto caseAddr = byteCode.getOpIndex(); - for (const auto& caseExpr : caseNode.exprList) - caseStartOp.push_back(new_case_label); + for (const auto& caseExpr : caseNode.exprList) + caseAddrs.push_back(caseAddr); - break_label = new_break_label; - continue_label = new_case_label; - caseNode.block->visit(this); - } + break_target = &breakJmp; - // case-test: - byteCode.emit(short(byteCode.getOpIndex()), caseTestLoc); - node->expr->visit(this); + // continue inside switch case jumps to current case start + JumpTarget caseStart(byteCode); + caseStart.resolve(caseAddr); + continue_target = &caseStart; + + caseNode.block->visit(this); + continue_target = nullptr; + } - size_t i = 0; - for (const auto& caseNode : node->cases) + // case-test: + byteCode.emit(short(byteCode.getOpIndex()), caseTestLoc); + node->expr->visit(this); + + size_t i = 0; + for (const auto& caseNode : node->cases) + { + for (const auto& caseExpr : caseNode.exprList) { - for (const auto& caseExpr : caseNode.exprList) + if (caseExpr) { - if (caseExpr) - { - byteCode.emit(opcode::OP_COPY_LAST_OP); - caseExpr->visit(this); - byteCode.emit(opcode::OP_EQ); - byteCode.emit(opcode::OP_SET_INDEX_TRUE); - } - else byteCode.emit(opcode::OP_SET_INDEX); - - byteCode.emitDynamicNumber(label_addr[caseStartOp[i++]]); + byteCode.emit(opcode::OP_COPY_LAST_OP); + caseExpr->visit(this); + byteCode.emit(opcode::OP_EQ); + byteCode.emit(opcode::OP_SET_INDEX_TRUE); } - } + else byteCode.emit(opcode::OP_SET_INDEX); - setLocation(new_break_label, byteCode.getOpIndex()); - - // Since we are consuming a copy for each case-test, we need to pop - // the original value off the top of the stack. - //if (node->expr->expressionType() == ExpressionType::EXPR_FUNCTION) // note: no idea why this was here - byteCode.emit(opcode::OP_INDEX_DEC); + byteCode.emitDynamicNumber(caseAddrs[i++]); + } } - // restore labels - break_label = save_labels[0]; - continue_label = save_labels[1]; - success_label = save_labels[2]; - fail_label = save_labels[3]; + breakJmp.resolveHere(); + + // Since we are consuming a copy for each case-test, we need to pop + // the original value off the top of the stack. + byteCode.emit(opcode::OP_INDEX_DEC); } // not implemented: should never occur diff --git a/src/compiler/GS2CompilerVisitor.h b/src/compiler/GS2CompilerVisitor.h index 2b7aea6..c3404a0 100644 --- a/src/compiler/GS2CompilerVisitor.h +++ b/src/compiler/GS2CompilerVisitor.h @@ -3,18 +3,76 @@ #ifndef GS2COMPILER_H #define GS2COMPILER_H +#include +#include #include #include #include -#include #include "ast/NodeVisitor.h" #include "GS2Bytecode.h" class ParserContext; +class JumpTarget +{ + using jmp_address = uint32_t; + + GS2Bytecode& byteCode; + std::vector pending; + std::optional addr; + +public: + explicit JumpTarget(GS2Bytecode& bc) : byteCode(bc) {} + + ~JumpTarget() + { + assert(pending.empty() && "unresolved forward references — missing resolve() call"); + } + + JumpTarget(const JumpTarget&) = delete; + JumpTarget& operator=(const JumpTarget&) = delete; + JumpTarget(JumpTarget&&) = delete; + JumpTarget& operator=(JumpTarget&&) = delete; + + void addRef(size_t pos) + { + if (addr) + byteCode.emit(short(*addr), pos); + else + pending.push_back(pos); + } + + void resolve(jmp_address target) + { + addr = target; + for (auto pos : pending) + byteCode.emit(short(*addr), pos); + pending.clear(); + } + + void resolveHere() { resolve(byteCode.getOpIndex()); } + + jmp_address address() const { return *addr; } + + size_t pendingCount() const { return pending.size(); } + + void reset() + { + assert(pending.empty()); + addr.reset(); + } + + void emitJump(opcode::Opcode jumpOp) + { + byteCode.emit(jumpOp); + byteCode.emit(char(0xF4)); + byteCode.emit(short(0)); + addRef(byteCode.getBytecodePos() - 2); + } +}; + class GS2CompilerVisitor : public NodeVisitor { - using label_id = uint32_t; using jmp_address = uint32_t; public: @@ -58,33 +116,54 @@ class GS2CompilerVisitor : public NodeVisitor virtual void Visit(ExpressionConstantNode *node); virtual void Visit(ExpressionFnObject* node); - private: + private: GS2Bytecode byteCode; ParserContext& parserContext; std::set joinedClasses; - bool _isCopyAssignment; - bool _isInlineConditional; - bool _isInsideExpression; - int _newObjectCount; - - // Jump-labels - label_id success_label, fail_label, exit_label; - label_id break_label, continue_label; - std::unordered_map> label_locs; - std::unordered_map label_addr; - - // Jump-label functions - label_id createLabel(); - void addLocation(label_id label, size_t loc); - void setLocation(label_id label, jmp_address addr); - void writeLabels(); + bool _isCopyAssignment = false; + bool _isInlineConditional = true; + bool _isInsideExpression = false; + int _newObjectCount = 0; + + // Jump targets + JumpTarget* success_target = nullptr; + JumpTarget* fail_target = nullptr; + JumpTarget* break_target = nullptr; + JumpTarget* continue_target = nullptr; + JumpTarget* fn_skip_target = nullptr; + bool _isRootBlock = true; + + struct ScopeGuard + { + GS2CompilerVisitor& self; + JumpTarget* saved_success; + JumpTarget* saved_fail; + JumpTarget* saved_break; + JumpTarget* saved_continue; + + explicit ScopeGuard(GS2CompilerVisitor& s) + : self(s), + saved_success(s.success_target), + saved_fail(s.fail_target), + saved_break(s.break_target), + saved_continue(s.continue_target) {} + + ~ScopeGuard() + { + self.success_target = saved_success; + self.fail_target = saved_fail; + self.break_target = saved_break; + self.continue_target = saved_continue; + } + + ScopeGuard(const ScopeGuard&) = delete; + ScopeGuard& operator=(const ScopeGuard&) = delete; + }; }; inline Buffer GS2CompilerVisitor::getByteCode() { - setLocation(exit_label, byteCode.getOpIndex()); - writeLabels(); return byteCode.getByteCode(); } @@ -93,14 +172,4 @@ inline const std::set& GS2CompilerVisitor::getJoinedClasses() const return joinedClasses; } -inline void GS2CompilerVisitor::addLocation(label_id label, size_t loc) -{ - label_locs[label].push_back(loc); -} - -inline void GS2CompilerVisitor::setLocation(label_id label, jmp_address addr) -{ - label_addr[label] = addr; -} - #endif diff --git a/tests/baselines/advanced/g2k1/weapon-Day-Night.bytecode b/tests/baselines/advanced/g2k1/weapon-Day-Night.bytecode deleted file mode 100644 index 8fd551841cada582bf588a9614ea99ee7b56d22a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1894 zcmbVMO^@3|7#=%`vzxZN+jcV97Fd#I+n&0j0i+(%Y@{v~1qrnh%iU|wCKkzfWjovE zLJ#x?Cw>Ay0U>UjkjjmpfH)v=9pQ)*NIdWOBd*i~B62+M$20H8^UjztW--R<_|wnE z|2dXNi!+dtp9XXCSbuo#%zF^d!YC%76{-i31kfj~6RO8EcPXO} zR3bCLjZo3naFGz;&e`H*7I+6)rXzRxNidlv#{v0jh!#b19-hl2m`Pur#?1A+aG?_B zxxRZINtRb=$_$wAF5^JWLzPUKc?Zf{db35$meNJ~U_J?yFP|}LU}@gZSe&5RgEKW@ z@icr22=k_{nn*}zZiG~Yb{@oR8ZHoL9;lc_(pNH$*(8!u8R=xUkVf#`=yM||>gLq- zk}#s;iha2ymWez)m0rT;%LJU9yAdl^Y9;F-W_b_Oz^9^Oiev%@UZ`SNeW^?@WzZ<7Cep2MUM2ksl_~Vq zY~k6`&K4nbhvo^|NB2L2WEm;99AcY*kv*!fY+Tm1QU7}9;2s;n#S3*{)ZGGkOXw?m zJ)w7T>>%Rlacs&^S5ZktMGS7#_e~6BXhXewa2G0$EOa2S2T`uQ`dttj6}^E3fL%xG zJ)Z84#^8lYd$VFYJci*d*Z|r!ijym2IQHO!qiY<^Tp`B>$bcI@do;|iIIg?>73}yn zeGOWuJsf&sa7bKT&gJo-!&h}DyL@lct?BlTu=P7k3#a=xKwCV0NDcOI!-T#;nEo|P h)P5=Sz5)M)>xFMt{+RZW_9f6a9k@{2t&EUn>tA3?Wtac} diff --git a/tests/baselines/advanced/g2k1/weapon-Staff_Boots.bytecode b/tests/baselines/advanced/g2k1/weapon-Staff_Boots.bytecode deleted file mode 100644 index 5490613b338406a71521e6c6c7346e373c203e31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1256 zcmZWn&ubGw6n>MmTN{7YCY!cu-DO*_P_#{3y(Cy{DT;_edeVbzvXjkXcBkxa+Qy?6 z{4)g4olN@D!&iCBfA^ek7 zQ*=bAT8F*QKW78>wY*aJs7tV>D>yN$c(inL4JghbRP4i;BIz=(%aN7BIF7~sy{(Y} zR8^T8%uOm7wUADk+iHOWvnpj0Tv`KNYMQ|Ya6keB_)ffMif0mI86F@|SHNtF)GEk- zico4!=@XV}{3MNbrldNQ{;`!GfKYyIVjdtfXQ=`GmWub*s-C+Bqokl@G(|1@C3oj1fQm#qLt*;ZMtCP$V8EA={?_p3_MG4 rpJ7ka|8UK9%~18LG)-Hp_=MSA48fYh=fw^&%wdS`zx?-x#tMG{7p0N> diff --git a/tests/baselines/advanced/g2k1/weapon-Systems_Main.bytecode b/tests/baselines/advanced/g2k1/weapon-Systems_Main.bytecode deleted file mode 100644 index 147cb3b3a7fb54cc03e243b3fd0a6e4fc414a92b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmZQzU|?imU|<1a5MTmgJ|Jey&vPzHO)N=G0f{mLu~B-lQF2aZYF>$Meo|Iya*1w1 zPGV(h5kppfW*&nVkVs8YNX|(tE>100WJpcU$Oq{JnXAb7g+WBzn2S?f^aH~-u@8*O UYzjaolh_AlHU*K-4D9S&0Plnyx&QzG diff --git a/tests/baselines/advanced/g2k1/weaponApple Seeds.bytecode b/tests/baselines/advanced/g2k1/weaponApple Seeds.bytecode deleted file mode 100644 index 5cade81be5706bb44eba9a5bb345cde0f5084c5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 619 zcmaJ-%}&BV5S|tU0sn2cH&dt{yb!^FF)<$0aMgo}@kEw(g(k3zZBgsZ*YN>-2%lyX zh-YWnVw8hTHaqkE%zRq_FaRKrM|~!q4xVelJ7L5Eg&Bh13~9=u%K=Sdg`5h0$LRQ% z=1TAjF-n)v9BMy(bU{22&u+|EfPQ}%GM+^BFkvGf?#09%&?n{|1eqYFX;T~McsykB zA4vu+R_j?1usDfCs>%7541tLH40;$19wNqGb=_4-8W6LD@(?f8P~R65j!ChD6oN2< z7f7P8-)A@@2?bX#$NyxsjTyW<$K}!ok>J_V=;UXxmo;Y7acr5hrj^=b?a-F_TOwBq zE?U}|qM+o9=0|R5c~Q%)DHIo593oc>?*9mprF|mHUKK}o(NNI_4X zqy?B{!z;KL)U@R$kz4bCZ%7~2m)Pw&>!4!?$L!*5c~xs_o?&Hs)t;))RYMTQ=`F|@ Msu?03ouyd*2HY^VL;wH) diff --git a/tests/baselines/advanced/g2k1/weaponBasket.bytecode b/tests/baselines/advanced/g2k1/weaponBasket.bytecode deleted file mode 100644 index 3f0c225ba6de7840782e40a8bdf07796c334c092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmZWk&1%9x5S~Phn%e(lg`N!FdJw62tEcu6dM|6TCX2d}WUck)q0ndOi}bk`B0cof znKX#t!pwg2&3y9%02Tn$(dgM|BeafQXDU@h-Is7SBW$JWDHB|ah$1X_kxP-THAOYF zuSz!M`CRB%87%~qE)%N-4+U2es@#Sz=1{s^XyWmsZW(MLk{P^Lg%5+3iXl(Zjazw16TH%{ zks=Ze;>Xa_TS`RDc=tlGh?Q)Q=bd-<83RB909{(~>(Cn0dajJ}F`>|u(x@1Ith{u7 zaY?Ls=TLeqqm)_mNy|C955}XbV(QeI&*}i}Vcq7NHD6Fpt=Utqu`E%|uOq2dInsE9 zx`LT?x;%chxicEe3A*{Znf=XekK}Z!@mi?)Y9kcZc&SVU3)DzRsKsOykA}EHA8Fh| zP^CtwH-}R#3%vHsq@F;%kte35_YR=M$~!xUSv>_9d4M2`!X6qAH2Ij`qJ%k=%E2*s zr}p>J$-*mZ;$zVBCMU@y{LHue%innbk+YDn(0RF)^RSc-vJ2>4>Ho?6;GrvO9}l`+;n4#>1iYEP`OaNF0)E-B0DAkThptZ%#q9{T_EXW1#lsnlPB zxN+hSSpxOU*rZa$rIyF`ym{}9Z2*V>pv&P$hvS&zi&kgSQ0cKqs}n1EV1&b!p0V;%J!~pZvZiY^fU>@U z8z^Nsw$QT29II;NS-~0<*2GeCO{S40fi-eEC4+^PT0wD%7Q}Zw6ZNdIVvf=Z6cd_@ zh6=69MvQ5q4GDimsip#zwwGi?Fwgu4@aIJ9(F^=ezxMAF2l?O`MjX8bwvr|;ip77B z!JploeRxP*CyzzS`%)ff-52VT7eo?$k4?i?PBxW4M^Yrej>vkQy*cu`N8#xu}@SK>a#*(qD!g)ZD~ln&iGC!g}6 X+u-N$Ox$L;*DrS7Vt6||yw`sPzg4Mj diff --git a/tests/baselines/advanced/g2k1/weaponCatch Net.bytecode b/tests/baselines/advanced/g2k1/weaponCatch Net.bytecode deleted file mode 100644 index c4e0556ae46665be6bc028f42f370534f80fccf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmaJ-%T60H6upzj8nCZ4t{r_)VY07+nnkN_!aH{G&~9LG#78XG(Yk$yv0{fllY zAt84B3g2KU5o@j|35r-S(w*_S_uO-i2LJ*9C}H`hfb|0_)~YLw82DbG)v+FpPX)VJ z>aJ?_s?*czh+C=E3A23oQ&_)T#Clw;$;=BuA74GLFBDQTVVROJM~riQr7Uo-;KySa zNCP)ujZ9NvSgsFeMu^{H#u5g!0{%;i#a_xrBD2g`uyQ1>nOQdE>?$3iLGHc)LuTP5 zAJG1o!j@N{xkN@=yEGGAt3gKDnH7dwb}m&)?NCr@#c0dl5`SN?7fj(c?$m2BaS+mI z0+ly9_rwKB*ep%qTl~4<3d9vdiu@gqN;!&=Q%)K##BU{OMw7w;o~lW+@6U%G)Uf^3 z+TMrxgv}%^Rm&P0BCM(^b diff --git a/tests/baselines/advanced/g2k1/weaponDiamond Axe.bytecode b/tests/baselines/advanced/g2k1/weaponDiamond Axe.bytecode deleted file mode 100644 index 5139551ed0c7f2e4327433a20ad0390baa2a926a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmX|)y9&ZU5Jm6Cm}pALqczwEMbt(t?X9fWWDM(L6V?>!hxuI#N@{l{IB;O@Jum}+ z0dNg=9K*=KD!C_KS8^*971s0&yQ3m{QhnhMQm93K=65OtzgDuyYFXlBGH%pxDbV$} z3Mq_wm_p%>Mv1Z{#q&l~(jK<2kL-h0G7pAH*iN(M05X7eZMAr0GEw!p^bfi1YM>!auq6aRF6OzK$N`+XFwx1pnasR5 z9{>zMKyc;}wuFVz7bzN}PpXxrW0=uLa~uD$FJpn*ZOjXUEWxv~lS^pM0Uw+OT43(>dp#3KemBD4JalE#(7j-;@ z@&adb$8)__JG|$$y&z5{Jq8QYgNEJEvJQ2tJ zjwjqX;Wk9r>5yDuK-~}^dO9sXqIzYTP0*u^;XzgF3X*={yE`88pyCUrV_*&HJ?EZ? z;;<8iyMZf6$<~xk=>!wy~~4pFiYxkeG) z{NZ*idcuu-7ulj&dQR6BEiOacU8&8uwfnU@A^u)gG^rHD#ZqLiQ=4hQki!s}MN(o_ zIMBjzUG<)R6b5allNREj3(?o5Gup7QR-GR&eP<;?R?7oX9%$u(!GxaCAn+e5$hDaU zY&BWlpRG3*1u;4^SC*MEB#awXD=~{ToP}cTdn+l*N-}0Q5MwO65W44zwZjrbD#^(W zb0|EJY!5DoMu;hlir zzeJprI8I3-%S2WrnOkIDm5nOXR&u&%-vp>fiboW!Sss|zSpoTvY{th(m--UFcG&h& z-j;QAvHI+4Oib0L2<2Nn+qRE{A?OQ)FROD7KQM__UV*vBxR zlnXU&D1IM-03`h(xFZbdO>hy+q@1K?oT5pjiJO^z2bx*#Xa<3{p5?Y?*Yh_1R3x2c zX|KI&uTlC^o*o4;P-_+BF3$klllF*Y=Tq!_GViQ_0KOivC5mPe-XQe@yM|Xtwdt6a za4Uv%8dHy(W@OQZ$7fdZ0>lJ*c2QW#i~l$A*|Ior`xUdWD5yhxe3Bnc_%KQ_S(?6ts+qmEUC?wwF?we(spRj)_El^ zt93`61I6ZnVuch_bnvjKx!jYK*U{Fb58 zvzoL4(Q62cMq>`&Vw%kCt4kkd^XIgm&0i1CG+Z(L&=*z_aGhRjTsExa8V!Z{BnK0B zmk0DQVR`ydPK9jE5r9J@98Z`7ldUYJ<;mb)(y^Bc72Hr&ElYOeYPIRoURNwn0rn5R ZsfEjIK-J3#!o8F&736naZI-d|{{T>g36cN+ diff --git a/tests/baselines/advanced/g2k1/weaponGold Axe.bytecode b/tests/baselines/advanced/g2k1/weaponGold Axe.bytecode deleted file mode 100644 index aabd819996c2c1236a9ea381b923e1a9532591ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmX|*zfQw25XQfxp`qc=fD%VyY82)OgvwNPWI*i9COLv3aUv%`%S-Swi086I)tNIw zSog`_{myr103LvV<&MufVR@atBiVQQS{bTbWx{$Z8%26FkZXEW<4~jQ^zhOW=g_hx z3}jx(45}iGM%6VLS&pjHcrZlo)HiZN2E8huxux!!s_1o%C)YpFD7AuvXq8sXH>i}s z+O2mV{P4E8O)sOFus9Re%d_|!H^COCX=43PVJCTF17;k;?oH=>hiSY!FRm60rqemU u3lqC9?CjS^i9Prd_RtOTm+X%6?B4m6OO74({; diff --git a/tests/baselines/advanced/g2k1/weaponGold Hammer.bytecode b/tests/baselines/advanced/g2k1/weaponGold Hammer.bytecode deleted file mode 100644 index 726bd19d3c8df0f25dae36cd0454d72c01a10f8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmXYqy$*sv5QOJIK`jkGEySK^jM@-NYdh-`Ry?BzIVsc!^SLh3SbL{#@+C8~n^^!1 zK+j;uF^mnYkz3+zBiBMvWjC&2vsXlSYES$|3I~2Zld79jm9?_Q@#k@&j!OZX|4$C0 z!wr>CxS~^{u1WE-6OFXJ_H)TzSjF?vFb>|+Y`H+B;U#gXS*V>zyI6R9M0M5+P;*V~>f}pUp+ae-ML5t9a#7KmQ!AOSPVLM?vvz?uG zTMlY02R(4`Pw?(R6QYR;CodWgCV1md@HA#N9K7iBe)D5@8)MU%e)D|q`##V6d_PJ= zf{1iH{8Pa5J)WDscgYQ$24jyd2lnli&{^y7*Vn#x&0TZ+jSwGV&(f+>zk9{m=DEUW z7X!PSMHX%@wfv5AEwCG|*W^^;drN_1he_GDeeWHAZTmyVZV!;X=X=A5_Fa49cFV0- zK5)Win@P1NDRSNGWEg2E|LdB)n^#CmP24}%{dO1zlv#ENYX~cVvR8e9yRWVjVsiG_*@BcA`jY>$P z6}?BR99=S=&Q@kmkrnMJPL(Equ%a<(M&p+--!-GXqDS`>W<}3n9{JCLMwLMqRR*5h z%{x>P0na0V1NUW_3rPX!5Uk_JzJ~op5dKuMq65XjR*?LHoO$rbiVXBlRW&FBC0Sn9 zdtzh^hzZ@6nwegoKE^R-(yG>@zZ8xHA!n|F@}Hz)Nd>97!(XaD3sVsA+b(Wp*$5Mv ziDhxoib};YfU?r6e8;+tWbmh`KO$#a~;F(5|VGYykW+d0ENSR?9#Ey!*jGW)u^l52D zhq2az36AjKNvYF2~I=WF*D0 ziP~1ZGAH7|mhBoMKb>Zkz&eg0~gz zFyr~_fEI_b3n|2TZxlIU4%c+fjg6=+DTgrwFKSkFx~PVH0TdqO3-Km6p-Rcr&!zex z7^+}RrfHuMX3h4jFjLwLj z_U*0^vD4oi=;$puKR$+1=`qAE(e5U`A)v{Q^b#MnzmrB5O=y Zs}2XBOM(@+Coc@T`=v>hmKPfx{}+#UF8=@k diff --git a/tests/baselines/advanced/g2k1/weaponHat-Trading.bytecode b/tests/baselines/advanced/g2k1/weaponHat-Trading.bytecode deleted file mode 100644 index 61f9525ac21d59627d12d4da3d55497c52d65d67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2523 zcmaJ?O>Y}j6uskdoF*-hmYH!rfW~=AX`pozCn0<|Ng<_8sDwbY6a=E0*b`?IXT}*% zK8!#@BuKDe)jz?u0>J`-#0tcQ6;jzD@dpNtfi360`LJUls?PY$dH3FP-g)=E5RpPe zSv>qNgXcb;cUdZt>}}NTO7RWL zUo)9h{Ub(hJIw?m73F{2F%NC2bIbJaZhDqQJgDw9ebck$xM6$XZ$@JmWi8saT0Ry; zi3ryrPJQ1Z)3NEmtZ$QDty=^x20CVRjOduqF#zH0lSe09h~%x)E>-Hb<@jC^3M;Ik z>K-`Ys9P2I!(n7M*&o`#>u%j_QT!l*920_Tdp7x=U8`AM)AIH~wQtsuwYIloI=n(E zHekHz`yR#SrH(n)q2DlTR`I~xrv_K9Z~|@FRmYvXq)$(@f%K#Rg!zD;x(!Py)rzt0=Nxm@>hko>5a{QNs3(6D|g$w2`qiNad8 ztqcqR(V^UsGZVWL(;TBm%T?R-m&B2vh{@NHphgw*GDyx%eJX$E$06XC9&Tw{9}{6W z*|soe1o>P6z?9S~y$9Tvz{jZHCnkX$$;HNFEEv`*A4cqW4~xPPN*-az%C7NbR8e}; zwKaL{!-$ZaRXrG0+KQzIW9h!Yp009w@EE=xhapcG!TB84q;wR4?-*LMiPql`D)nW% zv}PeoYJCvNfjQ%XH55dy6#w%2A7EkvJQFB#Qp3cq9*Er%QYP65lijeVzxB2K@5)n8PgKx1H%P(`>EJIpU7yX|36Dxw> z|L_vzOrb1$sKn<}DFd1jg)%&t0{~jE0=oiC59TqNMXxNdAAC8E1Gvl`MMuoIavRX{ zN$hG2ao#gIPMF0#opPfG)mNmsn1KytBUsGIA)o%ty>t(r1t(NVnc1aS9|S`cTuC$y zX(9d-2tJZ17}G4JHw!Hmtt84Cin4%m7FP)|2Cr<0Xs__@xhA0h3q5#FX{%rMgeXUy zzQBr}7juIHC>5VTG#Ib_XL;gMSjOQ-fbol+KLvX5g1lUyDeY23mId+#1p2f$d`X7u U!E)hLS{j7M`B9mc7V97U7uFgs^#A|> diff --git a/tests/baselines/advanced/g2k1/weaponMemeCentral.bytecode b/tests/baselines/advanced/g2k1/weaponMemeCentral.bytecode deleted file mode 100644 index b53994a97eeca6cff556cb53d6f465b60bf9b910..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmY+8%?`mp6opT#TJ5@OV=;6qLj6P}Y&?Js2}?B-n$St9gy--)-f5DGEi=Q$O-^#Y zn|toP01N<@lqyrIE;Z-rA~`aC$yL|j>FmTdIire7Qls5DBJm|Tinw9t`A~p48A+C|cdWHpCiQHiVwc z8<}2}gu$q)A|s1IwHl9x=$*P+j%3iO;)TC7G{`#dbcJVE(6iJEI~R@8ih~iQGFZC> z+=?IG26yRYJQWsa!g|?a_Kn+MgVQvz{->~$EU^K5e1+W$=ln+LY0*qdIb0>ti>fX<;|vH gYj1V(XVa6(JM$Ro`nyP1=nd;ktO9Qmw($MY53)W#r~m)} diff --git a/tests/baselines/advanced/g2k1/weaponMining Bomb.bytecode b/tests/baselines/advanced/g2k1/weaponMining Bomb.bytecode deleted file mode 100644 index ab32fb952599ef38e9beb827191066b0bf1b4e71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 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 diff --git a/tests/baselines/advanced/g2k1/weaponRoller.bytecode b/tests/baselines/advanced/g2k1/weaponRoller.bytecode deleted file mode 100644 index c0f4c5dd12fb85e52eed2c1feac1631cff0b6c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmY*U%TB{E5ZtsOq2YB&oNKEHZd5=kPQCFsB5oWbH(7#(u_MQQgg@ZK&mg|bQY+5b zEdpU_|o)lLKsm9W&M^fB#+M>D<8dc+@6Db~$)>7OuwGDNx z`aY+el{v>b@&*=C@p5^3KF+7~8C5$Ji(hS&)4JyPXKda;A%&()G*Durm2BZrA-*EO zi*1;?pBmIuFrY;tXF@|MXVsIEoTGvkmY@}@Dpa)4ObR!s+w9F-!(BRxK8S%VO^lbA z&hbUOg7C-arJuxfvyD%T9}KSjwM`PU6ZHSZ;;*yeCD?F~1%2BTCT5qIp5<1Hvc&A! Wdp{e*D}Q3yfn(l;n8R&P7<~hJUur`D diff --git a/tests/baselines/advanced/g2k1/weaponRope.bytecode b/tests/baselines/advanced/g2k1/weaponRope.bytecode deleted file mode 100644 index 59856288e33c41b40f23acd766efaa5cec91802d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmZQzU|?imU|<1a5MTmgAs}YV&kIjYEXdDu%PdMw0m(1}F;8)JW&uNSYDr>VCP)mV eOPuiw1E07t7pJ(C=m!R|4~%RIBA*%9*|`8H^bV5% diff --git a/tests/baselines/advanced/g2k1/weaponShovel.bytecode b/tests/baselines/advanced/g2k1/weaponShovel.bytecode deleted file mode 100644 index 4f7aa25915a2302658e0bf9dbaab842275c070c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmY*WO>fgc5S?`rrwNpP;Mh_RwALbVi%Qx^MG8$NsMQk^hpK0%Sz1@A9XaktxNzu+ z16O_t;>O?MhP0BSN}S-$I%!gC*E{pxyqV`U5eXtHWAkHSuVafOK2hN?iGwIreP&A7 z--cJ&E!`51F^#DorPNEpv=6X2$D}TY;3B%9UV%{$a+k^43!vaHMapFD@!M*pgf^hhJWEZxp+Gx1QTu3>oH+5@ouho zXjNk3<6L3Jk~9EXTis*4_6sjY{ur!0R302~k!GKIM^hR<9Zh%k#W@TogF@N>G{5 zZxk+L-eypmC*8&5OYk1X{!EP8Vj^l+=Z*3**@BU zS_D^YC;vB9+;2DE5dP(=w70yChF){^IwF*t`>V)?evTmy&IYax%hj$88{*J&Al_{+ Msy(AdQMFqC5A<#PssI20 diff --git a/tests/baselines/advanced/g2k1/weaponSkip.bytecode b/tests/baselines/advanced/g2k1/weaponSkip.bytecode deleted file mode 100644 index 59856288e33c41b40f23acd766efaa5cec91802d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmZQzU|?imU|<1a5MTmgAs}YV&kIjYEXdDu%PdMw0m(1}F;8)JW&uNSYDr>VCP)mV eOPuiw1E07t7pJ(C=m!R|4~%RIBA*%9*|`8H^bV5% diff --git a/tests/baselines/advanced/g2k1/weaponSpin.bytecode b/tests/baselines/advanced/g2k1/weaponSpin.bytecode deleted file mode 100644 index 9cab2f369e0b781f09ddd298c5a1afadb74ff0ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmaJ-O;5r=5S`_tNKxUi7W5)y@oEJ0)&Mbvcr}rDG$pK|2HK_tL-k;y9z6LoOuQR! z{ttgflO>#;-GX>9Hl23n&D*#01^@^Eq%h=@z^Gyn*Ex1a;RUxm*Xh_k@5}C+>zvyo z?oP(CN@8@qDNMl&A%tMy-tghT9dfYY8hX%kEx!-FDfB|P@;Sfd2#vzaz_Xni1bl2c zw){y+A0}Sk8uR!J3gbZJi_A!&*wC}@Mg;7`hzP4tLCkI)frJE-2+V8yM-XEvR;qs* zQJPT!af1BBX=(;9S;Vy^u1Ot*KTABrjA*T@E~%*F6_bj#xc#{r@}2Yy?o_u(#XS`*Dt7m(XD2wv1FELjwxnw8uuO!^(kk0itx^YBuSGgP zKv(E6$Fy>BXDeDaq7BR>-T))o)XL~Fvs}<>{-42{=s~B#$5ET+({BPaG8Q!0jwbcDIP_F;=4yvo~N0R@Ha&Az$>^F zvbu^izUHNtl#t~~sT1M`BqUq-2)?NTHg>TQ=G746p~b$aYO?{3Z(F$R8fZY3#SD37 zZDDBmj`>fb38}rvtA8A$ICi_AR2{Hj7@I!umF+9%70DgutFE?i|5DrI;QHxjxpFNYMcd)GF9iy?iVp8-Fu_P1#Z&PHv5$b>v?s0gUR2u X7hz$~@Osycq`^>zbZ~_iE$6tuN~e}l diff --git a/tests/baselines/advanced/g2k1/weaponTorch.bytecode b/tests/baselines/advanced/g2k1/weaponTorch.bytecode deleted file mode 100644 index 4329599bb647039167c047ccf473d2a9b7d9de41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmYj~O$x#=5QV2dwzdlw(jRbDts6IPyg@+^;KpSMZO~wCN*WNCf@ktvf%X7S(v4vr zyqUaj1^_Goa8df%s3pqc?S+z#wg)Poxx6Y~Qul$(05$Y-zH%Ro{MFBOKF17^L4sLGG>H5f;$^KDJiAiIpw&XqU#y r!Ag|tW$0&ElV6#s=ViF4K*-Ox(O}1F{=r!AhlKw~kSIj-9Y6d5ESyI> diff --git a/tests/baselines/advanced/g2k1/weaponTrading Item.bytecode b/tests/baselines/advanced/g2k1/weaponTrading Item.bytecode deleted file mode 100644 index b1fb752ee429e4d904bdb6c49bafc55d71888125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3052 zcmZ`*OKcle6n*ot6DNfRuxHZHkEfF~K$|pm6KKI{3yAPrf<(It)6Bye5znOdX<@``$zdp$Q>O zeCbce_ZGhP+J^KxK`h(;Rnni{+Vs6x_7&QxD11wLn^CwDbfgateLM=^4B9fOVSoSXD)uOXaC=obis2HyEB9j5M?r+X+~rlc)#m3~v=zo`g-vY8 zH57*!H*mj+F075z5_o(`(839dBD~Zg_hl z=u&OPRs5`y+?BBx27;DbVQ_7WJ019>VB~)H;79~I0!8btM>}G7C-CES(eZpQY;8#4 z?+PFJ`x_K{Vpou7&~Ax!G=`qw9=2$;9dxrTax3OH!-5fIj|CNo{xG4HWi2gTvd@lH zY%3Avx?M}OudPIPYl%_a7x-9-S+3(bk~zX!a_yN0p5^R0LeGLr1-4NaipIBAQW-29 zj-9^lyke#ztiU+tDi!-VJxV(2I&5I4byl#faxK=i{bg1jb*lSXlOo35X%#oy=U^oV zuq7?kCe*gDIszXi&RB?52^}kWC}Z>!@h-X3q{#@~gr;275N40GBg0x9T8<%FMzf)% z;!{9BT&@%JgCMnost5(dY(t0`bD5iB!nim32s$I&q1@Q&(OPnFMNh>|EGB625f+co z;+JCQsKt*C^^!LHm^)qFAD`va{gzRuVBk(^Z)a|bN#MH{c2$`U(`%q1~)J)X^Y_Uh@Dl=q92xlIXcAOb+^pgPh2Eg?k{PWzR z7r^yi2L9o|nuC7^6~MFFD2Wl58%4w~`;i%7jgfBmW!!nxJHI+oX9Ok0oTZIjq!ms!!>50D&RIDJ`mTK>&Iufr5yJY zSo#GsNMe4a0*ex}FjM1WSf|{4Zg^$}BZJX#T^cWA-JYr?xX@EY%5T z4!`QG@@(`PHWZU&o5kEdf#V?W}1fOJ%rJT)M-I+c=~KaIEBMls<3z{JdaOKZ0EMB_JP*ij+K;bWp3GVCUsQZXfi7?9JOb(ZsB-0 zK{Q;H?q?S?(MQ0yCd=|nhK+$1)VXK1$M7rCy j)!`zWAoE-`wPeJs?_RezAPjrt;!Sy0gZn!Df@=K-d`pnY diff --git a/tests/baselines/advanced/g2k1/weaponWater Can.bytecode b/tests/baselines/advanced/g2k1/weaponWater Can.bytecode deleted file mode 100644 index 72ede4b7794be1fe4ae889a694e61416686dd380..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749 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 DL=5n5D18)rz@w+*i4*VxF`SX-AtF!s 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 diff --git a/tests/baselines/advanced/graalx/weapon%045CarSystem.json b/tests/baselines/advanced/graalx/weapon%045CarSystem.json index 4a1717a..423e373 100644 --- a/tests/baselines/advanced/graalx/weapon%045CarSystem.json +++ b/tests/baselines/advanced/graalx/weapon%045CarSystem.json @@ -1,12 +1,12 @@ { - "bytecode_hash": "c537528f746fccd7ad8da9319ec365b7f031bd4b2bf8bc3d5462929d3381d3fb", + "bytecode_hash": "8a0a716b615c93b4c193b313671e4151593cf0097c348dd32f77e68275edfd94", "bytecode_size": 5908, "compilation_success": true, "expected_failure": false, "error_message": "", "metadata": { "script_path": "advanced/graalx/weapon%045CarSystem.gs2", - "generated_at": "2026-01-04 18:39:05", - "compiler_version": "modified_1767569912" + "generated_at": "2026-02-23 11:42:04", + "compiler_version": "modified_1771863608" } } \ No newline at end of file diff --git a/tests/baselines/advanced/graalx/weapon%045Movement.bytecode b/tests/baselines/advanced/graalx/weapon%045Movement.bytecode deleted file mode 100644 index d537e2777049f6b471810aed9ca60a4d4d4eabff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2946 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 E|FEE7umAu6 diff --git a/tests/baselines/advanced/graalx/weapon+DogTag.bytecode b/tests/baselines/advanced/graalx/weapon+DogTag.bytecode deleted file mode 100644 index cff2da99ff1c3f0f5be555f37098a21b0d7bf62a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1631 zcmah|O>f&q5FOc$-8f0>q$CyhLzYB4b==4wa@<298>ke=HEb6_qr~k=*oZ4?W0Fgg zD=Q9=Qx5qD2@3Q_Q!fR2UV!=mnWacaO65iX#ogK2_ujl20zd`;Ch$?e zF?k(hlh0M!LABtxOYg2&%L`Wpq7e^WA3kR$6|uIP`@vTV9kdlfR1&efTqK!CxYc9vylWKqz)cas~e+&!-;i5g0K~EmjnSh1%)e4eG1?GSo?mv{`0-< z#%_K400K%JkGK@>aJx=yIPMTnFmamf8;8uZco!@|Y-Yg^5BB%LqM-=*dl@Cz>986{ zZQOxQNKvyN@D_6@q;Hp7#DOO9Tz*1<(M@Jv+ToM~c<>(!su3$CprL)#=cF{Mk%g|{jz{uU6+Y9gl(GSOWm%QlBgstYaNfhXlpblpw&saB=T|qy2Z#e~A0qB%;}-C(7%DWY@K0SMIlY z7uT^ZywwURcAdGzrqHIug0wcD1jG&1jN(v_Kg;ySCbR3)7k@V-n1&qFWoD_I)#bP$ zC*}=#!7LsZZ^nnXn=~i$>3Yi4FUqOY7xT4br`(2%o96jZbaFXO+%g|aR`8)ExBVf$-{ zZ8l~5LYH3-lj<@z1TfbJfF3HMYE&) z`C5(WEnSvyrj|_vTEVG#XVK~q^jgx-KS%eWtVMq$Ey!!pVt*5uTBJ#EEp^USD} nDSc}ZObvWU8~7o8gX0I!i&}IgR9a^cWh4HUk`Y%|rl#Kl9J>&K diff --git a/tests/baselines/advanced/graalx/weapon+Food.bytecode b/tests/baselines/advanced/graalx/weapon+Food.bytecode deleted file mode 100644 index d0d403b743a40073066fee848ed63fc84bb18d33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmXw!-%i3X6vod0hv0w1x?5!4=mjyT4`38xGzOzY=PT!WZ(&7it3W z+K#Z3e97teYrp0L01E&rM){PC4vj3qUy+Ul?=gvCPRd5VNg6VR2@IYURV;X+5>h_m zV$OZ>{(*slAZEywY_D(nYXhbj8;s$6l?t(-;f%`ZP>O^~Ni)cERW?Srdb+;t4&ENS zey`uZfk{faVk(1iOf!^2iTH)U0>N2ABZTPFPcR%YWxi09GoWEO6e0vp6GKx5O0ppr)Lt~dV9+83A5aSOa<9&8i6V>jI*+tIs3?>Ty(=mWdiSU|N}{|5}; Bc-Q~{ diff --git a/tests/baselines/advanced/graalx/weapon+Guns.bytecode b/tests/baselines/advanced/graalx/weapon+Guns.bytecode deleted file mode 100644 index 98a8b4f38cffd958fd94ff556d15e3d923b2c447..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3885 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 JfVt{C`7bic<)#1t diff --git a/tests/baselines/advanced/graalx/weapon+Guns_M4.bytecode b/tests/baselines/advanced/graalx/weapon+Guns_M4.bytecode deleted file mode 100644 index db1efcae0389a67c340f05d7a688d3b1157f05cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3916 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 F{sbH5#$Nyc diff --git a/tests/baselines/advanced/graalx/weapon+Melee.bytecode b/tests/baselines/advanced/graalx/weapon+Melee.bytecode deleted file mode 100644 index a7b695c36567768912e68a497cde14e176bc6cdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1256 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 diff --git a/tests/baselines/advanced/graalx/weapon-BuySys.bytecode b/tests/baselines/advanced/graalx/weapon-BuySys.bytecode deleted file mode 100644 index e8416be9a512c72ae838576176647f7002ae5d93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1921 zcmbtTOLH4V5bl)~nV45Xv@1CVN7jnq1PHPW2?>D^DY4=zhq%g695_&`)kvDE)vmk` z%Sv(M$blPh<4@$uzu?A!;zSh(YAUNAz&EqIdQ?bpK&tKT>FN2t?w%eZ(ugRJPyTZF z9^unG_pTjs&uuxJx#1D-GU!RwoT!Cs4HGZ7J(nz%fbyl#UvjtWjqCK;7Y7H_WkKkBIOz5~YDYZT zY=yo0J+jhKw(SY&(Af%Dyqg-nHmgTfO7X%KCe6PnH zCOMi;#1fvv)ES~GLVA^l%#G-T2fTyOG4F;0I;Ft&8FQ1>BweLUX-S{sd|g6ILnWWm zJUoz|j3x@0H+Hj3ddN(brHpU_#tuo__8iZrdIf(vjC^}w1+21T;0{%`>B^#~L5Fhu zZdE8iru~SMt%jUNjx}L^&-XAeooLeGk4a6R3<-VS?=wGO{t5GGl=c>LFP~2SrZ&x8 zFa2T&G9ff6a#E~Fk(c6(xx02&n`(a=qF{*Cc796L66~5GUN8$!3~|<+onJBEY+!49 zb8}M{Yt^fb+7DCh4@11T4);q^ye!2lQoJg~x#E<5hd!^1*Pt%wq6nqy!hkB3A!QET|mxTW--p}s;LVz_19p_ zy9g1ughZ$NDne7dzN!sEdGcP8YjS~o1XgAU; zK=aU*65{7seTWr`y$O{SdmA>g+J@Rd+n>yU4RLE3u=#wzkDdXX()a&@csoH%FHZYO zA^yk3sTsi~K6`O!5}C<(YTuwRtXIqi#`e2xQPsuA$8hJ&>ai|9IbKNfK5W!|sIrXj zEtGv{ImzGtUy`cfpCShhIV|vRE%6`C__O;&8Gqx{856JS?p`h~S8(gA>gD2X8ls7o zw9NI!{8=sqs5e?G#@e^KxVM*|<}Q|C7~;Mz_6*T30O)cl3nBzPnD0Foe0A*~4o-x- diff --git a/tests/baselines/advanced/graalx/weapon-DRescript.bytecode b/tests/baselines/advanced/graalx/weapon-DRescript.bytecode deleted file mode 100644 index 9fc8a5ef6e00ad6766b1cc0dd9b8da4821fec135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38 dcmZQzU|?imU|<1a5MY8(49rj(B+kgr1pon803iSX diff --git a/tests/baselines/advanced/graalx/weapon-Death.bytecode b/tests/baselines/advanced/graalx/weapon-Death.bytecode deleted file mode 100644 index 3898b679543b613e52eafa67e9578c7b36232237..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2664 zcmb7EOLNm!6h2mhLsD8=YRLpB$Wa1?)^6-1ltO^!!JE(pFtn?TY+Wo(WXVW!jM)|U zH?%*ZTiRVa(`gr!U0L)8u$cwsMdGy{M*fCy-3*VbGreZ$&`N;8>$iKJ z0M8aq(~gFRu45rWX#3r^@AlXTFr*<`awu5w(o~Rk8Gi* z8>#pFj^6b5o0qJM?b8m0%EC@snsfhf`K z#JkKFoJ`AF3!5~Y(gW@uzY+p;E57~|*UVGp`;Qk${!nf(GE$tI7=NNkG74K%gOD?d zs#IoJ95IT;!q%z6R#}y!Gl{5WBG5esImRf&Bbf+vZ-%BK(D4jS zMW7QInuzNJRKho43Be(_CVtFKKHYrN>!Cw9HodTsyqmA2LF@L@c$uJ`gaJ)#VdPLGR)xzO@6M*B|v0MJ(xNP5}0{MusX^Re4F1m-G5?6LZO?ajYB2^5p-nDEye+_nhwet903> zZrfzu@bg$?! z)PukHrSSg&;uqIhwQJ0+2XH9gxz3~+*kU!=j&wbWUCV5XnZiY*t}|`>J5{4`dzU%V zrMOPXV@AL%0rRu;`|I~@$8z_^u~&6{cCXI7hS>f!hAdTW&&yplE-{s0#lkOeakRSx9%Wf#VE7&m5Kq54Z~qHU!Sw7T(_$h_5x#blfpXm zNvmc%v9ZdGTBJt>(&E~}0$I!tJhwsZhA?ruCC~nxkyICrTBO~Xrhx4SG+VdBGnN9c zN)=|8D*^2op6JS~XBgFz>j1P$JD$5~SD8qds@7SUv=liP*`6*dE$Xyu`}PI`_iQVu zkZCwIcb5r?CWu0W$Jn=Pv2Ht&E;{@`c6gr}6c`)v8CRo1g_LDVs`%)%i3%lhND!St z#^~a}MKUbQjE*7Q{ zBGDkmCOP5`Od~KWvX%~Xlw{d~>qTdqppxO3ta^wQO>oWFW;3?u2g}UgaUF|!!adCqx$HMn6pt@iC8V`u3x4iC_>C)#q|S{OA$9Es3URNtT1ys zj4FeH1-7{@xWv2mXqz=qUMO8Ww9oLc#8=?h?@B9uGIzD__+yPzKBsa;<*AVZthBIt zRDMk5nUR9Vdo}*TY)^~y9Q0w0AJ1o?^=0&IlX@kJ#!qPcq{d$aTo`jIKa_2r@Zp+4 zX7L;_ddCI^22_4}=t5!mprw4R@iW;L9f05^m7j%pS>;)XQz}=HH}n9y){iBJuxjnN?sA$d6sFxC`Z+4>oa|G%$C0{rid@=$4 zRtLC}KLR{1`NYwv^9j_8A?l^*Qr9GE4!P|vkHbP|FSh}kH=v`jry&VA7Mg(ueimomuSW6JR)0H45%JpmfEN1&%kSE6aJq$F8 zE21)$zpwEdnZzS_F7WVqw0A^)7q`Z5YWxFiDlLU40$~0N^Cqr1^)Qr5Bnk4vj4mRO ziidP-Ce>1YgEA?UKRP&n()d(ub?0mYF8k1iE z;hc?}QQq(u2uaVwn#!TF>8LUxm4_oL|0vNK1yng)tIF@Fd=6Oi`HbXM`2s!zDOY}6 zo?$L`V|LN>TM6U{<*qmQ>4x*D8_pBpEInV%J%RER zd&`Nv!{Nc@0&68NI(!F#e@bg$F#Gq!_{4R(S;$42##cLL4sYlaBx`(4<@Z66ZsW`e X3xq{rwGSnMv&~}#+)wmX?(O>@Gi^`v diff --git a/tests/baselines/advanced/graalx/weapon-FoodSys.bytecode b/tests/baselines/advanced/graalx/weapon-FoodSys.bytecode deleted file mode 100644 index 9fc8a5ef6e00ad6766b1cc0dd9b8da4821fec135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38 dcmZQzU|?imU|<1a5MY8(49rj(B+kgr1pon803iSX diff --git a/tests/baselines/advanced/graalx/weapon-Functions.bytecode b/tests/baselines/advanced/graalx/weapon-Functions.bytecode deleted file mode 100644 index a5dd8c0bf79e2746b10a151388b73053cd024cbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmZXQ%}T>S5XUENY;F98OoE`$7(GTveT1I9DLsZXS=z;Xlw{MItKNJb@vVe`_5s{Y zT8ebxzwG>H=Eu$efCd1%lsX-$8>!nod*La|E1_I1&&CA{1&dYGmHM5|%Dl?r5+WW< zc@al*UMzfX^tcL_|GY!TZ)#Lin^UjWi?|mRJbGiI4CX9c)?3=%OxpzqC!qGP{mZS@}!QHp_ fha;;e&g1PD)>(K%}^wtnKcv zPk-n1*QZYpV=TiM%i)jyWicGb-!J^Y@B#q6e+{@VJ3qZ#W*Fn|n)JMj(-kuCr(cmg_9p7Iy;Qs&TTr3&7(>z-u(R z=Q?lj_NvEyUjn_iq}O%uPP)#^Zfn!#SZ{8_xVMpv=%(Rp`>;_yXxdLshXJPy-cK4V z+O}mlCb{WQd@3zEYp=U4pWoQy9{5=geEh}4_SlraSGy9>w$Q zMPe#0xlZ7@HY2;hvlI>I#j(M+4Rj4>O*P zPS+z%JBy^m%z#ilfs$|-bB8xm_$whm(I!2_xf7$zVs~82;Wg7XaPEGE`KD*>1h(5~ zTE1^Nje5(GspD7bhV63}SWWJ>g32_juzqILYB$||xyw$(RmvHfA}N^fdV%ZJAhh9| za>TZITW+oTmgUs2eC5{iGOHokJ+}>MY)FX|#BON=BtD&!$JSvXxsmLyZL@1FOZAol z&t^NGTeoZo-LkIQEv{x(L-2sL*}hc^w%8W88e0LQ3j>a;IKx^S2V|LSuLH%Nh>do$ zVex(GC1j7Vh`(+H$Q0Zy<;1kP;W;k0#HJY8P7wh~Lf~e5$3P?!kJ8d=8VyPdwRbgw zxfy0H+$yb-K`0~&!Iu?4`B(jLs{th%C0Kk1Ov7m!2UgQMRN!)k+M zYgti@3A`$0mIWypkt$J9MDcZ&7r-=7ruZH-QV!OQO`q*qzJ`iaT#MyuIypr)&84`p1JeWUH) zsMlrABD`hGS0P3@8)A{d)5U4jKD*UKnVc@pT%1=bE4~?q%NyQ2`Cf!I(~!kLUikFG zlhBh*M#tKe<&8CX5M{PZ#yz?Ib*IJ;XiipERCTEelev2e`#LQnnh zq>Fw{43M9jx_EM27f+RR@ifRXM`h_D9!bm3!7_9BTV0%i*%vhN`3Z8a>?I0@XG;0v zU^Mt5>;{Jb4tIlJ0{Cn<_+^04g&_QlV3-Oedn8dQAk$029$MyNi9Rv>4DHK9w5?Z=sG4|H z6W4U{TGW4?`iLU)PhEUV7jIx`wp@PjVDNceEa!_+i!CXK*OkNG>u{)v73Cyz8*Qa< zk~xnS0o)h`%N6*SZ3W;yatN({cKiJO>P8^+H%{oESD&xUgJR;bP&L8Am+C}Fmu z`W5OYa(hmtb@mUq-*01PY*(?o6SDkXhWjoSAv`*rg^~=Ta6Ab{x*f!DrSRE>$@0b7 z8Fsnw+3e)Z+{`>%cpHXyFE3yzHbF}(YUyK^y@O?rT!v(Qk0LJ|KZE8?az$&8$~cVy zO?+Dy@BK~}-$BB4)Ry-syU_t|r&Q@#*F}{S!x?-RjiHH6G_g?d{WQrApCf3@lo&lv z#9|<{nld|s2I<#}2I<#_2B%XicLLyPju#%y;iow2364gZW95+?C+zPjlC7Ae6Offs zB=>Qs2&A}!wGT^?IK0cG&9)}!P;E`nsHxZ-l`lOH(mqJr z&r17NivHaM{j+IvlnUfhmpDoLy|jHp+V7|6{RI7UY4Z z?8=+;KjsapavKz~D&s9uE)G=|<#2Aepx?th*uRhF@mYCS6F-Re+KK)BRP4Q|;L-J` z4g4Qs*TjT!5xywBi-=tpk9|?15WCy>ZPdjF>iPUYRy%x|eTX^y*TqL&Pb?mGT^v0G zW={iqy1_1on)so7eaCh+@uS_bbHimhL^OCj(^Es`uC=iIaS0D5eOY{5%G1hwB?*@4 z`{f?K6HvDwwG&<3mtUIq(ZLJ#6kWp&FjY%buy4yA-eai%HVZ%M!vGWa=|k)%U7xRg G1OEkICO4M= diff --git a/tests/baselines/advanced/graalx/weapon-GangSys.bytecode b/tests/baselines/advanced/graalx/weapon-GangSys.bytecode deleted file mode 100644 index aff10012e1daa2f2f182735570bbc74e59a0a830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9797 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 diff --git a/tests/baselines/advanced/graalx/weapon-GraalDB.bytecode b/tests/baselines/advanced/graalx/weapon-GraalDB.bytecode deleted file mode 100644 index 2b3e226354063580d7a5f6c52edc2eeb96e72fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3031 zcma)7TW=dh6h4lF)0RTG*z1Nux`|WMmNpmnLJ18em&OewZJH*eg+jaWPV80JyUy-9 z7v3N*Jkl4C_!$U+RKyEN@FRHSi3g;W9NziP%&xOeTZu^CIdkTmZ@%-LnF$f4h^QMs z{_Dc;EBs8;U1^v`AYi9<-G*?=D|4{vrt6eNFt^C|pRUsmqCZ?`(lptfa-C^UAeU#U z4cA$=>cVXXn5AcDrtVKQgTQr0hmlYTEZ1TGa@#+a^ivwtF8adT6drADZ4FmF!?3r9 zn?5y+s-Tgoxi-?2M28!-1{tQg@5iKxRJmXZ+t{IYQE@>szbXQ&A)_jFlRUA}6n;<( zf(FI4y3UfQ2y0W!7=b|*BdFBGrf>p+LI$ljZCe^vgB+tSsM@qB@T_W8coB6_q^m}y z5=;=jZWF0R$ErN!@CjmziY6qh`4d#JEkJwZ2S(siaou&z*hxI0V%2b}6U1LC)*2Jk zs0qUkYE*n^*)|Z0b=MI)@S|qo$q7n{T6J5A32_$uDh2LC;rOJVW$COy)Ts`y5%tBQ z8!Pkkq|<`%edw*Pdv0A{6>HOr<2v~w;LduGtZMmz@X&Cyan*86cWabPsOY&nRBl?z zH63_1#B=KIrr^;NzV*4Z>c+NJk8R6Qc1>8-T7W)#taO1qeCen<@uCsqYczzyuq~L zRD{ifRU$s^{4tuWR74|S#AWc9bJkskWIGAS^J~yMh6G6;>UR*0F*t9OuGJ08)+bHV z8;=(lU^GVOiQJ)K`2Lpb$yUVMj&an&d_0v!LO11!IV?trEvEx zXf$^$YD`ojZ(1UBX5I4Y9o$MR5fzyb&ZOW1F!Euaz;Q$=#FuP*WTfL_^OYpNpG};W zyKd9d#kL00+y`Td8-XSe~37fx+yozo=6nc)E}%N0kjd&LCTrj+)-uWJ%8` z?z!;nZ1-O35bG;lQeSDMcCiSVVwF;RDG^5z*3NMvdxjz82xE>GvaOUd22|vi1J@C> zdRRtj;aC~7899+3uqkb*NPI^N1CXPHeQw1eAQCMo*b6#VkLOW#E<7)TSp2wf=#(i8 z98#yL-F($~K400^6=c4rg%=VcVOh2AV&NE9^mSj47G8?Deg~{eXzSaB42)C#{r$P{ z^5B`$&^LQ&;JkCJq=n;s_`J)XEBu+r?$Kk6@8!a)7~ao?lNhFQ;WUOBPPm4MUop<& z?0na_OT7AtN+Uyr019RL)7@J?NmA zzI+hxe^T6sj8EZ#YZzUo{iiu`{rYhI(m!kAJzTgcyjTz9$jUG_}>^lCJtZQL4gZC!=SiLv3_Co{TZ^~!2 KeOzbHk^cbkr~_vJ diff --git a/tests/baselines/advanced/graalx/weapon-Gravity.bytecode b/tests/baselines/advanced/graalx/weapon-Gravity.bytecode deleted file mode 100644 index f1db79be3401fe04447992af1769966cf5909a94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmaJ;O>fgc5S?{`O~ZFFPT>%BwTJ_UsC8AuA(1FVMS?>l1V6wejvGkq$gCSI@dr4; zPvL+#@sGG{m8fUlY-5y4EtbZ5GjHb2#}bhsqB@K}2eu0nS^6T6BOMPp`Z!D9j;C=} zXr>;#%%kJ?g>Gl*!9b6*lv8T3GAU*R%TY(kFq@|qjiSkfJ`~g0$GD_n9?hQ@TBGVy ztXVau1kPYGj#Ev^G&`n*lW8`I$~Z6SGiB+VB}#$-tJ2^o($pV~sK?&B84rLBoI)(c zo913)<7Z$<`KLSWClmq;i+3${)^JVviy9}?0Um|Tz+7>+n_RcEPl0jWZGS=Dny9B_ zeJM5rbM;|hHk1VYy1t|XNHo;_P%P=t!Yvj>O4kT#Uy4x$cggr^;ZV zmHLk=cDZ`@Y^5!hI5}HjA-We#|L2^RxOCE!Dvu{^;un}(u08L6&a-}fJ1Z&KMfJr` zW-o7lEqme6z5*}e;lT;3h^N@#wz_BT;8>!+V)&IrZ^dk`GkihOUom$>hUV2_iQkDW<>v`HH$X`!TTLffQm+LC@kpit7u_}LzHJkOnZ z&IeVnh>%#af-OsSNC+WV04pSZ1;mO)ffd{GBwLk`K;^tQGtM{_k?pzn&b{aU&YKA# zL?eWx@RffFe0_X}nR~^qQP$v4wA;*`tCvhpPhOBdZ&_7p-8g4gs@%2R3QR;}?g@{= zqa?Kqb0;ls!{*r3<(KUeg*EZ9io0amF0|wy%stN&)ZQx?ZKJ@)4`yb5?U?X+ELlGPO9Vo1R(oi85N%3gKu> z{VbUtsZc)cnWiJV1zfvL2k9M|wbHN$UAjC}N27j~E!(vUv8tw9p^%nrpIE9#k5sAY z@G8k4$dg4f>Di{E{5f6W>j7^tRtqCY-7#0GS7R<+C1$P0YUT=20y#qR#AWpx>gnJB;=*zBYQrs2Z)n+EQdI%c zTcVzanz+4$VB&_Jm4%w^q9lNtwuf<`%`loMmMnu%9$6(TgnM?SLcMUy2=Krnhp~D) zjZ{#sZ+Vou%XSH?Fr9kUluKZI(ychO7?TM$=ukpyHkUcf24^1QrX(#fIXA6po%yy> zOBB7MQW6N*5~6$`o~&F(-x!hSbK5O@3=?-fRtDp^ZK-LSE9*)mfr@3SSZLSG3YGoK zb`-^G3};2L#FM8$HbWMj25dpWex1rLxktHGU5SKM;!(`ck`%^|St^}lmg$^lCA(~+ zy&7MwqgkuU6dC;d35S|UP#`7NzxtM{07wCNJKh+tPX=Q|y-SHCdO04_3IG9F} z!v+o)IHuiIrxBwq@FVwyJE0$B0ZiM&{Ke&_)AoRNWdyIiqT*W4bsb z%TDaq#bG3Q7D=$ku34b<16bOggH0ZEd{mh9mefl>XulPec0`qSEIPg$TYn$X3`BCs;eA}*&e7F>qGmLi_mQ^t-$ z=H4*qa7?PxhO!m#d)g?B!|@FII&1WW(o9=AC)XQV&&T8oMzDcjaeHTY|3%!_LU|T) zPbgo6JR8cF3?#Z7b5w>aIF561kC)&PrBxoM3^}=x4%_@jn3v&%_e31%l?P2%H-^2s zG1+N3o@pbF^O}J-Q$}4_@<^w)C=D;BBDhj&TXnIB W{{-k%qLus;LRkub=VgZOp8o()2`~Hr diff --git a/tests/baselines/advanced/graalx/weapon-HotelSys.bytecode b/tests/baselines/advanced/graalx/weapon-HotelSys.bytecode deleted file mode 100644 index dd70eaa5d69d3f9faf30e39a2a48537c70c8bde4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3904 zcmbtW-ESOM6~DXQ+D#x%)9f85K$5Z70Xqc8J8QeNKuhApN!uh2v6Ggj#2xS4^-i)o zvzeK-y`g;7Ewq%6hBoB|RY(Z&*cafT68`}bZxzox@pzE;wGzK`?~J`m5we6O-*fM| z=j)#HJ7-o1krP4`@XvpF{C9*Hcq$CewUZ>B+$^bvswUuz0U;jw zy}5hA54>PK%4wOmS$U+E8wEHG~tRQK8YHl6@@jwp_qHF(N^Z>TFTt;y`(Pc%3rG|VpGIbJUTGU zPI^i&6SbLU#-0xYq`V=jZqRf${ic5(iE@KT#p$lv2xFC|aj6Q?275O<9a9>M;bgJ2 z!q{ivh&kJtK{g`){*r&+57q=81t95d-RPV{)!fF0+ld!zHLz?;6> z==GTKGM_a+K{bI>^X4$f1Vj%gt8P-Qt93{Twb^n54@gH{s%aVwTuf7}ob^1NY26~d zp3Qycw>)b*b5For!dA=E)3!4$Shv5svR+Danfkb{YRGk6I2B_hJLAn<8W?5Z_d358 zwr;eTnfYg-RzEP7!Mg0nNhYG9e?8oY#d-8#qU>vp4wCM9;0Z5GG!R>EQrDY+vAODc zn)1R;v8qp;C)Wp{W8KTj$gHWv^mck~hV59z8h;(pbJ!FihJ!$wqK>cg9&t>)-DNxd z$8y?VGbyd4)JbXCbm5#KvxdwVQZd9aq%0!t+N`IYw71Kq;b#n~7~&WL6^w*Az0T@& zMz0mUI(lV&of{lgGhA0QXdvjM-{taS*AGX) z))CIE{p7T0umBHhd^H~ZB-btcWu&rypGCr=+{Hpy92~)Z+@gGG(4v8qc@)fnj9EyT zB`^zy`DcqBDM=b+1E;~x4;Ht@(5~?zi}p!+^pu0U{ZRQ#Y0&2&N8gZc8)lbj{b+4v3rs}cdw6`+Zww!HmP;SK6QcMKi|j9Z;eU% z!aDfJ%-fEQLL`0JK_qRD9yttFgq=|xz|Mh9&)7)8-;p3}wqG7Of^3^Y97iF{?gUQls00%ZA+bJg4DLhyr1qE+YDA*&C#w@ZWp}6C0T}&K5eq7SYu~W|Y``!F) zi@qr7O9*SC*v;Jrodi7%ddi|Nj~2J{&)`baZ-9B)qOYXP$sOjDq%*jiK8mHxi*p1^ z#W)ERI@jlm+d1dgBPT4nFlcAg zq6K69Vw$93ZT%9gAogcLo|E)E2p)c!tzMCIb=T^ynZ+^;o|mi%)#H%kyx}cIC`F);`j>BG#*fHX^=%$Evg!1d%bOdI#{IemRxtB z47D1+XH8OFk}v6wq`Q(DlA4kNNui{cB+QBEqyyQQWfMtlN$Zj}ByCFSNV+fSyOLg& z^gT)6m-GWpOYgLcIX#$m10_!2?UMG2Kr!+#qXtgk{6l6!PBU4ZyFUNPNOtuKI{ZgH zor&P*@C>x(YYX{q{^Pzj&jz!k1=uf)AsJb(V`t!zc68yGh6i^vP|BnH|7&EpdY$LS z8^+6z4G0H5&|ZE5^Js}TjkC8ve#-rizIc15t1SANQT=(U`mY`QB0$!GgYccR~))*GOYa&ehy#W6h zifO;U2djJP_g!=5D=KM`i**JF>lwkjrF@rfKSF#580R_U31Lp5x8BfH<8#jmfSEmG zS-aF9dejL&5(*!||1O>$noK_AOlCkY{DFafpaiYl7Ir$N4>j5gzsqj&M!_OnypEN# ZTzHi$pcV71sCWFM;Qb!#^JE&@|8LZNN(TS{ diff --git a/tests/baselines/advanced/graalx/weapon-Job Quests.bytecode b/tests/baselines/advanced/graalx/weapon-Job Quests.bytecode deleted file mode 100644 index 3178dfb38e81156284ae6a73a9a8867bf685e4bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3475 zcmbtVOK%%h6ux7pN!kK^#gn9z^d=5{q^W5gC=?1bN!v7Snx;+K@>DdjukA_3bK{wD zQX>{fUa|)XHv9r4BtSwcdxYpe00iO>Tq)jl!*}k?#FGcv5GivXbI$p`bIy0hj4^{T z)`5TeOX2@>Tyg1+7Xn+l3)YIbC6{n*)Z)AQVp$Y|==PiVcG8i)fE_z7-Mg#8ovPb( zGNe1{2`dmq98&w>wfM+(i*h}O7vyrUF1!Z4gI|a_>Da;z=Ix>mmj=7v+iq<3!ORS+ zyCqMEPXu$Vs$gY61)g0l3(ptcn($ar_<<)IY*{W%yCq5MELnn7h&~y34yy>eTnX5! zLjryfZ^P&69;uBDz+wScq7X{X{(o zqh)nk!EqFuXewcI-U6UbF-0MUA__LIFgn$G&Y< zv^~dIsEXJoIxQ`;g6^@$kh>o&gHoYld2GB;5UW~Q;|}^+2}XHPvD_8jko6p!4!AEw z)#r|lJaEO)IBq$RSFyp1(ss+-;t0k|(&N6Y3h4?i9A6CbNu2nSRaoH;wCM5mig0y^ z5?bL`2qw_3mRsc0eBE{&j#ou(L!p8Sg%2cfa!~=0Cpts3Q1#2~ns97LufbOB!b*LW zEyTpZgjef@$|$c0@Fm`5IT+hxE_PTZUgp_c7|zn;NLsb3K9d-*P?O9qLU+ChEEhu{ zSA^>`J{s-v%+eJle$_gfD5`8>KClA2@DSy$yDP3-cNgUnB@y=|7g;W{JN4q?4HRLT z{2XZ&*DTL3d9rGGp4EVg;yJI?EjO@(2Iej*!j7Dfy|pG#XWP%Ub01@~GT;pn2B_l_OdZz^UgW2&RYdV4b}WvX;Wb(m^jC-23pVN-QxJ9*Cr3mr_= zWvcGb?aaWyKt}B!8p#iT(K7l>b)cuk{?41~U`9QM<@t%y{$ z^a~DsJsXFy^!IF>&wtr_(o_ST+*BvSusjO;Ers3ag{{bhCr;va5@B>#ggBXm0?zC9=aBI$Nc_Z&j+Sw?_j^-a$PV{x7|nRcni+L5At$3{ zd}ON74Tfyf&}dSKhv+jx9zw``KD3R`W1x8w?~Y`N{;AE~h~D+(w{c5w$*5No4EBx^ z5jxbD)^JbOMzHP4(PMcPydRzDT9o?&pdKcj7r?50K>Z+;6X@Vw9 zMX!w}=6iAtIbRDeQqcuUc|D6;ZIjo94Ns{ioi5rlNj($b`WKm z?r5c+w3~4WB2D9?w@H=!W>KWn)3(v&?MB^Al#43Kkm=oR1Y?PjdiK&gT;~!BARc?= zOsc&X4G!(^6RF=4%saM@V*2YSTF3vaV7jukg13;j)h^Bz;!$p&&(Zm-1TU)SJQXW> z+1>2Jj})`etTkb4HKpR5W*vk7)^@#U6eQ5k~b9#6@Rp? zS$j1IzpaDeB+y6jJ)}VAElSaOVYXw^?D*2TS OLw&q!C>r&y1OEaOBZD#k diff --git a/tests/baselines/advanced/graalx/weapon-Map.bytecode b/tests/baselines/advanced/graalx/weapon-Map.bytecode deleted file mode 100644 index 7616234fcda4ba8aa915ff12a8ad6da714e6c9fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4537 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 CyybEL diff --git a/tests/baselines/advanced/graalx/weapon-Minimap.bytecode b/tests/baselines/advanced/graalx/weapon-Minimap.bytecode deleted file mode 100644 index 9fc8a5ef6e00ad6766b1cc0dd9b8da4821fec135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38 dcmZQzU|?imU|<1a5MY8(49rj(B+kgr1pon803iSX diff --git a/tests/baselines/advanced/graalx/weapon-Movement.bytecode b/tests/baselines/advanced/graalx/weapon-Movement.bytecode deleted file mode 100644 index 7761a2adc816adff75a97c3a0b04f7c23dbc0026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2979 zcmah~Npl-T6mCh5l-LPN(6sEZ$r+mf!HzYyNgNU&u@h$@tFzew!f2)~Pdu7&X2x-p z%FWyXpQz$zKyicO%7F`4E?l5Ec9mV`7{1r7(NaknmEP!W{oePMX)(q!jIkaNeX^im zL4Sn74X-Z3)r6EM!eCY;7eyn6lu5$iQut8RML@>PcVTd9Zicvjz$J<8EYley3~md1 zB@7_2d>Bke!cK%sCJ_dRbu|)ktQ8w8t5x4~Mx7-)sEJd7M|rZpJfpQp{r5BKaj0_> zNbV#a68RpG&3UeXn&oif-+B}7$l_|Cd}4M#^aAF3v0e3rD;84^7AKLtC|oaMHo>Ud zD=hYfz|%`uEwZa@W!3lbh?iKr=GEDn?JqOW^#!Ziv4~d$N~#Js@q7^@K~xLbEY3Ph z0)3eVr!CVs=O-dg5ZD!zo-K<8auM$E5qreK25YeP7}_IP@$H6)&`#G2YD`Oukr0ms zb5!k7OBuFw%yaBiPuX0y{D>`6f=lTv1F`0Wk;@d+mX=zfa?hEyjrhRP;1r}ux_cK)-Dy)`q@z}MpoK>rZ*wMRA~M2UKf5Y8Ip0C$(J)* zx!KZq@17Eu*?gJHTygWM^#hkZCR}zIGH=L&A$J>ck0E;v*=NYThTJzyE-#qH?Xl5g z79-(BvsB#5Y=FK2eXSf`f^L(g-%N26UoAdG7VygJW%9}vw=1JZCt+2bHK}d;Rn!m> z15h30gO)+}K^|xcR0A!71jq$Bpeo1)eF3@$`W*Bb=u^;L&;n>4bO&@BbPIG7bOSU8 zx(>Pqx~ed~0vxDyiV$vFqx2jf9Rtc#vbt1%)qEKX zSLj&x*J#~eADrpg%3R^{jX{_%X#UM1F3V z=hxjV>mmaB;87#yIyT8pT56raaXHe}7@!$70nSnk(Da-}e;+vqPS zaROIJ=E*>-vrrzPyJO6d6+>DbcgHxck6{!!p*s8hK%sxjq4De?6b4j!Nz{FItxe^eb;PPZ1 zst-*%p4~^fk2-YfY=2icErg50=5eP+ixCxV91LPz#ah0AdhuYDHc`g^m(d-37-o>V!Z diff --git a/tests/baselines/advanced/graalx/weapon-Movement2.bytecode b/tests/baselines/advanced/graalx/weapon-Movement2.bytecode deleted file mode 100644 index bb27fa9af4253b8efff0f74f9f55e113d517a48d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6953 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 diff --git a/tests/baselines/advanced/graalx/weapon-NewGangSys.bytecode b/tests/baselines/advanced/graalx/weapon-NewGangSys.bytecode deleted file mode 100644 index 1eb36aae6d551c0b88b479d57414b5cec4bcdf2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 961 zcmah`O;6N77=F93i>$J%*cSZ4E}$_clCXgBfS_=|qX{NzVnT-9p*x|pIGtTS5-)o4 z;8lN#zr~|R_2eX7Ir~hf4T%?T)s3QhyZN#ae(nc`iO9YNv~ zi=vRlVM-~N11=?PA=-H<;%;(8TYX_~n@UE+j@Uk@9v5Lx(IJyORNGg5|I?RLZlT`78;6ac_MX7;E#V)i*qN{pzOeeOH?GB71<7jVr zBOMkWBm+)B$y0HPrqZ0Z%OrJAVs;=pWfN9bHZeHo<#TTIl}h5&kjo*2Eo@(Qa+{o# zS1u;AkEN;NsiGu)+EF5j3Dr$!s?*~Gvmw^)c8dMHVEd;%P9aw!-b*O#3sO>qA(wXf z=BMD7RUBvNRHv5ej#=sW>7fIomuC_Vx&Tf-}b;qSt5(rB)h*544gp7sE!PywKV56G>j z?2Dy(23i<({(bA&=#YMnd-?`a zvu~}-&BEn--oP!e8>Lyx%_{3|w($7eVck7@xX^yIv`B02+0w$|^5P1uz5?;x+A5^Y zvUV>0kL)!_aW0#1vo}yz-E0z2H_aODhc?!LKXcpH!B=0m=4!#0DFm~%0ME;Tlbx3F XzX;)+r{NNK`i`&f)&gu|Y^?qlBh56L diff --git a/tests/baselines/advanced/graalx/weapon-NewMovement.bytecode b/tests/baselines/advanced/graalx/weapon-NewMovement.bytecode deleted file mode 100644 index 473ef3de5a08931b558106244b22adca0e7a9f57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2823 zcmah~OLN;)6uy4cZd2Y^*9nheR|$odxUt;O2Q4L}G=0$0G%am;6_#Jn~nM`L`z<2JAWSe$^M@KrZd(L+rk{M$e##kOizbxnv z(C>kN!|RG*J%*6^JMfo8d|C7(l8y)dmEgYU3SSx50)JuU92tHE7ss}~!EG*0oSXkyb4C)|(yAsX1-iZ;1upqdeJf9?@E){^1dIgVX~g zcVZ8TIv$X%c&>n&Ii|m7qeDqH(77J)4?rjvuMNX zvJJbl#yqzpSksO~)Dr;gdSNSIOE}`R1&Un+7keEMu|>FdViCoN=L*Wj)pg zS<<))VZBccsWKM_!l2KFEg!bK*RlH|MC)A7Z!s;chC+OWc&g4YRR*b!d5)dv351K# zNn+-U4JQa)zybDD`z7mBU2w#pS9+lr3-B~oXs9odh-o20c9FGI@7n8O4CuDYLRFm| zhJCi7CLRf2wVT0_Ie{PBo*z*-y&RDpuR+?`4ws}OR|LkuRz2U{Q3Ell&U+!?M_?WF zN{3IfBvajySCy-S3GBF`^=`1?(+JS}P(1?-qR!B7dsR@qx}(Hd?DnY&t9)I#gNJb1 zf!>UkD%ZEWg4vD}tYhbQo)L4ryUoDu&#L`M1ieqGguP05wO@&#_G~C%-x5LXT_ULc zv%^+|thC%r4?o5zXuI*+78f&Hxk9-yv9HV}D^z~sGGmqvnKfk2kaG+@bbd+@2Fz3y=1ZD?VVcVq&BXH3m_)XhQ`>^E-&Q7JRg7PrE z@kb2#h9PH1-uN0``WcJMqpDS#Q^hjsoHG&qu*qe;pwvI>{H4JjBuAR>P^(p-9N)vz zFsJAfp$3@O4nM--m~x<_^Kbyb6pcPZfgY3r>P;?>7ci0&rusBB%*iotE>BW<)WwH7 z7@d5`<*6yfD7>g*iL?m!77lQETE&|GPb}4((f;m7f3wxG{+5*!muCv!roGJOCpCI5 z-{$fxzNBCb`3?YNk!%6qKw?qJ0+;VvnN*9;!f%m`SAp#uz#cRY-ZSKT_rRK9xja9z z0$gUfT;ej%(5m|IaHO2A3CxVJ|>>>@^nl@h&(w zGdeXCcafIpk~zJM+8=1>hP-UZ_YHZ)kXH@)fg!IMa@mmAp&!Yys~1`;lVH32f2Doc h^L60wTwFTnDuUo9s1Fd@Ac2}lnu3oVs1M*>9aIebko)fb z{|*2c07NKy0qTGn8+}$cXVs`)%Z>!%Fsqbyg&!jC&a7X$SEaVZ%I2y9f8dPiy*~ c;XdR(LN7X2=*MaN70BijKiCJ|vd@c?7uGsMTL1t6 diff --git a/tests/baselines/advanced/graalx/weapon-News.bytecode b/tests/baselines/advanced/graalx/weapon-News.bytecode deleted file mode 100644 index 4c1672d7f267bb6075987ed13c2d052c68f8fc76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3665 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 diff --git a/tests/baselines/advanced/graalx/weapon-QMenu.bytecode b/tests/baselines/advanced/graalx/weapon-QMenu.bytecode deleted file mode 100644 index 814219b6fd226f5cd08c1ed06f13b01725c64cb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7335 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 Rzikg`d<{st<1ioO2fwKVNzniR diff --git a/tests/baselines/advanced/graalx/weapon-Staff.bytecode b/tests/baselines/advanced/graalx/weapon-Staff.bytecode deleted file mode 100644 index be8aa622942b1e028d3d34121998c25b8fe8d622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1086 zcmZuvO>fgc5S>j@rwt#aU^`Gs>(t2!+LSbvIDjftDTwA0NF|QQaW;w7#EaIOmRz{> zREfXR8{*9WK>UZ566FLEv;IgiswI28Gw;25Gd2Ja0LbC3t_lsvo@o2<+h{H}hltO(F-0Sx# z4=6vQ9I9^U5`s_E^_*eS461NSCn(0l$hs8jFQ7W02zeU&Qyki@!47mFG!Bi|@1Vn& z2n%q%kAMob8V>Hb*Aw`rMA5wu6Zi~W8VJrNYAd+Y%r7z{UyA#MZ>9vhXi8ExWyY@5 z@SL@ahRhjq$&gy5rcWUsV^>U>|8B}M+6 zTZX)C$UCOItC1O8CK9Wm#0T_|H{_}z@1X*96Y)lKcM)MRV6AIC<4%lkH8}WX#GqQQZ)Z~283%wE^nJ*>H36Ipb zHT)sSA?n#UZ$x>eIulbywHDUO=~^bKIVs*t#mgo&p5m$6d~bK};CdpQxT0D4!e32| BSFHd5 diff --git a/tests/baselines/advanced/graalx/weapon-Staff.json b/tests/baselines/advanced/graalx/weapon-Staff.json index 74f1edc..7224267 100644 --- a/tests/baselines/advanced/graalx/weapon-Staff.json +++ b/tests/baselines/advanced/graalx/weapon-Staff.json @@ -1,12 +1,12 @@ { - "bytecode_hash": "8d9de00d12d7c11ed6eec85528a4939471dc64f8b5e6d76fe9c40aaf6603f817", + "bytecode_hash": "d912c4267dc566d2862eb3fb34dc12091e7c963fbc5285a53aae79d316f04d09", "bytecode_size": 1086, "compilation_success": true, "expected_failure": false, "error_message": "", "metadata": { "script_path": "advanced/graalx/weapon-Staff.gs2", - "generated_at": "2026-01-04 18:39:05", - "compiler_version": "modified_1767569912" + "generated_at": "2026-02-23 11:42:03", + "compiler_version": "modified_1771863608" } } \ No newline at end of file diff --git a/tests/baselines/advanced/graalx/weapon-StaffTool.bytecode b/tests/baselines/advanced/graalx/weapon-StaffTool.bytecode deleted file mode 100644 index 4cc87cecd7ef9cb23030f42b1261c01094d5d79d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1534 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 T<8RL&2&hP{@FRls>{|0biH3En diff --git a/tests/baselines/advanced/graalx/weapon-Vault.bytecode b/tests/baselines/advanced/graalx/weapon-Vault.bytecode deleted file mode 100644 index cec1170b62e5b4b19689b3952da08d63147cbfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3720 zcmZ`*U3VMB8J=CqGI3i7AdT#{1g+N;NU^YGn~+p;NMb_VBw*@%0fls}9ZTCtJ7RZb zdwaNQI6a(R^&j-2f1sQL+;L5B`UBdV-uI?+j&!&K`n)r{vXeMIl4suU?{~x)vlwGV zeCf}|_b))r$Z)IYr6Sr4_e7Y;C?(>bWw;S}olX#Th}n|irAT;*@CmBQ@J7%Va+m9Wqj-5oEyx2ToX2Z%B5%Kf0v?ek&)fG{PwXb}Fcv$*B$1(}^bZg%W?%~4lk8`@m=^}{dl98t zX8oZbAlK~1cH$*L`<556VR$b@rtiv~--~vVr>mZE?%id3f!NnVJ?Z&-UKH;}vhPKa zm$J8SUb_YlQpz@&S-dXyL?1TAzJ9gwY^LS$qh*#HM@pvPtxJ@yB|{CFVHz!##x>(wsGp08Uf5eG@em-DAOY1C_J zM)8A)9k6~(Ur+%BeowF@9SEHZ-8)&sWQ~FWz|aX4tcPj~f8W$7JJ`h@x*Gvd;bO`w zY7yy^8h0Bp%2=35%4+86(PVOW7eh%qV&=9rp8BM^GIQb!u9#aMu?8-dTmE*bzRVg` zI+xZMS9Yle;&jfPWfAkv1Rxj5dO+lMW0~cE?3pJ2nk>o zz?=qP_NOIcL)4b7EkPo?!6y9shO3{Ev*Y6D`2Jnn|B9=hyA|~u(q`FTb9D*|YZdkU zY4XzflB;=l{^R+VH3bQFT^-;;MZLh)FK`Ffi(I`_0_|nca=z1)XY%X2DqNX%wW5mp zC0DOh)FM}P%8+Hl`m3z!x#oaw#$xISM$g6w^GG8}ADwp1 ze6EB7tgTYDB`A}5eXu+_3d$A?{>p`?G|Wx6gzU9&TSv+kh<4u93=3fW+t~io35}Ys zs5cTcg8gYlT`(AQEF{o>_NPER(9?$;ngZ?A(g6IKxv5 ztQj<6)f)?1Kt;P3s5#BTHOh}zBjIxzdx)e>jK%VtSuC2U5pQ9|VI?ltUt=w-K3p61 z25Zq8diyex2d#AdnwTve^gImDQ5grb6Q3{`Pzg{w>X!+qRBGf(=Xl!?5q+R?WT&SLMAi@53c z1iSgTrF)9FCX1Ck*{-OYRGEK4vgFRvgLI3UpSyIuP1jj{)o(Z9^t(-$d3qX;u}d^F zJ6io6s3%MGD}YXF#9MBLoC9z>2WU~fM;4D$nz!ovcyvD?>61q>zkRSyADTySYK7LU z4*GpG=7%~(_wkTxi?6~Oa)y>6xAdZ)dN#Wh7boq4UO_|QN7n?y)kj?2)jjl4Mg5MP qN%MB1AXC$To*v-`rj$le5BecC8&IxxFl80huBhUXUm9d{dglM>o7fis diff --git a/tests/baselines/advanced/graalx/weapon-Virus.bytecode b/tests/baselines/advanced/graalx/weapon-Virus.bytecode deleted file mode 100644 index 4c28328063817f0a0033ef2e0a6b21c564d89937..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmZXRzfRmh5XQ&n;|v!PAlPe)2yrqgLCDc{NfD*VpOPfhD|_X0;B2y9BT@4Vba@C0 zL`#Lz^|2hQ zx;1?A5qG2JR3VwG#_0N-8fBQ!)SRL$H`tTRvbwDda{3Ib)NMmXmqnqp%uHEVIhKW@X_}-lGCM{;hh=tLsivXN z?*6>yg1y7@#;7q5gTcM;-aY+_U-Vb5g{35%^iyHIIQ)IEe=sCrJH4H7Lcs&bPX
    c55f#TEW_;MRL7+WhKN2eR`TbU&PUM}tp%T*t8k)AA(FEPkQs`?2#aAV1lj dNv~$}E{Go>R{tUR=@!IK5Wz#@zaJFz{{Wvx;V1wA diff --git a/tests/baselines/advanced/graalx/weapon-Weather.bytecode b/tests/baselines/advanced/graalx/weapon-Weather.bytecode deleted file mode 100644 index be3a740e977641340fe0ef896996dc932e2785a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2287 zcmaJ>&2Jk;6rbJL4hfVdu)9tOwCirdXB`qJPFqL{jg#~vtrSs^#i^Qj$M!1ruC+V) zaIgFYT<8fQ!GZn(2=ONXw@Ms1AaSY0btGH8A^6RB*LIvj6z{z6_kQoa8A6Cg2ua~5 z|8)FrLG)MPf9f?^aLA=}>J#euIJG->y;`07o?io}?*@LU&MF7eQkta$f3HE?EZp`v z3nM8SgV}d3i+C8c$slHf9kB+fojj;`yuF+!D*iEr7ip6d!b7iCVoNpt0(_64C(*; zt6(Vc>C(0@lOr$&iuquls28GjzS>?~f%KnQOOTAMb@kt}E0Yu8w2Wz8Sj#W}}#wzzUiWJ}T7DN*jM=+aq{Gn#&WG~2Z7&y+J< zz=C6R(|-(0-W(0{mJ($9omLgE_gPcCZHj3Km(e$3ig$YO-gPik%nmDHtQ+0GA1k|Y z)!oxpkF>6KGoJr@nDc)v+b_woS>iJKmv`o2`$cXSd-(HnR9dXUE-hN({frIld1nSt zrT0?ojS%JBkSOu8#In)Rr4|m$0HMh|-$*f5y+{fu`deirCsjbi6$hDCO;KDZWM_;{ z-ssGhbDv4)byKXF;)*G*TH=~q_0D-yd|-+X;jnIrjSRf6qg@F3G`U|N@!S>?K23nh ztkgp52*G!+l?NT=q2r}xHg4hJH=@cGWqLeuA zjCFNuz^8T)X%4eZW$-Fo>`!iBF(y4O5BRk7Sb|3}gU^;4#kPD0Bp$tl!E8Gh)EiPH z8-=XIx>O{V*!iEgM}OR#rwkn^mn%imn@w3AJ#LjKZdIvP5%Xre2(y@={{5gvP1gM7 zfY(QOg=t8i8qq6^Ujv?O+b#55-Uj^3j51TKxqU|S1PxbD>K*x{>OUzgYq9qrK;LXv bnfCzkHR diff --git a/tests/baselines/advanced/graalx/weaponBackups_Radio.bytecode b/tests/baselines/advanced/graalx/weaponBackups_Radio.bytecode deleted file mode 100644 index db8f07430c1532b42ff894957dba2ed6740e9166..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1500 zcmaJ=&2G~`5FRI~LkkpIYzImyZk$31&;%DM4n2U7T7E8-s5o$`++>q%N$lX=wB^95 z@4$OdA)bN%6YoHeDpW{Dh zf&U;R9w$|46$1Z$g;Vr3De*a@RU$ECfxpr8UXifU@HmseG z1>k!v0`(3B9@2W9gp7o{Bm_qICT-!S?S)>8K^rMq;MXDI2_vE{<&rVj4tN8U(7ljy zqIRm-mec`0t-OeH)V3HK4dPXSHG)0bs>5~%ypVcL{7eMl%+sk zCk%WaO3{5a@NN;yfbpQ+qE!k(tp>%-PUtgRL2Pssf|Lf3P~&+=0F4p<_q+nAFb5S@rQ#wEuJa!ereNyieW zbW8Mur)BWbP|!weQnv?~GZOPud6O01Aq?3h>siM|Ybv&;V=Hfpb9^3iU#p<{AnYK-}&FqW7>y)ORE8(sY&UdOL-JQz0c zBKq<#EisGzn7M6hJ@}C`#U)eBnc}i3Y^1>}nIG=!drRaUQ#fnso;DL3g`}~7-O_dv z6Vsm~Z3p339PG+f*%fU)hxVd_pDFplh|$f;-XwD6v|SraTc4n)2BQ;ykGjJVX-b_+OK9p>yQvO!oKU14L@{+QDYlM+ zkNRQB-oLUGj$&%T#TWAT@&5BnvANoD&gi9&qNXn4EL)-^Us;r5in6O1O>xVWuPi(9 E2T`2znE(I) diff --git a/tests/baselines/advanced/graalx/weaponBrasas.bytecode b/tests/baselines/advanced/graalx/weaponBrasas.bytecode deleted file mode 100644 index 36e6930902474e9bc76788cfdb2bac9f82ac3903..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1463 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 diff --git a/tests/baselines/advanced/graalx/weaponFileEditor.bytecode b/tests/baselines/advanced/graalx/weaponFileEditor.bytecode deleted file mode 100644 index e9861bdf11ee58374a709838356813fcafd7d9ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1849 zcmZWo%W~XA6ulaovB!`Eh#odJ6It>=V!(m1c_rlK!A_;hrl>e6R*;fMof%O=8cRJh zI9pS!S%nYa7l0KkSn&hwvg8N4O0&v}(=BNpWU5s6_UU`ixqZ5ah%_Ra$0vUkeBS_C zi=zkZd;V1r`SDP0@Ho2D=0P0o_BnD1X>rs_n8%qfS8J`V$9KJCt1Oh@&2rHS0~Yb4 zz-JPkgV3{MMU+x2j8kUs2O-N-y3fMc^K&H6>Bt)tB{HKzia183^|;5P$FhB#MBaCd zI{kon5_CE&Nm(*r33*8;B~P7#X3lrD-}7;fkPTR9H&RMjJWT09A< zm&A$<=x*3&`OcRG2m;&}_2M*;mriLrVJzyhpws2WVi@?mtA@1Y+;MWvo{W6dPU0|> zig~6K3#A+>mAY{fJUI%U1W|`_N?a9BbD$9HLLPL-UPAsUE;ne?U;=^m@SrqvS|~?L zp<$f(!^G=J$3kVW=lktAf@vWQKrP2pZ*rO=M@kMJ_waIN{s`rg+8%Fr@q%C*e)vPp zJ<~>&O>2AUS5uH{S%%Q`k>(hp(m+0^kLal(=4Jkpo-G-o+GsTOj24Qnnkg1GOtI*q zqsG_gM|9n?#uz%%h9M;P%dR0_F~zy6J?=Kec~e~2UaDy$>Y(ZThMs9>c_hSFt2TCe zl22~YnIT?#V2anPwxwqm3~|vA`tPPN+`JB4b!hEZvOPo-@&2?Hj#&HC6w9tDEJx2S zrcF$>;wq>qF+;o|51_38T9vrvqOO)U%k`>UlUh0PI%d70_STBpyrbOEMq161cD@OG z&2>(kEAXlARt<4!8i8|qc22rv&$xvCWpuBPYyZdOs8g$&89ukb(YNZthw6T1M1LTe zm&w0KDl&OKZ4Cx%z#Ztn@P2N&mVnPN*ti7p!ADyDHxAp8Cd-v>FL z_P63|mVCFt_e0L7XUlq4mHDEH1We*_D7$WPMt7qLKz4Ko`Y9_N{D5gY9jyFvSt{=pJD z7t^@A?i1SU%!8|F0r%@@lV-Mk>683#lztMs<)*)n2B&c5%r@fgc5FNK6p`lPd;tg=x)V;tVLJ9o=P^F?kB}5}oPtm5Hgav!oS+7%t|G*V~ z07tHf8~zT4L7 zJ&H`LLupE6lPFLBO{7IEEv7I$vBJu;cfvrSJ}G^!Mtb}a&n%oJ5|uUGHFLBEAjgEB zF+N}EL!w1I7bc$=oeE>b0=%wWWC+jR9=sR~Pu~niN5jD}P`X5k6ydqnHiuaul$CY? zd4?E|wJLHr)dkNA%eCV61M;yacHjif91Vy#KF+6*C1QbQVh}$g6gk35b6QBSMoy<_ z@{;bggh4J6GL9FV@*1h8T<}at!}X++UoTqb=u^y8&ym)&{<_9rlP({;4ldwFyWiYu zGY56vT0)~jelr(D%x#8l<8iMYx*BuW_L!?jyR+R#t4Hb@QJq)+*Q3yF9o8;jRv}G7 zZv2OAN1fI(c;!i@+)WR_O9EuOwcH8atN8_ibh#UFm3 pW83F9)J7+Z|Ci0%J9f)TrQI`OX7z3PV8&^Bm3Zs*ohJp2O)Vm#FV diff --git a/tests/baselines/advanced/graalx/weaponItems_Land Mine.bytecode b/tests/baselines/advanced/graalx/weaponItems_Land Mine.bytecode deleted file mode 100644 index 16c9fbd4ebae5fcddb140507baaa749bbe41a1bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmXv}O-sW-5S_F&vGH4yExo0t;7L(Ke?g@p6mQ}&gk+4X>85PgLcMwy{4e6~8nAeF zHpPXvGw%&=-Yx(*0MKFB(_%ynr&eQ)nZbey9M|drvw5v1Qg4(ttDn-~Ocr2E{)G7p zJl9e|g-fiUOt~m?1`E_n)EXL^R+%bhQX%A(1o8?g8!svQspK3qy;jH1Nm-yW;K@bOPC%x*0fgc5FIzcX;Ppc*lXox$H{?1qbigG=c0-V!G#0j6fN<@UTN)^%_dbjRiyj? zB>n{Vs=tMwv63s!%sTarR|2#WX^Lt)8NMu5A(skyausHLjp2MHWtf!_ ze5zN2VlT_D45y-Z=O0CwSHC-Z2C5z&DPL+V{Yi z*%>m^iu>ml^*guBwBsP~s)<(>Bg%cR%15IKGf$|`jfY+Zn~3Ol)c?~r9cFfk=*EL@ zgO?2n7ewAPlX^OOYcVr>^qG|QqI$~kM`T5Ax?5!H8>`+Z+KsN6dFuT;8K1s}N${x8 z**t>w+cV!hXJ+3GN$NCos`upi7g^Z%&4F(Y1K%7m^TMTdz1XEmo%$xs_;eN`$%_Br NqD5-V4Q)@S_aAMnx~%{J diff --git a/tests/baselines/advanced/graalx/weaponItems_Suit Saver.bytecode b/tests/baselines/advanced/graalx/weaponItems_Suit Saver.bytecode deleted file mode 100644 index 651690ad99237d77123cfce183070e55f158323d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3368 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 diff --git a/tests/baselines/advanced/graalx/weaponJobs_Mining TNT.bytecode b/tests/baselines/advanced/graalx/weaponJobs_Mining TNT.bytecode deleted file mode 100644 index bfbd492805d1f230ed15d3814651943baee5faa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464 zcmZ{fO-}+b5Qb*~7r}4b?OuU;(E~wzubmo~nnE?O?0177d&f1_0TUVlOZ&S03bI06!eBIOE{jby_il_XS5aJ#xa?#Efc zd(bYIzL5rubk5h#Su5~$9_hjf(p$JbuAi=;sa)(c0+bt$Q~&?~ diff --git a/tests/baselines/advanced/graalx/weaponJobs_Roller.bytecode b/tests/baselines/advanced/graalx/weaponJobs_Roller.bytecode deleted file mode 100644 index 3eef17e345be49bb632b89364f77d327f15d6eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmY*VO-~y!5S>lZq=e6wtd}Eb%P~<1a6?E{rE;O1Kpc^?J8TRad*yWko8MLS2lWS3 zBN1_CoNa|_X>7meH#5%z0098BIQ(jG3^=ZhzE)E-Gw0dB=x-LK!_*^T^exK5=gMtird)sQJ(TFAR-jUlNn&Q&fi-!anprl13ZB7Pm1SsU z;*`KNsug;Ai$bSi&MY z?ymh51aTBn5K<$gW=O5WQ6%U?d%yProqsAp?cVEfZ~~)Wf;w^UrQt;%Ls}EmZSP0S zuE)G>#360+xfLI<=4>TC82kIV2ir`)9t}?6?~7zOVt9TgXy^Zqto{@W`h3w`Lc(B| jD+d>?CD@4F_5_9PFM>qO%>_lgdw;`I5VThp>U7@#CikYk diff --git a/tests/baselines/advanced/graalx/weaponJobs_Seeds.bytecode b/tests/baselines/advanced/graalx/weaponJobs_Seeds.bytecode deleted file mode 100644 index ef653a294d836ec8a2e432a80fb9a5364fe9bd3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmZXQ&2G~`5XZ+(nvn2Opx!m#*mZK~frvUSCxir%DiDQBL5NeeaW;ujvNmf65svtk z5RbqEAi<4ySjkln94cmQ!@ zl!*`~p^T#h*7^^8EP5c=lEZ8jLMp@AjLU?}4_w0AXypVl;=q)E1(_#!utKFzjLX3svCRwv{)nyg`&<<@-dL z{Ss^t)v)qCqM90*g<`|XheWkBKrwD7gidF+6LYz;~+7_o%wyAvH6%wxOB1&r$S^s*Bd?{lPx?HdU91+NA1o%R%uK&;Cl) zRnN6fcd`8ti!IL`<8HzA%%!ndXQKImc*IJH&&qI$k ziMmeI4V$Q&RNZRfYj1n4e@0PtXV~pfbr*?`sj}d+`xGC3RynA7;UB6GkpITJbv>j$ Qo^ghGPapP64{dk<0O@!NLI3~& diff --git a/tests/baselines/advanced/graalx/weaponJobs_Shovel.bytecode b/tests/baselines/advanced/graalx/weaponJobs_Shovel.bytecode deleted file mode 100644 index fe6b1ee7c9b8e4326b2c53a10b923f0d53bd42a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1283 zcmbVL&rcIU6n@*57Vsz9ou&SQGA)T72v*SxdLaQ5iHQO9NQT{^tZa8+b_&#+HvA_h zo=u21&&GpSuU?H_CZXZ%o7rtbJrK3Y+u8TM@4ffEH(LO30HAfmS;R6>q`nief7CUoZ*ncsmyR z@w(V}#eD^S6!KWfnT)xf0g&(r!#vox^&t{0*kdx;l%mC?WE}|OcEVw|&0-a*4k#fa zSlJSLJc4Iy%gfL_SWm3W;t;DTa~M&+9VL}_038UzCYl5#!)B99=BrS|;EULg+5v}w z`H{CH5{Ou5OPKLu*5c4?W8pM8;c|~l*g*o9o09X_9BjWNJ8%o_1W*r)gH%FOvLs1g z4G7jZf|OY>UPr#^^qgPbz0o70fqLcM&@@^dji9;pM)?>@8D-=X(GDd#@9Ny0hUe-6 z(L*(&i*#yt>b4D{SE9v9EH+Fli-jJ1=))tlT0VB3o`y!LtIt`I<&QT!qR+ef0?`+3 ziA&h)a_uA0W3-CTE3|r;QLd(L`Q+}*9L%FrrqvCspL=W^qz^<`8X?-XWeLSTUa^5q z2`U(0LQU^I>*1q9YpAo^e}k^8uMvIS)i;Q~StR;a`DAwHAvDbKU=D_nh@%dy$>w_h zBe8BoO;FFM$%OPr=_AlJdwf(Mpd35%XU5Y#ok96CWQ9ypynLgmLQS^`YVHCz-OUzs z8h~!SK{QGOb5v9M+v<}-&-prHt}#VS4AXIl0pICX4-uH6wda`d2478Yr-2{dm%mM> zY4W=)IrmS=kS2f5lJhpXQbM`+CsD*oUlD$-&No-r%wOVXzmoyKySjcF%p35BtEVkk IDV0Wl1H><z>% diff --git a/tests/baselines/advanced/graalx/weaponJobs_Stack.bytecode b/tests/baselines/advanced/graalx/weaponJobs_Stack.bytecode deleted file mode 100644 index 278ce025eeb0c6b4725d885f7bb32eab3b8b909b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmY*W%Wl&^6unMMO3NEOV@i1>b;CPRA9Po>Dxh{ji@E@@jHdCB4sphoXOh(2cEKO8 zWWx`zKu9e36x2%mz?Bkp&2`+U#nQ~&b7tUC#F5@mNzQzY^c$J(B+{6i7^55=hq5a}1I_(FTa%$t11m z9yIH%&L>s1(%7&Y=8V!t1=3Vwb#NfeUKB6p{8?68#9%@xX;&7SiP(j>6Na>zJup4h z24h8|Rqu(gbsDN5lu+G{y0R^`g^x-HdH2xR6S^tawKDMb{ni#3X@ypxtZW-tkE#9o zj*{?_CJ*4u4;6rDG@=fPg(A&*gA@Xlz&_YSHJdUK4XYvzy`f2d$eAw|$1wbl&mHZojZX(Trc- z&EnMz+$H*Cp|%XCH-g|I!POOx_x_ip*Y|yn4>rdJ@R>l#pJiCK<=3ZpmMS@$;{*8O zog2i@2brUB+>`m*{4#K?oD=5wkmDmVivos^Hz@y@#Gm+c)Z!t-r@#Na#7W&ald{RxFWAM=xmmHS}y^>K~IEBGCW< diff --git a/tests/baselines/advanced/graalx/weaponJobs_Water Can.bytecode b/tests/baselines/advanced/graalx/weaponJobs_Water Can.bytecode deleted file mode 100644 index 0ff27dacbfb87bb6cb3b0877813c65f1fecba9f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1235 zcmbVKOK;Oa5FRI~+muJ4*lVCXlBPTlp#d~16;Ur zK;ma0ZrtIo^t6&AByP;E2yR!9X5pv5KZK`i=K zX*Z$+CO0Kx?-;yXU0w!@W9cT3A{?Wr;28#zSxnFlgLaRDlDyq!GGTHTcRsRyPLXsa zqpbr*EXgey$u`_cpLamv_S?|jTeq!9Uhj%FBwH~i+YoM1(Pnt+Qi+!2(JoJ5i?>X| z2sPX?2NIxR825zARnk!LSU@jf#(n&F#j-PW-UkmR%ioBG8qoz`J9is_uZu*N=7=7v z&F;+Ju}O^Fnp?@w@BvHD8yP3=(`LdJ+qM-mf=d0fSSu>IT*q7EN&a zM22P=qR+Th>{djdwVh391Vm5y`W(^c4<}EX$)%@QnFM&qh5Gse(Vnk;qKR8^hVU`h zWgFlbHhe(7z^(i-;G!L1dTeUG-aMFn$)>RHvRm;|82@j>X3$;_-Ep3v1y|6jtH!Ed zUx>bD7J}y(?H`kDcihJvoxksBTa8lfzASUMP53Q5&g)CW{&HAwCJT}FD-g$1-Y;)BOc2F zBt{b-2U&zyDj3Nmdd{YnZ7Nf7!#!%cxmP#Qx@mly`;`{{{c_#HL5DuxK5|#ggz?GW Dz&4E8 diff --git a/tests/baselines/advanced/graalx/weaponKinetaro.bytecode b/tests/baselines/advanced/graalx/weaponKinetaro.bytecode deleted file mode 100644 index 68e2a5b44e915b41233aa5ba901dd63f012cd654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1813 zcma)*&rcLd6vtl!GQhh2oUUP4cW4<@L_ukASIs6Wm?1`@1VoR}bk{H)db-By9){WM z!FVtp_q2QPXyR!vCT36W*}E720RMqXW)2>GRnM2Lo>X%zT&c3=!s=b=`fF>6d27p$r&xH~jeQnM@ud>W<&5}RiH}$? zosr*kWjiCkQ}S)k%c$>_x=d?qn`Rszlw;A4VwCS}1oMIKZpmzW@fvR*(kNb=^W&OR z2M^brwLl$6wEL@zi?Gn}^>#ky0k}>mgTM|%E~hkX`d(axRqkEA$x$e#Gjb%$# zTud*JH`gn5=Q?KJFyI-u(FGY z>uOzK#gFR_r(vvH<_6T^oHZlZ#t?4cqX%Ty)&c~k_J{4w$@@>c^%fSK>Fh+z?>bHpKA)zqAB`D zC+xAmJH`tl4h`Ex^b?UglW+Il#Pt9XgWdH|zGK`%?T37O9nE1={Aiovh=v^15Ln0a z`SyT3ns1*(gE^V{(C=uD5pldo#0d<0(zfk?3L`}1`z=$LS9+jj@t;KO^D{5uX&xF(s!!26@DVL$^$1PL6k}-4N@I$1 znsGj1{HYk@=*OWMDB}3pxV|uKG8bL|mU4N)ot% L(&!WQMsDZ}eq~i+ diff --git a/tests/baselines/advanced/graalx/weaponKuJi_Items.bytecode b/tests/baselines/advanced/graalx/weaponKuJi_Items.bytecode deleted file mode 100644 index 503467f033b35ae3350b0dfde658bb5ad694f0a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1443 zcmbVLO=}ZT6upzCiA}WCn3*J6+exRb)rHiw*%Z4dg=$+A!7jv&jFV?FG?|Grlhzd6 zSpSOPRuI>M2yO)bfZ$Jf(BRs0-*gfcapAzccfZ~_=iRwOL>dvL@$!?x`vjrSj@@>) zBhd*t`qlUL+>Y>j5qp~NZ3e=QM1#G8?`=4di&)zgUi83i2o5j#-md814@4NMI_;b9 z-SvBL{6mim#sGB7b{xOwMYP-7aj7A~DDeAa2hEUdg-NcG5DKqB`=Wnfw|R3~c0j&I zp=fiSce@kONb*Q7N})Lv5$g}=A+_8_LwIyYZENP1-44aj+Y5Sv9?_xgM$`!Wt^*#= z?g(o3T#5p>*%U!2f&(CJQWtl_g^BNoJ;55f3as0<`yzN62yrA>y1IQ7xz0Xuch^i3 zPRpl_4z~ebQ$%*)v_k4c{jMNTwjx3@6#aO6PC!(*Mi24T#=dKV)MRNTH}T$(Wa(17 zogUCs$&jgxSv;YvN*i*_km;42HlW#eh8(vLs8zCv&FC_-l{zW^T8sD@0Aekk^tJ%^ z7-uG|3Y+(pS*~HrS-@u_4@0Yg@@&S$dM;yv=k!bsvL+#Gs#Zd^AJQHF|&AunZ2 zRaN}4eB)-FVxY?m^koFZ=5(y)qcVqTuCSWZbfRXaHf%K7Hbl`r8FDtEiEnRas_B7N zK}pW4VjZ{UUqY_74!tT|P1K(jt+LqD{_1irJ`x{4#<}CUXNI)YjjEQSBJOj_kTKJ} zxD@iXLBQUKAkNkQi$F^VUJMC#LBQUKfW185M`QBXtD7ZV&a1@VrDING>92o7W^aVd zUfx>$C)V%)lfP9S+Q8!)PY8!UC~v09om;NcI(ipdYEJ+7sN?Yz>v937M#D6$GUTHA zX%=;P72}l3qijOWP%2;I0i4EPw`9m`FbfuzJTI64te6ITPCCY@UI%zGsEnP>{RGV} B%ZC5} diff --git a/tests/baselines/advanced/graalx/weaponKuJi_Staff.bytecode b/tests/baselines/advanced/graalx/weaponKuJi_Staff.bytecode deleted file mode 100644 index 45bbe4203e25d7b9b078927c93f37696d5205bb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2154 zcmZux-A^1<6hA{@5n8PuduO3qI_xa{QY$QAE7sa&WdWrWN-Jt>ahSR6j?B(1GqVfm zBQGYVMq{ETJ{li<^TGP&Kj4#ZzWW#4WcR_un0U^;vmYcj?EKC>_nhDPyafOa0Q&Jq z|N8LvDgM3+{M$9|FVlyT4Bvl5hK{g18mf*)xhuQ zB6$QE$(RoU^x2l*MB@eaE=b00DJpg0fGeei!Uhi;JS6fCs~z}0w_~`&t3iVso7}1e zJ|@6xq13<%Z*b3`?7$;Yrlyp4t+LX^C@9s^n$lEiu;hl^kV$~$I5II<;+EG5UBLsC zx>hQnGE{>wmSbLxz?M@1Y@ofXGN}gjhyzZ>FLMLah=5W^&Z}tVTU8!`k5XHUnPF0i z$&wWVj!rH(luDJkLNo8-@c2M_Y z@B+&LN(IWeVlhs-%)>|y0U((>780tVZf&~06YNjI>b;c}aCj7l!6D#sDt$2yJ+Ljm z>iTZg{e(-|I_StDk4RhLv`cvogx1ut=Tl_Di|BTk^o6SrQ|Dp>pGZ`i{Ci*52 zPcYF>IKV`TaFB^72#1&$COpZ+DZ(e2c#7~e6HgO9!^E?M&oPlEWK8IU_%}j0%ETGM z=b3nc@GKK!gy)zr2*;Vo5}Hip2q&00Pk4cei-eb$xJ>vW6E6|I%*2(6iF~>VgGnhv zzv|)@Gt0zeJl@}eFESZaOqoiXZk~*gGLQ96V~81D%%%)^#l)*!mfv)7)x^&=b9#74 z7q97JZV|bD%%Ggp#p`AYg^OcjV@zDnUe4#fX=z{U;tgHg7}Ld@W25T7BLpl~0BzEiU9!QuY^@_gFO diff --git a/tests/baselines/advanced/graalx/weaponKuJi_Tool.bytecode b/tests/baselines/advanced/graalx/weaponKuJi_Tool.bytecode deleted file mode 100644 index df1b39a34f1b6c56c0f0994aa5e68c7816e57fae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1374 zcmb_b%We}f6umPIEe(`cGn2NIcBW1cNEMHyRRM_w6cs`@AXu>*X54gWGOlbVknU(U zELrd)NQfOj!KQzJgandNvO!|OwWoO?3aAp19ADpaAIIm80l)%)3@-h%aXmp-x3L`s zlCEwBQoAjdta6HuNS|i4`*y%DvE)`LW0q*=7nZEk)&ow3Fj4kQ4_&RrG?9e|csa(4WktAOMkWjV@r)QF=p#nO9M9U+byy_@O6blz2Cqh789 zW4#nt9WA(OoGdshD}9W4`N37kNZ+07Sh>y*f$;HW$v_26Z<|hqhx_ppB-gPuIzjw2 zX4k)m*t2mwogjtOm*VYLW?%BGP9<;P6vamEo@MHvMAoNVb-KqFKwq&>tjG7WN$R`* z$ydk!iSNh1^6kRgLlMTAxay3nCJpULN9EQsU27htbBKQj&73i(O1QbGAe3-)`TcoK zp>v>s)ytbMxoR2*Hbb<9HP7mrJS}9*6rUvpQ`K*4U48sp$GGGmaM{ZvPhIraq~Cqe zcGS7zfdsL_+^A<5&1)KO28^`n62D(=SF^c^pNI9@AWPm*vZs^x2FZK8?V-i{&i7!$s41c(Ulcis+o9 O&ac^B+cPhAEc+94_qdq= diff --git a/tests/baselines/advanced/graalx/weaponKuJi_Tool.json b/tests/baselines/advanced/graalx/weaponKuJi_Tool.json index 9843350..6358548 100644 --- a/tests/baselines/advanced/graalx/weaponKuJi_Tool.json +++ b/tests/baselines/advanced/graalx/weaponKuJi_Tool.json @@ -1,12 +1,12 @@ { - "bytecode_hash": "64a4f297366dc3e6a2dd3bc2b6d5604ef571a9ec44a66e49f8f779cfeca63188", + "bytecode_hash": "c46a46e4c913c4a39fcdd6f728553d7c94da6d89c79f3be87dfebf6278fbc322", "bytecode_size": 1374, "compilation_success": true, "expected_failure": false, "error_message": "", "metadata": { "script_path": "advanced/graalx/weaponKuJi_Tool.gs2", - "generated_at": "2026-01-04 18:39:04", - "compiler_version": "modified_1767569912" + "generated_at": "2026-02-23 11:42:03", + "compiler_version": "modified_1771863608" } } \ No newline at end of file diff --git a/tests/baselines/advanced/graalx/weaponLevelEditor.bytecode b/tests/baselines/advanced/graalx/weaponLevelEditor.bytecode deleted file mode 100644 index 513941284468610d5a3903289832761fb5238101..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6737 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 diff --git a/tests/baselines/advanced/graalx/weaponRC_AttributesWindow.bytecode b/tests/baselines/advanced/graalx/weaponRC_AttributesWindow.bytecode deleted file mode 100644 index 6c8fd6eceb3c4882a46f4bbf89e8a5c9b710b684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1431 zcmZuvQBM;=5Z)`;(h7>&+ZNGsv{eBGY70IPi2)MyK@uY*KKNjc>y~ajc8}|pQWE2f z5B>uE0saMj^1t{SHfiItv%6P&7j3egxo>8_Z)SE7LKZ@35{~+%;Jk-pakdu{SCFPc zGeP&*r`{S52-^`Nq{kfvH)8O<@17{odZE2Hlr?$p-A)kr{WZ>ZJV7~A;kTTZ zy}!orvzhr3^jqQuDbdLLUVoZ&9Bpbl2~aqtInh z_NyoYGK2}VS*tm4kWjK?W@ptw=d?qQfx~S!JJZ$ztH%OGM-%HQ3D+H{7ns8L?u0}=- zCQy;keqc%N9Y&m5Z2U=`tvCx9sM#qP$MwD=m!KL6+=1o zHaZ;^26i>|%Nkmr3yoZUfHK;}5;bz)v9v1S)v-)1l}aUBPLx;b)h|Qz5X(thUV%W` zmKiWpw#-6i`3(GAvHrENfaTS+ljO?+;dDeelOVLV;)K@>;q@3Hmb2!JgT!kP18aag=S#H4t2fa23|++tB)u mEkL#FWn0$HOw!{@+S!0Rrw;sm0t#5wrTx^<^7IB~a(@8W2+QjL diff --git a/tests/baselines/advanced/graalx/weaponRC_NCControl.bytecode b/tests/baselines/advanced/graalx/weaponRC_NCControl.bytecode deleted file mode 100644 index 9a348bc29fbaed93a3dba38e8e8766aef48c6ea5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3417 zcmai0OLH4V5FR~{6Z0?xYi;vzWUm7Wj~L4#B#;nnC3gIX39%FN3eIXZwl-PsD7$OR z3KS=P0aPWGB2_tX$PF$KPFy%a@i;&gcYXmwSri4u>+6|aOESi|N}8UYp0B&V?jD&j zmSBvf@u9yYKA+&TOL((oQ5`=!flca)@J8&=5#H!Z7z&T_{Zil4%ZbNsR2OHWyN$YbC)8j?A;5zmt7$*-3 z?+mxOv&!fA8eLDH65bTAo%VSUC?6~ZaK8Ya5_>d+?hhIAmB~7xxMFx_CJ*? z)^bxTlg_>zt2(8y%+^?qtvZ2I1dPs>&_IOp69Hozqas*D&nhBth;LRFzH?>Px#D^f<{%2KurNJIU%ELN&<-^9hEE+EpP1N zya!QB5D@1&$f_!7MZh5QDmEiGuH%6sl0-!{1Bqd+!XtCn3E;4ThR3P^mDDnrEkjxH z`J%JNoMmf?Gd*w!TJ09aidSNbNRyl(xqyeUMX`pxR_TyH&Iu&Dz!s<%PEF6@3Mo`s z;*Id*nglg3wAM~yq+A*+YUQf%OI6>hFd|K*L_(A%x*N1IQM|}J8-AA>pcb^%WXJ#Raf6ZQ1lUBm4=yE@ksS;-8U$mF^Vnat!m z*I8S9YRHr!)8pwn>%(Dcz>s&CnH;3Oy}i9zndyHlKXA34xM|3?&U)hOydifOawnGd zth^J;U7hvh2-dqh>+CAld!n_Y2b+5}$bA}w*|?mQyKrzng6aX@TYIqS#Ky$6Pid3Q z%DeK2#K`2Xb?r7}7X{O;ae5-0FH{f@Xqxua5wVk1xtCz1KkwP9&neHk7VVehTI#=`zy^H#mE)H+! zBF<)G0u1@AA)hnkk>U2w40+T<&!Rn^HwR$xK|S&9PNjva9Y@cNr7;4r=9md}huNJ! zkfS6M7-tCmSy>4C()DB~I&-AIbA3mUmB-b9 zC+f*zZE-?b3^ZAcZL%0w7Q>On9l$uLESkufFyy2mrU>@_oZsFLWJGlrbS^d|H9YbZ@}t-+&0#n&X^Peq>R%r2$Ur9W$C z^4QLqeV}0qS^h$&b5UcQ!$e@axlfWmZxnT&pyy0I=vHMUK30|Aya$u^Pv_hh=BdbfvukPaiT&D5s8YNggDYExfQpbb{( zCyO+84g^t?7xaoc*ztv)@~tDgGM17vK}WtbqN4uz&b3 z?DU~6u+s;-TEQ31OiN~4I9noT=|gaqZbOzu%zrAtD?T)qtf$_C@C*sxKsZdoUyb%R zWZ9688s>6VUIdZpH&GFqo;}1Mo)rwYN(b^dW<8cqVDy!&|3&CP&h)QBhuL>LPjzl< F{|9{heUB@f?yK>|2zPB!H;p~VF zu@}kReT?PKShnpqy~wlbf(7abTU}e6SoFOp@LgutEUzjmzFQVS>`t4&q~cWLU4A2S zd@qbwVPsV*F?wRN{d!$^QOLF|ui;uP5hR`%I}}kUf*lc5T&o(g31*e+j#n39XjQ>a zz;8uS;A}M`5i+d&UGJbFwc2sSZfaR}LeTYu9VMZgjj|O9SL~pAyHUFJ2l%6=c+scYJqX-RG z%1EvtA8koa>y1f!#%QY!pt`GVMRpCn#)Fg&s9y_fGj8MY&}r*|*lt3{N`jDm{Q8}S zy23d&h<1xB5M?$O1x+!?bXN*lRYWU}hc2lNXqH}Cfyf_MdE`vDBc<@D)etQ5?+f(s zIoVwGcA!cywZOjy{)}=XnRef~A%ocY!GT{4$`pqgV(nryQpvoSx=1z-f@v zGn}5~^c<(>IUVKn0;d-_y~OEdPI*rJL~8VVVo+0QpupxCH@j?5iPL$2Oy>6`)|4Km^X*I<%NdLhF<#*G4u*@z@$;_ynbkOR zam*hS&S^M+Gl&5=!x(1r`*{pFeyPL9p!f9Q_v6El)!})07{H)9SuE(ubg?iCyxA_` zbbh~_!j%O`@-%4SAgTQ>Da1^0+L_vbLCd)L<^FcY=5!US(QQrOnyyslo+9vptW>wmsPwEsONIRY z(MvL;3jj5WAhlF@kPbO%PG;Jfvk<|D8g(T`{ac}4SEz0FCq~?!M4HyhL2@{w)1AYG z&cQXKT{DSms#t)lBweeVZeUo`!%ZD)J&yHBQX=6m`~|Bi0KKaCR*x>NNN<~yj#LM{D{-X27Q9+eTt{jjrQ5WX!Gf4 z8@eh6$w^uS+A>uH{(quOoL7O=f>Nuhr5V}w5EvL=D8T5s0D3(E& zLF7Vlbeq%G_6bB!ODy{x8kE)*cG<;3e>?k7oyBq)ZKk~aEi{t-8X6G@bra@FF$a_? z3|gkyp9hi?Rkis?b4VG`)J~yIfphIZ&*|_q$T8?kgYF{_Kv!NVJqeVlwi^`ReM#p{)4*@Mw- vmHn}jJUSHT*(m0)Aql3+rwbrsfWagJW&gs731on7n_0@Xvyau~92xu<9VmQ+ diff --git a/tests/baselines/advanced/graalx/weaponRWA_Plane.bytecode b/tests/baselines/advanced/graalx/weaponRWA_Plane.bytecode deleted file mode 100644 index 6ed02af44afe85ace974ce64dfac49fc59b733fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3424 zcma)7&r=*l6n?Ns42eI(%$lfV2&g0xn3-jPV4?zngaon(M2s4f*_qyDbarMl)0==* zp1fEdJXx{IgH`?ymgV2z&4cB^yGN@_F=t5 z`L7q34{;>(ZfJ*AjV`WT=JuYzpSP(S_=}!Pd>Xk9;pTGSuY1-W2^V)P8lj>0`@r9F z8zg8^zWObEVBN9eP*v(Ty;d}lgyMida)5^G=MevN5H`gSd-)iJzC5BUNZ~{dVtKSH zOsN~w9cZ%ys&O@>nchyp&bd7&;J5|I04_O4<(vJgDEJCLs>&$)Rb5RwII@ z>jktLSfPWi^wE)Bm%@#ktE=ET9)XBZ%XcB2#-^bM4vAW z;d<+u3zNim;7ZHgc6}#!u*g}qh3ybTgiqG2UAN(WD&`v`;>3_t3$=*^@y7T% ziD>GY4)Y#$Y0DvVU^z}w%udZk8^;|ebhRkOi^VHiDr=^mXk8HYByw3ZX5oBB680a4 z5lsqH2KSGr{538aZ%e}m6XWWz)e3#rug|40@gb?xa~=sQ{K2Loe_~&+SBp zu2x`51gJ!i*@vCZXCIi6W~`@<7tW0?lyf5?(9~-#$N! zL80g_|)F1wLc^@uYJ0bVKbNO6_PA!&9aY)Dh?oxa zYe+wmB=}Kf$3_%(oU@j2@f0qeP8Qtr3|~~!p6dS&j)}*HhK3aO?3r`s=)?WquT}P( z%AOxm*@>Z(rfI5dP+ZYL~Op@ETyNEM=rE zr=(rUCiz9cuO5_SCB?dyW&J5w*AHT?rdVqkR_`&vx*=H=sgNHOmSH``dMC>o6ReGc zSeq%y{nwZ?JWGoIo(kJvXsLaYfJSy8lwWsifX$v2|iPBYeE4H_F#rE5=y`5Ir4^2>1 zSXE)R${d9emDRH8(OZA47r9uh$8ZnxVvD*X!-J2Ei85U6+b`(CFoYI;!hnlrQLGjA z@gdO@{x}b?f&tbu0WSS#0NmOq3iA}!z=t0HROaXQj;}d?+JncUVo=k>c=r?*9wIk} MMI1)EVMhl31>>i5UjP6A diff --git a/tests/baselines/advanced/graalx/weaponRadio.bytecode b/tests/baselines/advanced/graalx/weaponRadio.bytecode deleted file mode 100644 index 64ac3a84601585ec74208383249358cbc9f61136..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1650 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 bWf0|f)YJ2=H^tu2M6|Y#x}NFkZrj!;7=n`w diff --git a/tests/baselines/advanced/graalx/weaponStaff_Axe.bytecode b/tests/baselines/advanced/graalx/weaponStaff_Axe.bytecode deleted file mode 100644 index 6daae063ee238fb19369d1b677027622c10a1bfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmZ8eTTc@~6g~wkQ19BAdc|F~Rn$OakrzWu6aoZV({R!FM26kzcGGsI?oOraqa^+y zqy7tD{0%0)PEvx2FM4K|CSa54%=ymc`_8ujkOP1*Jmxoor-tXN6f5$DY8fmi#d5@% z;=YOIrFg?xSBljz%8(@~HhEHycpPWIFDYuW7xNW)AWX|B&hXmOV=9y)hMgw2)|y-? zX}y$vSeJ1(RIClVB37Z-vT7Wd=gFQ>F;qj<40|2eW&z*ZZZcmU>@&e(v$qk#>t5Sq z0yZR1_UdkZ*acpbDcIs2`92hZ4L*-mBoi2})Zz(NL||^|b9f6u%-h^kkX^V$^+c?- zohG>d%z}EGB|L)JWi!1I3O};}nD5u(0M>yi#k^Km#*ly?M$m^H;~*0uN?<;up1`Z! zY88V1p6WJdW5pT`*5^p9Oj$RjXhfWUKx~*)Q5Xa~VxF-NIx6XM@MUkm&7os#PO__S ztj6z{`;j|>Kc$7jIj%ld z&+k|~O|(OGId4&2F_PvNafMViHWjexeyXNi9OMp%FF2(7!5RN%77A3)5dF~T|DEZl O`VrNSE3Pqqyzmb^Xe^8X diff --git a/tests/baselines/advanced/graalx/weaponSystems_ArchetypeEditor.bytecode b/tests/baselines/advanced/graalx/weaponSystems_ArchetypeEditor.bytecode deleted file mode 100644 index 1aa5c9f0c906bdbece258c06003cd10526162d4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63 zcmZQzU|?imU|<1a5MTmgJ|Jey&vPzHO)N=G0f{n$2p|Bd;$i&4z%FjgCGwepot+B+ Dma+ye diff --git a/tests/baselines/advanced/graalx/weaponSystems_B2.bytecode b/tests/baselines/advanced/graalx/weaponSystems_B2.bytecode deleted file mode 100644 index e7336f40d77997416cbd67f7efffa6e7ceb71cf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmYL@K}*9x5QX2iv9Y;oHuNSg%+=6jYC{bH+FYh5xnIui8ue#fc*jP zTE&3}^WJpX+;yaX)BL1qhy; zhfym+z0vSi*ELy3c1sqGHsr9Fd*yX?t1LF=$+RzK+1@=;Nq6 z6FXcN7uoPbGRmCARkFiT@h-U+TwiiBI63}8`iFf=J}4!pIST{JJakNe1cI0 diff --git a/tests/baselines/advanced/graalx/weaponSystems_BackupSys.bytecode b/tests/baselines/advanced/graalx/weaponSystems_BackupSys.bytecode deleted file mode 100644 index f9ce161214ea47d6cc3901d4d4419ae69a17cb7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmZXP&rSj{5XNT#7s3C^cH?bjIT@n~-bhRo5)OLAcr|5dmI}1Xwu>ITaq(e18gIT+ z6LIonDH`W*w*NKG65jmFYK0hR5aWb(&lL1YX$e=K#1uo%l)6@Y5wj8gGPOlnA?VJU ze%|;Xri|z&F%>uPJyXry`jnV0H&{=3X1iHiKzY3pnH`MW^UUsPb0zj0NX(o5F){Y) l%&o*t2N<B$p6A}@;{d<_fEj(9W9}(* zBch{T91u4Qcobg-9#?dh=C!9O38SGq;qrQrL_U{r-tBZC_5Stk3*kX?7ee6${YhJ) z0e6S-Ky9jU38~xMObbG9U)?7oh}@8ap9B!gz^9Zkmv^Lbr9TE&_k$+vsAlv`qioFJ z#oj9w8A6?*;V{g!b2F&e46|m9&YW4RPN6X0`(T)NYzxhIh6TrLX}qB%2dTw^Q>Xoh zEjmsWOBSiKrWqFh`!Ot0?xJJc)miqF;gYHTjTS{LzcE~KEG#pu{1Gu+Ww=I_snQbx t?OV5S{em*T&M5Q#hqbUezu&%nq$25V+Pp^cXENHfFyGEhef`Qp=^HzempT9d diff --git a/tests/baselines/advanced/graalx/weaponSystems_Free.bytecode b/tests/baselines/advanced/graalx/weaponSystems_Free.bytecode deleted file mode 100644 index a18a2ae2408c916d433a034f42b2414b628e986e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3835 zcmai0&2t>Z74QA<8av-aGb;%!uXZE^gjn|4CQ;%L?3LvYt&MESc7WKM+1ZwM&}e!! zGrOyGd`MAHk$ zDZUc^O_z7H1`3uEemUTF#Ot*AIySAY*|lQ;=N@+=x;H&~u*k#yQKf$raE?ohHLvWs z&L&-ZUHI3z!`(Jt<2wYDeMk7qyt@+cFjOvChOq;WI-bk@C~#Q7w_7}nBC-aq@VxVN zHxj{0Al6-vvpNm~(PacTdUB!VmIW|`m)NdjyVh-TRu-+mhnc(r`a4p_bG+gq-~+5=Ua2UK3d(_x3zHMFFP3M=*fNNBMxiErJFns$H? zb&e_|U!dXGJS%%P`Zc72k*d~h+Mwa;N_myt;&xN`djc=@BPe?!R3Yf091cKh689co zk60v{@I^QF%yP12$Qu1?M^1yciOwX`>)aD|oyAL{UA5b&5Pd~<4L!nlNKkbqMV+-l zrQ$tQ?Zq){j54eXkbx8x0Z6{l-z8kkqi7%{$$y@86cLJ)dFD4AMs7UU2W=#Yrm8xL z5e=m__uLQ;o0xyB3Q$QS&(_G3)eQK$yTjZqdxJCm2q9>-TNf?Aj!E|G)^Lv$s!CzkkL;a`m=KSqgxabjf_f*wm=aGa3lieY&>LWq ziP|g7ci?Jc;2pbwZwWN0=%`3=hNl3`gj`3|1++8<)6UiQEFlZOxG z$97YOWTs5z3VBneXH1!~as^XnpPZVSGUS2c)1{fWdu+j!IYS;Snevgb-NRT88IqPC z81jc$ex!FlHsnvR`>7#+hUHO1{v6AgA&t`g{83Yy1e_iPUNL3fkmInM7$35l9JSg| zR*#KZA>PMxg|S_BFv-T0M@%_&A=_iG;_yg6nIjtQs7@yJl_?8jz0{|Gn>OVnmZBjo zEHh)h^jWO4V?FjZ)+ge1ZUUPpHONyjBOl_jA)m&TSa&L$&j`oYqK-g;Qbxk)CNwj0LSmc5;iXZ2jOU& z_xmdK!WXvyu2%ifq`$=G8lBuuitvSIEI$9722WimD$C+FCKr`BW99I! zrqMI&rrf}|rc0&!RGNK6|H2r5%7jN_5be1sPPQD@#Vq z{x-xr5cM<&J=2*t)mxF(Gu>mKVUD-rsou@S@7nO=V9F-_3T#i5Fsgyhn8c98J61_Y zXG(7{ z+$NI0xeTg4o1mYZzap@`)Mh6~scjRr*>MVVz$*R1lBON|-@%@k#q($7!BhOM!o?(! z|0TLL`?vj^E$`>-(x@}V-@tbOpZKi@;xe$av)_sR#(vnZ=SRW2R&FG-eVpA@&fXwr zH<4uvvzrO=m&N&|bT9Ki2+I(%k3+aZ!j(b$oAS@5yr+iw9#}a=On!or(D*D6g?Lvm j-6|i*FJssf`9;jWlJ#E!b4Z&08kn=D7fV#=gNOeQPtY(J diff --git a/tests/baselines/advanced/graalx/weaponSystems_IRC.bytecode b/tests/baselines/advanced/graalx/weaponSystems_IRC.bytecode deleted file mode 100644 index 9fc8a5ef6e00ad6766b1cc0dd9b8da4821fec135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38 dcmZQzU|?imU|<1a5MY8(49rj(B+kgr1pon803iSX diff --git a/tests/baselines/advanced/graalx/weaponSystems_Mail.bytecode b/tests/baselines/advanced/graalx/weaponSystems_Mail.bytecode deleted file mode 100644 index 0aa0001229a682dd1fc9dd71c8e3445d82956bf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5137 zcmbVOTWlOx89uvSk7JWiC_A$@G}~RT4Q)aad)opvwoAN@-B71Vd`Zi#?(FP%J@xL4 zJu_>^1*EiApAe`I6+z-6@c+5)YE7YVHtsOcg zwB8fEMT8UD3C4e4MnLsVbk1Y^_EkI^yYyGPT-ienk8jP zjj+}%D0VfKN+760C7vHvvjZ49lr0jqhb5}*GsktpO$w`ucAyJ$&8AIWu+Vqvb=wbY ze;@r6h;~COSyV)3`t^XBqH);16F61G)a}?rx5oR;wPi~S_m+HE3Z~ez8!IbO`-%Xj zC`!Rxv%^a0Hy9cUEy&OY4s|N?y#vc@fns@$R@0T|zz$cvgR5IxI55jZ?gQs#n^ir( zX8REIe0Euyi4313J2I2P%5JYT3yqeY%<;CoqAQr$I4}dgPdec=>(UX7`{ia`c(NfI$7z~%J1HF^6+-;V3XPeNMik_)q^NEpLAK<3&6xrl zS!;>@#IbJ6jUfs^2$9TWFtYB=6!7Q?(`7P{_A7D-M$Q;`D7uPQ3E8a_xNt*OIVK$KZ6-E*JaWmHX7sAV0#dV& zOSHAwjMz|3nlyU#Fn02nsgCwR?y-^KHx15822bleb*3yX69ykB={(cD4T_t=wMX*# zyv~Ql&y**=-(hDBenRKN<=eT34L+h34E~X%z*9otWLF?(@KXT)Xh|#J_&{_t_{VVi zc&WIU>9A@}=MTb*Przi>;JQ}Gw%Jh3SEH0|-zh^X*I&xuqXr*CT&WKGk+k>8(%2H9 zzXO|}(n!rfyrUBUJ~H@2S^<(j1MjpvK^rmVmeL*e3Jwp_;dajpgXd+^@&L(~4UX6g z%Yc6i5D&|cz?gWom~9U}4f;E8QG#(P!_Ir+BKS}(B8#cNLQSS^T;?_PXM>k=+4eOd zTb$2!*qf7(o&fC*{^>j^csP7I+fJ2Z$s|3H4E`Ca$0K79c{B%vTln3Hp0_5;P(K5o zm^>7vC3u_q)3DCZ3hwxx^y;&bSAQ`0IfI`E;02ve;V~^A`3WIjL@p^0sdrJEvd$kv z4S!?s$5CtWpP*zZL2y5pF!A}w#P?*7BiZ&41xZOj;tRsvCrYAVI{yM{nR?COPXe8l zknq70GMoBtj51K_ww%sq5~jWwnR;79GaFf{Av3S491msN=jc4A^LgPq45yFA_jLZ$ zp1Nmn@7hrPFAP17c1r1rbX#;AT7f+Sum6SAoE4PuJ%g8Hy>0NU>?&%_?0B|)DxlJQ zsRZeKX+okL!KqVdne?Gx$$Y054So?>m@DN370wPGsZ*wV8t9(VM>=0v2UG=G7!8~j z#c332Oy5vwI=|GF8STo9Nv~i;i|Uop3bm}u)X#t*iVZGBytd;@*)wltY-k0R*FZqW_CngANO+6QPY29$cO z2h?Hj(q%n~aQS`+O=O^pz>r1)xF`XlrXHvOz~Hf_P8}$lgJ=snBcYeNF?72$THre0 zkbpO2AqG%G06qu33G5i!-OrcM%#Y3?FMlLB8qs{VU5lW<(uLM}B?G&{!*Hm-{tT84puP9 zhDlE|oM{eD6^G+!1xK0U&X?v$8he_%-Fzp+*Smb*%U2@z{*?!c6FL$7E^FrpY12=e ipM~OsKgZJs;`Nc5`@=-CC*fI&W5tK#uzAeA5huUBLT$$Y diff --git a/tests/baselines/advanced/graalx/weaponSystems_TradeMenu.bytecode b/tests/baselines/advanced/graalx/weaponSystems_TradeMenu.bytecode deleted file mode 100644 index 39742bb892c4ecc1184870dccbbb93d86a42d5a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmY*W!EVz)5FICJLJbrO_PXT|0`!28sH#MWGgJbJ3l)vT1t}PNu~)>q(R!W49Js)R z16TM2euXn%GEywg%-T(qS{lv1oj32zjsd^{fDVQIS`_ao?kRb0LT$!6j5%Q#DLEDy zSB0_Yb)Krl%R<<*qvWaPq2aMb`_#x~yy^R*^K;!FjX=3F##ZR*>Ld2X~S;g#a$ z?hB|=o8RO-U=D3#i^1s(G-fDtA(6t^-)YYtn-F;c2W2sOcu@{Sx%zTq(%O? zo-*UIIG)J_mQcb%#3qH5izGD=#&LAv5Y|h9+%CC!8!eCif^+Cp@FN(xy8%P!4!jlg z0v{cQt?r;MF>E*0wvQc#J3e+9_8R6k!CQ5_3jQ#>(jAc2?iQozcj?|+?GWj2L-PKe z96yByU$sTTCr^OkwM)G|UVqr{_kG;E|7dvhvw}Ip8wW#%H+|f<>4@R22R`1Wv*)c` tN`8}=S2@2429)0oe+73L9&AZ7JRG_7gl`nz36RB|7p)4u)?4Vg{{csG(YgQt diff --git a/tests/baselines/advanced/graalx/weaponSystems_TradeMenu.json b/tests/baselines/advanced/graalx/weaponSystems_TradeMenu.json index 8a3bf6e..966ecbf 100644 --- a/tests/baselines/advanced/graalx/weaponSystems_TradeMenu.json +++ b/tests/baselines/advanced/graalx/weaponSystems_TradeMenu.json @@ -1,12 +1,12 @@ { - "bytecode_hash": "245b71c36dc7914792d724dbd4230cb4f3e9b2e7aacf1efcdfb9edbf4f0f795d", + "bytecode_hash": "c3c690e34dabeddc94837e2aee7421803781603f085c3789fa1476afe2aacfff", "bytecode_size": 684, "compilation_success": true, "expected_failure": false, "error_message": "", "metadata": { "script_path": "advanced/graalx/weaponSystems_TradeMenu.gs2", - "generated_at": "2026-01-04 18:39:04", - "compiler_version": "modified_1767569912" + "generated_at": "2026-02-23 11:42:03", + "compiler_version": "modified_1771863608" } } \ No newline at end of file diff --git a/tests/baselines/advanced/graalx/weaponSystems_Vote.bytecode b/tests/baselines/advanced/graalx/weaponSystems_Vote.bytecode deleted file mode 100644 index 487fe6214c2b523c1d479bd725e63116b9583efd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmZ{g!A=`75Qb-g5}KAkVRr)@Qmf*CIMMWmdLk-Z03o%4Be=0iEEYTRI)w5VNR$f) z9)u_0ggEsvEbTr($KGAksO?JDKlXb5?;is|002|C+&6)%fh$n5qd7I4xzkBJ*gjN- zA0G+H)Mx{ChN37tMkhc=^o&EFi(cQrfNCxc>}X1pj*>>J1O{52ii88CT`dMCQN44K zrb6~khq7ygk|`K|X`t{Va3NCh9q*3>Gkv&(AMk|~vcn zrAy_xy5NASc`B}W)mbGkPRp#`jyON!T!^zF+kz*Id^J=usu^)JxPd5R-Ey2V%+}Bt zC4Gvb^a+ZRRNS$|AKh!>TL*VR4!@e8>am5jR;v}+;KO=*^=A%Gv7K0I$96KzgBt2o zWM837N7n6T+^^S>t)skg^;^8Qk2;I`fZ9O4Mx85M=S$a<()FF|St$Iod92ZX5v8;b zm$9xG5!Nq^P29|end3IXY^8nMd>`9*n#8tQkd{i)&A&)7wvCf2hy#|8?6YU&@a!Qu k-2XvY8K39zFUq+6{|3npJR@86h-~YHP|Xu&P^;B{1CUetBLDyZ diff --git a/tests/baselines/advanced/graalx/weaponTig_NPC.bytecode b/tests/baselines/advanced/graalx/weaponTig_NPC.bytecode deleted file mode 100644 index aa1250a10cdb2b72dc75b86cd18390ecad385593..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2269 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 diff --git a/tests/baselines/advanced/graalx/weaponToys_gPod.bytecode b/tests/baselines/advanced/graalx/weaponToys_gPod.bytecode deleted file mode 100644 index f7bc65fa3782a85bd0cd5522020732b62c3f9648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2624 zcmbtUO>h)N6n?u28$d8oW@dvwVK$r90J1I%sDKDb2oOjhkN}03b+XfJ26m@6)3XU{ zm6j!CNtGu&V0pF5qc`-XClB7dd-YjJHDN^#k`OTVcrkX+LBEG?e20RKT2& zxoWqI``4M%z?oO zHD#HqbHOgRSkP9;efYoM>p>T<&d!p{L>TZkHCnD0vIZ?Kgih#HuQ>s={M$ZX^DBJm z7ORF-t$WN5gJSGii4`PR9cJdP>A0!R9e33U#La*=oFH)8q;SJ_lhMSLsdLkdH|D1+ ziFKknM(07m^GFfs$P}3&C{hFX!le^INaJs?g4c@ZFGH=ygyT(FW@CL&N zr|g?vAi^9iumIGNtRd`hnc2}T9uu|`FxzF0TPzkyguL1CT#rz^h{&lh zs1v&rB6Vs8{H9lD$~akXvB+UQR)%mQ#jkyh1p+0p4;D-I0edn^=a@|esycqag!d*> ztA=yOYv{GA(~7QBRNHF6>veU@f?nwmnp}9g(DCJwDY<-EXwM~7&2587uS%;Mst7ge z7!9kJ8a6@GnglIy{2C*4!EHgS4l-2?q7Bg~b)8}*>fy=)=+bQHmhJ_N91=k7x4HAz z8@K9&)n&G-_|=3v=g z01gFwO%Tnftgxgdl_}LQu3_NSYN%e+HVrgmL)!$?;}>8`gjdy*C>RKF1vNas6*563 zDu`nRK|Wi%rYXZ2?Y+wDE!Egdw+Ky|42$QIdLz_e;sx3AORC#9lRdP3nilX32CuV;dbBNIV`|vM+DREvD?>SI(L;W61%yZOxCajPBJ&?6%=hvfiFIQ_rXoi)1j5IajV9z0=VWTq;13wSdxGDES>{G&&`y+rCVt_*$pko-F*OTLeM(3^g_yL?N z0x<=qmFh(-AxcVol-*;=gBjbDJimCFPZXXlpR^W zf_iKK9^DN1!6N~;ZU#K|Ux3FWz*pl4QDBq+Nq6a+B*e1O*%2e2K!~rIQVB$Q65^C8 zC)N}G(vp*T5K`8QTv9XLk>~omsh_rGdvuZ0T`+c6FD-c-1)j=h^zJaaF!fcEc_RNd zZs=`{L;5|0y?OF&*zNah<<$Il;VE2M{)A1(p<=oa-`X(()>*CRhba>x3SUa^eZO6 z)>~7~MQS*qJYsZZ!?nkd7Uito;xh}bE-pq-p(QUNFz|6n|IcrV`LcdWFJm^;eSb!* zAz?)o9@2s(VLJ+2UqLaghaL?CKh+&q@|heuhVEK&LBBxzp)4WYMB*|HHjJ*_c$ptn So46?IUUWR(_L$p&?SBD`4QJ{A diff --git a/tests/baselines/advanced/graalx/weaponTwinny_Tool.bytecode b/tests/baselines/advanced/graalx/weaponTwinny_Tool.bytecode deleted file mode 100644 index c063385b39dcb787456e4ea5c7631c28a3af14c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmYjN%TB^T6usq99-^YcAR9wd)&xO!YGNd8j0p=(jERc^L(@Pz&9oqO>wg#${RBU3 zk`mV585C%8d+y`RId=vCGyq6p$S;BMjA1bE(Qzr8hO+C89B(+}mMsg7d3T&zAsx!9 zz`T1J^*9ZJb)(C?2R038hrM}{@cLIj`Lar4%(mKN8o_`KDZIk~lz}VHMxbC0Hn;kH z)b%Wvf<1L0SuIX8zLUXUfMK}a)TneQCgih+Hg%o z=08P3)+~!OVh#~S_w-t&v}!h*mq0{e#~0;@*sr7fM_C+5-xpO0ok(HPUT zS>4@>h$0b3QtE373zRL^i8waZUU720U!1(^p~vTXc!ERRUkw$mhf4aig^)!;v4sz` MxX|LMdaX?U7b;$)qW}N^ diff --git a/tests/baselines/advanced/graalx/weaponVote.bytecode b/tests/baselines/advanced/graalx/weaponVote.bytecode deleted file mode 100644 index 26b8c2cc0fffcd2b86076a876a709ba0512b26d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2438 zcmaJ>O>-MX5S?AwGBzPGMj9s}R#qQ?9ULdf2?@3nu#MwX#h73xfvQlITJ4UlEla!h z?#i-qBqy#M@W0?dQN;y*1qTjr=EPyDq!TCJ%S5Adc&Vr0oGhgp-t0 z!spOywdBiZUB|V(F4=y(wMDWFZ5D*S*CVdkW@I1vgub)C&-{S-$IK_l@N*ft9{Md} zcFhAun#|d6hUC!q_M8?IE^Dn0Q*IBV!;qbXWYagzmhpx0#0wpF-`MR1A!{2~ja6gM z^DSl@fUrBV97dyOJOW3zXDrVV%XF=l7a%3mMe5FTxoRWdcDy!EuvQ*zxrWcN6F3bp z>NHn&}g>)iry;r_lB|J+yl$mtzgX z3*b+-9wG58usVr>I|1{$F4C5j+hL*4oMTa&&mxWs3k$@wZOe0^N+g|X3t4B`AX)e| zc@o1bLZ%yZA)unGL|BjT0G%wA7m2Gw&@_TPafr*hQRyP6#t^XViXGE-yet!W5EJQo zzTNfBLjfvV0WH9cZLeDwgn9kAPv_bCL^y0)g<)l{VlNUv<-5VK@$`6$5)gsT;rzs!F8~7LR^%u%&u%mfH z8<34OFfRhJAEW#gvAixrBcQwh5)iovA`3O1H*oh@%0)nI0^$jR#%h#LRP)nd2CP>> z>I~(t{a3_c8iCN+QmItrXDe6gwQmR7UCPg$uTwr*7?8hUU#ENu=8YmRz!WK`CCaDq zoX2yabfGSOlwTAvZx#mHHtZ$XpI~QTzkw~OD=w=m$e$9`kdFNc>DMp8i120D$wGex zrd;F|801oec}rou9bx<--EQFp2)+X|D+qw)985xH37boW{wU0hFsIX(DZi38VoUkE z3U)rqeoDep_yhJT3=kJ!5=6ldh>G=q{GLEker+gA?e@Q9X(Kw5rPyY(jA_MI$VB;d zX!~9@qb22tTSPxX>UtHAXq!cp2#z=42r5ugpZ=Nhn^p8oT`tOStbJ9!KQhqixH>8H zwFe`R2srOoOJH&>TQ z6LJTt!&d}L&>I+0%{k2u7f|G2V?y;WrBhl)ysKBELOvZIy8dppjDW|g@c1skH66ut z=5U|>G`U)z!?uyWO?XiLA+AzNgZ4)$?P0k^c_?3vb}$z^1^?1prC+1bhGh diff --git a/tests/baselines/advanced/graalx/weaponWeapons_Grenade.bytecode b/tests/baselines/advanced/graalx/weaponWeapons_Grenade.bytecode deleted file mode 100644 index 9fc8a5ef6e00ad6766b1cc0dd9b8da4821fec135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38 dcmZQzU|?imU|<1a5MY8(49rj(B+kgr1pon803iSX diff --git a/tests/baselines/advanced/graalx/weaponWeapons_Hand Cuffs.bytecode b/tests/baselines/advanced/graalx/weaponWeapons_Hand Cuffs.bytecode deleted file mode 100644 index 6c06217fa1ebc7377630e6b3ce183b3f2a70df49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 944 zcmZWmL2uJA82yr#b{mBOO}vf4aF!h>D4n=e6PHOnunBqqAx_97ZWk@HOX6%RM|yw@ z5-1fDvg6h<15KSx%k+rinRy$w4NySWmX$o)RVDj~a+8yIPcvEM$hnzp? zY)Gyl5xwE-heU7I=*;=iyu1C`1iGBTj~9JxgqhD4`pj!1`NaI4zjF~^Q`4_6cy9gg S8O-U{(`n2+x9ug=SN;KE$S5WN diff --git a/tests/baselines/advanced/loginserver/weapon-Adventure.bytecode b/tests/baselines/advanced/loginserver/weapon-Adventure.bytecode deleted file mode 100644 index 22b30394c87d6fd406717e1a40123de6ac815d5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 429 zcmZ`!O-sZu5S{MURu_+&fTu$D?4kYw5qk0&KxA!)eofqD$GUO;&9@dxmnJ) x%+2$p;MXn=!jieOJjtkrlR7!91E0)@ra5H@_e~k^pbnJ03LY49=To?J@e8<8eC_}M diff --git a/tests/baselines/advanced/loginserver/weapon-IRC_Installer.bytecode b/tests/baselines/advanced/loginserver/weapon-IRC_Installer.bytecode deleted file mode 100644 index f39ee19afde10e3bbfeb37bcc1f9fa80df9fb766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5004 zcmbtX&2t<_74MZ+Yb;1?$j->Ju{`TlK1j$~T3K;N()EA?{!bFW+SCs1uAK}`+fi3 zd;Mm_7|Sun^7x~l9vol5TDKi%q2ltQW+5rj;at zUkUuPwZsj`NpByV*tInqidttjXoen7II&w{YsGVGmADb?iJ_OVeG_rhj*_qu_?(5F zova2?ldaf}&1~O^0@q=#Vv>$`CS=s%bKSf;_Zo1A$v7kkt~G7_YM z(PQ0?s?4+F#7Qe7IWbQtSrOa2XuAuh6QGNs?6To7;;WOBFQYMn$w@~gzTR>b zcj3kb>L1(n;SkNFRA-aOV__7mx-bChjMw6d10RxD^IVR$m|y&MG<1I;@UZC&$?->1ZC=pWJO=#*U=A z2A0L4X*&Ke9R<6ska0F*jj-y(h*ce7yCr0xRfdR8jkEN!?Hx{aw{j}Kn<1@^k=4aWiv5rdCdjY-ZF9(Rmpiga4Bw41ZSjBvTEgOQ@5$ynwqr zZ_9zIZ$dh3wVfce@3uGt*Q*6y5HZ^e8}{zVwIzxzHNoz&P3Fc|SMKmy!WJUi_B5wy zukm>|iW9Va82ApZM4cyJIPaWvdT>Wx5Qu6d+_@p=R;nsfmr%;Jpv>rQnLWqm7rqm4 zH)}Me8L7#Kjwo1Vp_LdwdHBd{;uGNATO_16otG9TZNNY(D zGMc4q%?eg6wnoX&2yxwXtI5eL^JtyB$7`*`rZJ!hm?$yc92Sih+H_4_SzCJSq=rr! zM4Hyc1aAwtvoyU@si1!P1dfEqG(lReql3E1GV_wB1u-sVIFd+jgU+SJn4#Gd*|mh2 zbga}vGzY72zm{dK*hqh6!(L~VW;n(ckwr(Pn^jhtA*(}A)6{eLh8EC10Hx$=M^dJNHP zi2UQjFI7SBD-Tu&Oi?IU#cj4vE0|*6aYKA5Db4k^Sw*Us@@+N-$^8Wj=l-%OzD)XG zDMPQC)m74S5WhB1{P#!&Q^XXH6s%mEEh+u1G$@Z2tS-SUd&gJ;$peK9&lCrTP4QI( z^0lmgQ#>~Ot9H+ z2DpQUcpA$yhWI9yXR*UlF~m_UFmR&!;lMFdj1=Hvw97`WPui$L4mQTHz{W|XHJ;IW zPHCM|o^w~E*7Kw_P~3jDxV=mAdHx5hM zglPLCIN=UyYmn}YB}}h_rnp(aEb95Ky8lmEYPeNcA9Ij@4iQ=4rkecE&{B!NzXh&`pMxTSu1jf39{n^Z(oGCh9CG|315RIhN z+wN`3qaoaR7>|_khh>*WHxfnRJb(rr??`O4v(-C^0Ixj^Fe;-9^;eaT3A_<*VQk+n z(TG`qkzq+GwtGK2U2Nys^bLgW-Ibad+Fe65?@~Jcq3r-f#{vyFQ#gp#r|xhLqaX4Z zXb$Y(Mnz?>Xn3>2w- zf-;%07LzdXl8*0rT{*>QX>CYM16KZ$<`XQO5xnk>^-in`rmi}{S6&recSiRMA3515 z(3e8~zA5fOl2HEA6!FeBEjQ8AR^60BJIw;J{FGRLnP21Eq69)eVe3DQOPK#%_NLKk zt5p0KJ1}$RJTa-;qyhRU$x8NpvPX06d7B2Ir*0GN^w&?mEiKTsRqd%RFx_bU&qa5N zuH9z!Po}t!CL{3F7yrQ)8U748AQp9G%IbT>6tAPKTcv4yYdu=r&XK?y5Kwuh)0;S{ zOd}Fqq7%ef__D;1=ZXtKb>rY{HP5oRQCvlb@K9nU`LiT$GxcmztNDlmjsbWQ!i-7X~SD oV=j@;4D4X0*arq3aL4~#&TQlZ!fCN>4J56qHAAQkLf01{LqsQ>@~ diff --git a/tests/baselines/advanced/loginserver/weapon-LoginScreen.bytecode b/tests/baselines/advanced/loginserver/weapon-LoginScreen.bytecode deleted file mode 100644 index e657018542b23d240871075beb9ebb0c1a9d1925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10573 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 diff --git a/tests/baselines/advanced/loginserver/weapon-Rescripted_-F2LogWindow.bytecode b/tests/baselines/advanced/loginserver/weapon-Rescripted_-F2LogWindow.bytecode deleted file mode 100644 index 1154c99a2fac8d7ec500901312b751c3089e81ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1592 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 diff --git a/tests/baselines/advanced/loginserver/weapon-Rescripted_IRC_Login2001.bytecode b/tests/baselines/advanced/loginserver/weapon-Rescripted_IRC_Login2001.bytecode deleted file mode 100644 index 731056c16ce24125084b978efcabf97e3ae29640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8691 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 F{{mY#2>Ad2 diff --git a/tests/baselines/advanced/loginserver/weapon-Rescripted_IRC_Login3.bytecode b/tests/baselines/advanced/loginserver/weapon-Rescripted_IRC_Login3.bytecode deleted file mode 100644 index 6dc60176013a327d65b0c080ff61cf3d45d1a02d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmZ8c%}T>S5T3L#u~Bb!7~DkFZQ7 zFDN>QQLa#CysY4bi^Up~A{WppF diff --git a/tests/baselines/advanced/loginserver/weapon-Rescripted_IRC_Login4.bytecode b/tests/baselines/advanced/loginserver/weapon-Rescripted_IRC_Login4.bytecode deleted file mode 100644 index 8dc813c05d484455deb4b7bca83d4af7a7fe76ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99 zcmZQzU|?imU|<1a5MTmg1t4b3&vPzHO)N=G0dg4F^YemJi^@`qeDc#X^FSiZK+KX@ e43-7ym16wDz$b3ZCGwep9n2K_zyRT~a{&Ol*AP$u diff --git a/tests/baselines/advanced/loginserver/weapon-Rescripted_Serverlist.bytecode b/tests/baselines/advanced/loginserver/weapon-Rescripted_Serverlist.bytecode deleted file mode 100644 index 00b96fc4d36e7130da7a031d595f34d48966f038..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37076 zcmb_^37lL-wfF5#X0ii;>CQqj^i0oWA!M6LSmGo=_CPkW5EgalnZ7gAq^En*-IK|n z0w!UTMe(Uo+*sUE-+PE43W|aP%JZSVr#|%|!ei5i-gZXZ<@^6nRoz>+rzeE(`}i@r zbx)l-=hUfFr%s)!+m7Qz9LE`pKmHeWoJoIioH5h#xt(rdzgyUx@6O~7nfRBn4AU&8B}d~aVrYSCbfm&s*H8w#mZRtvQ=bA`)_=eym~xt*oVe%G!= zP1F1P`_ieByQU{qTAeCr{F+!kx2?}L3Ilhb)?Ag(?aK7J`F?qOOf}qw_6<7hB z+G{klkV$1hk6=pHe1r5-a{-|KEl}Prjb&+Y+%-L!w7VSSHr%NX>X{T;>5LZ+{j$>%sIwF|>N#E_NxSuyi@^vLQ-Lo?n3JFsdR&qvK#*C%UL z&Hg^BHl%u$2CRxxR*)LaV~d;X2fO6O0B94qpx-SF?#blR`2o~4pI_|B4+N@i&QYbo z`=mcx76%sErpDdJW`V%#VAa&Z_>F|y8lLoWrnojgkjv&%>GiOaY z02=$K1_kE6y1!J)=eFmI8DkVRusP0`jc&HjABP$u!D`(CR0%0TY+SbiaX1K>_`48! zB_Aw&6Ew&AN#D-rIC0U9YzE$ACx#N>$^Yyd`7ZYW=i}rjG$Hla33sDwPJCF`^rUj> ztQ(B5TUeVarO-BZNMk6I>cUWw_pDd*xwURrsy|!WSsKjJgmT?dGkdIVzzHHwb;IsW zf`ewWx9Un5fDLwoHWs*kgCf9@ZZ{60ouXq(&>vxQX*iwPn^mg0H(KfQK zOP|qneMQ9%x2POs(^vKU0Jc&$(VwV5hqY>9nqCg@18DP@iUzj)&GnoF1+Fv2zI-mt zg~aHy`8#&Q*0q+*%|9Gbut{E7FLMVPB*I-usI(bfwDGJkkw55QHb0ZE!=ZEJM;ayQv14e zrc{OV*Q%guCs_si2@BhHrQp7M$7Wc-oL`NC(LOrSzmC>qO)A&vW=D!KcbwJ2^lx`x zcOjK_t6-m~r%|5kb5FicNjg_AHEJ4h`7B})MMr#<&plwVkp)&`U?nocGWRA6$6BE( zN!@-lG@IVN79t}B)t`1*$m}tm`{U|}yYk)LS-N-Mxaa;#_g}>cAemx-F|S6Ob-QXJ z%ubKt4KQ?&CIc@4&sKM!7*v1SB4Cezc&+Gx{$|_lu0D`c$}WL9p~nOr$`% zMX8YK?sf|)S&N;8(2GQcZhG;i9cva#c+~22AqE?8Q*iH&#jP`+-&WUBtGZ=m^-`;Psj3z!+a+e`NEKaI_H!BT zJKB1du4?Nw#8O8Le0crzQ2$liA1X4COX_~KG&Tn$seYDK`w(Cba4XG@Z}o3%#kV=+1#{lw=jf*324S%R7*j zgAqXNs)ug$=(o5xgBj=u=~gG7%MNnC5Nga3w#l_Pdtrv@Ja)MU;r_p*<`* z%-Vuo5)Yk1A0NFE=t@ARLKk=5QjI}+i5ZdIjj)k07bj438yH|w3MfPgBS*{ z(}mXHU|}qv*;jD)JJ|Ol(cp9;{z}7_sSQ%Ts|$|6$>`zh?uS6wDg>{2Y|sV@nUd=? zflAkk6&FGw`4ubDYGYwF2sR5U9&yu3NT;(OJ4Pf`v-BGTleUFDb-PMVn^Wv_JE0J|pb{KRuanK>`VVmMQoWAyY?_Nm z1baK+bjT*((NYw-2E*Hy2K!u^S}|YPhA4unMn4xa4&RW?cYp^|08US;sOI>HG+K~C z3p^?YO44T<5=xyZm>M!aEg;Uzj2YKq$+98avbX5)U;Kl4%zyU7270j86gd`fX=2TR zjU&e0oWklufo;bULe%nLxOjetM<5AI4GB^AR9I$+ER%gc#M@=unu?C>i$8gOKiwz(`}1WtB8!5k?751 z6;**(F@Y?H06?>CF`29y!Rz9Dzbw3&Tta#R{It8G3P-&SOKi;#kl#^A26Pe&6Pq)= z@ObG2;;&4no5*)1vWNlS7y~4dOTCc3Cp$=`ih>;rV8*va3S#NRgH=1b@Jwum?XO5U z2{rsnr>5ZFVX*{j$2f*|omg7vP-DjT%iEr7=CB-Ms4id1F;i%!!r*o;?;BdL< zDfQAB^ugbBWU`skpo-UaS0wup$4Gc$8Q?ORqnTA&Nh{hGXW#{Vb4)-Yp7A6Si7Jh- z{PZHFTpCO;!Wh{WBB^=_K#YIV`?Z0AfkhI{A_T@U(IOx(_8VX~hY0ZOzLkAy`CPT8 zC!a_34@XD8;S?glsvY55;Lr)+r zj2dhqVeOL0I&AO|LiW*E7m$hzN8u7BI30PMn)N!%mMlrMo_?0IblDQ_3AzjU{=TjK zy*l3B#rS%Af3Zi;Bki$dsRIkOmY8m~wj^3x&v2G6U7lFFj4{2tvoF=j%@8IWPC(fw zEH?~(QwLOG7srUJHHhIMqf<(Cn5_)lY3QT|oCM2qWEHb9t^l6d#ZpgPJTAY?8r^9qpSzb8kMU3s7o8}De zFL0?7-^b%sp6|H&EMngLH#x{x;RXQCgyA6=>#uPUa&+di{k_B|$XOO`ojEJ-Xq(=l}`tbT6BVOzhC zZ{7@ouH;6w#c{F!mH82HyHGi0#Z15Gw&IJzAj98jUA7crwKz-9Y9---p0#o+nrDgN z3c;#0QQC+KkUW!SuPfy6Ow6ct88|M-a7kB!K`P3E8A^=Jt8C0O`wLT8{pQWb*lpiq z`k`mza-qG%X*oU7vK*tR>>$&Xn1@{lQqr29X=PJewPb#xJ73E0aXYqS5RQWRCTEpH z+fzKb(}T}IPnSAN;X2?l>@LyVR42@xj(JNUxeSTy5-n0XGwQ(Rgxu@UX#t({+o)6A6)K-(56#eDN^H?g=X}av)HaWPd+N- z---pk=wM~R9Pdn}Q~L|9b9o-;AlnnlvFj%$w1lL18pzsp7iw4<**?t20wa5*JFp{x zU4+#<5~8ooNY*sL=%}b@a6`J-nc$RqWg|ubR}XGaAq%8>L4RJ0%fm+qdKq z|GQ2H<4{?D{M4I+6ii804=L@Z)lw+ZcbEy<6H|3pV8zcz)V$ zl7A$-Nlsu$)?t`bgnV*Z&26IrNmy(VR{YcRs3gF~NQQd>#ME{s8+jEGoQ$gk7%gtCSfNV6l*LU?n!x zax*rVV~4d7_dRS1{?#MjblagAnP?ghm#*aYk7!>-KW6>FlCm1(Blmy8HQoIkpzGRn`e?T8xs6c@rbI4J{T${E=1baSsZCa`(uZ9j+M>E~?Z(I56@%-yz9H zF>tb^2w_YyXr7;^3Wg0R>dQG6#MiRgpPL$=k%}LDM(VU7j4P~kJYd=rCZP+@pA3+3 zqiC`xD>0;$F(_3Cw1j}6t-rxGRM9OvGUAXU8pszmXL5UGjQzKbn}w=$8S+{LDnW+F z4sP}gUaG&8XS!EK9R_6${GRLUSfI#>nKo;XO3ffOX0WUFM3I1r4vwr&br@3YXYl3^ z5aJGhbSgZU1ZH8U7AT+s4(iGjLOxK*9Y$>xpgpc=yB*g``fQl#Fi!?{W-%#!6&X$# zfsvJVGt+V1Rcx2A2Ld_iuD=J-gGv)1Ico-ymPsBNT425f=ge7`oeggev|M4J$V1m= zn;3!XVau+$y=kZi6(eVeYEW(dnEnmOPSAE};Tq|;0a*^ffQ%*hGk_b!4)jxR0>XOR zdTuZ|Q08&dqJfSSPX967ITbsr^2k#l|G)|%1kZ^$Fz~iu#|%MHwvJqBbLn<-ZmW*Y z`>;_fiNm%-66HoUE&tE}$C6v%(Rn<%1?OPB^wcb;4)|q#*96ctStQ3a&Cq(QXt%3e ztjaHN(f98Y2B(cYzI|3OAtk4lFA!>14J+z1$A`RmS&p5V|09nWjBRpc>Sq{E9B#2*uil zP*q*4v8+WE)s9VV5*0+Ea%M^rIMS6=HBXpSKY1dCF_HUA7AY&#Q@#udbtD6N?PP#h zsD)^2$^!dp#g0Jj_Ib9Vf=_=!XdeJ|(le_!WAu9BBy{X-v(Z&*PH90k4fSSdSY5N* zIBf|1kg!Am?RFp--CJD6qds_)M4y_j>gJ8ICvAy|VjhZ2l@ghfVDbvf#10pCaa4l5 zgwty1RAtE*B{o6TNIf8PpTOq{a$Ker&Zr&gm%BZNHby8n5fB(Uj8)&(!VzV{UD%5o zZ3(1T6Sx9b$nTfd98Y&3;Kp--i9B`8tlEN0EQuo0ElOD7qKQEH$gUI|k(?>XM-xBd%J*`@D%Bm&Ee09GsY@63kyN6eKz7GzTY?U>8-OuD(%4xjeQh zP!Lj`IOrI40QJad2ZCt6gbWa8gRU60;Tr3vtfO8Ws70?_D5-fE+KGt2z{NJMUUD!` z01vHrj*7Ju(SJ_P4hj&&r{O|3Bv&ji1Jl7$a3aQP6;nAR_fAC;8& zV&2|xi;H#UeNkUepPmlJwwi5yCD%k;SKdv>_a8yIr55f z_t?i(7a0?2x$h@035kE@FtG@)!27jDiKk_`4`@Ra>l$(Z_irIfq{^$v_$cwBmdNme zOQ*F?oDlb%hOxuW)M;@q68EApZ%o~gga6~+*xJOjm{$|`YHMe17&Gk5)Tnd$tQmG1 z;@-HJH-7zEG@py+6M!H0Ce|jvFeTk_i1QxTvOaT zJ{k8;sBMgSQ}@NZ6Za|LNy)~1Bi`%q9t)9;$2~NhF5*wG8yZ*-@p=KM8|qsRX>LO0 z43TDLZ3D%-Dej#NF0+#IcCC4v4lM+AGXmi#S=^glo47ab)hD5aQ(|5s<~77Th?s0{ z0k|nSZCc%MWNh8A^SPMU9P{SX4UKIE$oU+=r^mdxF>hYo&=`P*<^lRZ%$pzcPOTe? z5|Reaw_@Icn0H#;P=t_o)D4{<^A^UuMNm<*uvnZVhZXqq9q;y{EXyuqMn&tmWX?2N#|vF$3s_qWX5 zfT%HRHa+fbKu0zvrJI{9i)fwb+m+bFS`5>9r3Uo$ z?O+=7&S$4par63`;mCEMyEg7^p~Y?OYe3_Trzw+FBM-9y)*bi7y=_ULY%eve_1|OO z1sg)hJ8CPM!r~&o#@L*!$0qV9*s-rWDS6D>W#B&md{+S9ZQxG>zB_J&OK2R?34mT|puVc&-kU{RZ$=m2QX<~;$Z)g~ zbl$9W10A9>(MG?C;72&?0bWcn2KcS8OB#kK8t_#DgFnIaif#v7jRq-g2XQoype6nn zA0vSA!Q8{(wW&9_V1V=nOl0c_jbP6vN(tx}MbBg{u>(j|;f`xx{ySV4pvVq`H z+K=Oq4Bo1t zja|MRu+F413KY9W^roATt|ZxZ3t=paq{o7 z1em>qF8KBb#rKGUP{=4NxjgRe6-!tPST@-NcXNokq0yfYg6{{omo6>`=W9?LpyX@m zKcs4W%i~ESVFF8&ArRlVoVhOA@^caei={(5vK4}v3`k~D+xA`w| zZ-3JVhQ~Yx8&ZCK%p*`1?28U$02AW?=U3ej79g%c`2Wikt8NJE0{&MPN4!DcVH(l> zkNFM?Gg^*-g80EJ$l+Yz;&M94fySvR#+Nx_Y=_W!$@7 zraBR^^77?S64)mLyJ2NZ%)4P;eSLk*dspMBEo6|6dpE|tn?UI1x}nK<+@g5Ly?2x1 z%?&F7re8k?_fL4d4-439c)lMi7akv=^FBhY zof7vxSc{eMLrR$2v@rKWn3(rrV7)EwU5>{sbwelM0p7FlxY_U)(QYB{8uGSf!We3C zK7tx8PAcYol(zOUS&wG&_&)bC9#|uB0OI z3C;`WuHl-g6X-|oNs%g#!MuMm(+M)oWIu2QYS2(a7Q7!R#!Q%yNR)-FW>J z3_l14YR-#$tztd0P!RXiYS9FN3f`ZQ_zvr1O%@bB8}mK`?9U}7ZmQV_(sx%hiF=<9 zL$uzv!add8js{XJpcQ6MC&E`Y?BKnZ%j7i0Nl5UW{L_Xo%Md!nswc-(_+bwiD9c#m9g^*J2y`#3!J zVlak}JK^lzgxqf+Lv3ecIcQ@%^A)HdMfiO(Y-jJL&sXJh8utlHFp5Iz2&Ar!!#zfZ zYoWfW`-CFL8jXS%vjEud<2w^5r7+(vCLu;Df^6P25JcM@gH^{?R}j_C+`a1hcwXbo=Mdq@cj ze+BETeJ>S{9)2CF=A!97-L1T1?U#c3Z|Qo2 z{|IDwh%}x;haZK%cCfC?%eOIw;@)=}1m3W+jqD!7>|MVdkZ)swTp0-P0_q-@#V;~E zE-i={2WQjR;c=UF)e{38A~q2_c+9o~8Quu7V}dP#!hMYXzKf+EB+r*-YRJbmX`Gn% zJ-_lvS`2B@lE~yqbcF^oZk3PyZ$9?pDinE=9KNqOP-ynx-v^+Or?fJEAV4m&Ka^$m zQRx0VA!CB!{0Oc7gPacPm+>tq{HKiCxPzE_(U|vR2?;rZX6pya-PAT^?WWvg5rT~S z5`)E`2&fSoFWFs;`+^07U<_mhgCWQ`ICp=;_fussSxEU)3iJr;fcj15JmTEe* z|KdXYGpt|ZUc%eY;U;32QOO&p1PztsBp#efpmmU|539zSJ5%zH+Q z4O|Avfr!I#?^ob5zQO16EV#fSDK01|F3)K$&kj(!|Dkl;a-_trpht-FGrT{oyeT{6 z9Ey3*1M~twc=MGjy<}VrI({$5XMFxI9<`S*j@HXtj?&BV{koTT`dnVB%Ek2ZB^uhx z(949WjM9FMF2uawsHOaW)lxoTlEf9S0P$w{oO-GqWq6U7(dk?0MGmR*A?;Cg^l%6@ zzm0jn!^4YtWdtn0SA>T&VI&q1uneRA4^S*Na5c>+zshpl`;8EXN!G6Y9fWnZN;}`TZFK_!mqGvzHP)c*1f8#r*o)J{14Xk!H&^@&W|xYW~6L z_nJ74Jz@z^)}Cb3LG52AT=7u69C5fQ2NWFd8lG@~fyN#+$E6Kv=3?bY1SIp|p_*_T zfskNAJLb`ZtE35VqO{yUqcO^31gHeqM`My5-GomC7-R1R_Zm9k3Adv`EhycA=Qxph zUkfV7Lz}Xm{h8hd9f71RrlXI=z27$hX#(UgM<#L<@eX`J3V9l3EE8XXv6Lf|U@Zt` zWlOerELG>(0PCx-W z6gJbl4jAAxyq^&FO0~c|q+ZIA6Zr;nRVIoRL_*By*?=B4#tNtey?_Q{g2PGhS`$A5 zs&xQ2>EWDs)dW<<2$d<{xKGO)*YX}fb_*EOz~L4Imyc5#^(;rG*CBMlT}ZT^!Qz=x zoC)_s(8&ayb(X+padrVVyYAJcY+=G!Sjfap339h(`ZQ&#C$zduw?igf8$A@Fb#1~> z28C19wA7*d#Ajt%GIVE0J|G<#O5hQUhwKbqPrcaNFx*IiLt?<^&VU>tA!nsog{A>x zimWq;ttUk}hEr&d4Jrnm#O={I0e)b3(k4!u#$+(+d{63k8F+=DXXd1hs@{J^uM`6N zrRq>ZU%2%Ob|c1A{0*5gl_QuGzQvyhQ{HB zhE*88#bQ#28qTg8njz84VS_r>M?GYrMht4jV8d%q!U*3i%+QC!C>&0<908hbr$qaP zL4z8SvdAw%fNGlS0D%8?}q z!X*NqyoU9pvJ|PecvLqX*c32W+jansQ{F z8sl|b-PSYhIQd1)6Hak}R3dWn?+}b?NI9}Wkp4)S6;e5}Q9!R@Ovb?w)ey3-lJu10 zgI0?46bxiQM@UaO#pWiYr_7~D{4>@8VK-@~f1YysCw|2bOb)8l&L4nuK1T0VJU8R{ zUOczZVzx5lLRYvA&l~aFPUr=M-bnM@!JPtL-o}6tu`5Ju0oKm&s(9i(s_`zM=!od( zj7dl=78_exSh$2bm zRV?2kT`Wi5iYEhrc09@QGCZl>6rNhU6)eq)gKl*oHA>ctYsJc;Ka z$nkyvR*v**+WWPPcPiT4BaBcBCJ|;wor%~_tQ)$7<)aMA0aU9rqUjD;4py-I z$?LHkc5Z(IJg*qR6T|y9;pyr9&GDBgmTw=Wm)P)_eaWzMEh3`7jNZ?31c!K>#`eAk zy}VKz#Z}-A_fU>pq^IT8y8G``8b5xQlI37ESYT|~H118&j?H&3s$Gi!iu2@lZmHymYvz~J3l!uM2>Pzff}lbPiaw(#BxR*xKo zm6+df1Wvk6_J`ax9)k`3(*QDc*b$9n{yt?CI+=a~_ogvPrdPB48q8JX(*o9U*u{eY zv>DrYKX`{E{%b=dC$Lk{~VG~+im>`(yR<|pl`_bJ6*?}n#7 zsX9JdIPz)D|1(uO{#lU55^FrNIKI32UOge~7o&cvRM33A4sw z#?e?m@H(u&8e(0J;E?6@hTROmd177gcQvvZlg(KjPDsj;2b0s9WzBwwdxx(h4@c-? z?!#9y@4roUvERVhKa9U`%2xKIsKRN&9&tRN-@;b0`T8*I5x^g<1b!R9?m`%$c*7xXT>nklA`e-Pd>@8Nxub`$iwEw% zOTt0M;NRF3e=<-{C3zvG9QlDskE&++u7zL2c<)ml**B^ynd2n>nONuIx|5G!-LAdad>l~(Bl6xb_#MDJ} z166jMk49Pn7@`4D*^gnNHkhdz7>1=QYV0S{r3&Crfv9wgDc8-@rjvBf#lJny zlR=D&GO9sI81W>-A1crl-TxPKkMe?<81}k;mdJ7u_DQlsl(#?tym~j1&(9>$^K-vv ztWbUWh3eDe6shh^TBh*%Zv~d})4>Tr9rB(U15l8I{gxxY1TtDbPxEdgyOmPqXVF-L zQ%CdZw5k65@I!H)CUQGoc)LS*|8j93HXa*Q_W{E3A>>#hG^ z06-3+9Qi98*x#TB#FypB-*6A09QivyoMi_354=b4f3qLMpz&*(ds%b;J{tZd=6%G% zi8>nRHI4Hka4zQURS$np;qN_lLzmf9qmhahe=ak@PG0jn*)lKXBzvW2s%|6<5b

    wrF8=C7LDmT)sFP(KXeh;+PdT{AV(G)?aw)r08CRFTrRMRHaJ$tQpW z-*TMjGc*>nHRcRW_ZfvbX(VR7#ymw~PM-)&PJ#qcs}7$Gz3K^2{&v)v+n}j8YU+!^ zM41zpE*Nvd+bB*T@-t1UL6bTUxW{0~N!_eTH_L@32t4#L_@U+s5#BYL2v>)u;2hm- zt`_05XeN_SnO)%XmGeRE4rcPKfuE--%-0kceU3ghM<0??g_d`dCiOdzBHslZ36bg} zbwl7kU#7xooP1RmjfEjHGZ>(aB9YaPMYs-cz2z?GTwO zta^feszGOhQ}it3XXywZmdHeW3-UCt5c!uHd4+IkCFq3^Xd*$cgh0y(8V-Tx5cJm& zXevN6>#B;N7KGQa4z!#_5~oxlK}FAG<*B1o&SvHEQ7Wgg@|;mBC$aM4DwP0L%o{-7 zMD_Ypi()mf{oAXyR}=9)Xu+<_UoagQ%#h(BW*-E!FjKDvYMz7eb#m|&g_sBijKohl(*WE z3c+q;=05;h85y4Wn!4zYBR52d=5p?Pp{X?f$FShaTsgW5&qH|fCQ|qW7at>l&^Z+> zk$wvkd{y22el=N*fN><|2}b8YRkMa--W8g#zF&3nUJ!5?8KMWWl8C&{q1t;KGGi#*W_^lj_e3v>-(kZmvWM6BOo z>faR9@9^tAe90k~wP&Ais^wb_w)Q1zoha;)BAtB+N+?C)9rY4+o2fg47_mt2-w;@(ey zUysYadIu5FS2bq;Ras6wNLIQEwBfxz)Zp4i91k^PFMY`{~Maaj;vMZWE@CoDQ1?Dcf+w0=z3W+CC8ka6&C zUL^<;I(7hudeksQ2l+$9~SHrXWlsV#iq8EXvy{yshF2xY3 z$&DMS{t)rwznJ&1kn!{>XZ^6EvV>G{oQ?;a^+Y_Nb$)?kd^Lb814?kZgDqMR&~D!*-0^vTP;9asL+rj#>fLA%1Qsbr%eoy%edGQOza(`+W)O>C*W{q8X@|cUFj4VwDnH z<_D?4H-H+yK@=$&Frq^_JkTMIhr})T1Vz4EoemjX$v0R1#ubM@3Juc)|En)y`GspB z&i=4Cy`zZpbz2<&?zfT$HXf2Dl|qt=Z-eg;cb_TVYjiY}ah|9yqZ2S?>-W}t2eKYYM%fq;!W zdbu#UG;9&Ah9dgSIAp34(bM<&DCK3^_Jp$hs4 z&9WLVaVvEok4tS>9Ltd#xLJGw8pH9p`V1WOFm+IM6A_{ZoxuYWS_KB?Ua7cF8s$6H zeITEWw?S!LU%YD6+s%c64z%9|OS+1~BUx&QS*H|xblF^qQf}{{^*Kh!y1Zv-0N;vv zzta8HAyDJnRexpXq6L|&2NuR>#J?+66(P_8YE(j?khefEqFQ&uI{4{c<2U(HTa`Gd z5pkYTu+n3Qp<@09;-ALDNK;iXPpPB4Sk6z1;o_7Syv0C7mxE#HXI}ALp4@H9jFyLz9eA%r{LT}!iij=Gzy#d{@ zE*|^$*s+yh2f3|>3*xkV9Q)rMvyDFqz!SSWLE0p7<9W1J&W?96EI8c-929_cVDkyXJ;BVylVnR){4GoMM3VdmVyT0Ifv*Kt*;g5==#BdcZ zPjL`0r=vo96jWDk3B0X;kvsZs#X^T0P0JOFF%S%ngYg0AP!~7*-3UHos~b9l<4p&k zJEcChDo5cg8JSUmw+6EuZ|ZWbXV~?=L3VAg%kG~7cD~KQzDznT?%e?O^P5~B2#TFs_D-8<$7F_;dvukmSLdK!mHf87=>-J3>VxT~7vz_uCLp`l^a5wa2jzlQ^g{^oZ0W-UnlYE~ zBO`3p?6B2s)m!0!FZvPueH4EmYsEQQ^dlJAt05#D8OIS0u^AiPk@}L4itxb@@31s) zgwF8kP&xW>d?v?tyh0@v|2A9Rc7@S0CXwV@<(Nlr*nV4EaM!euub! z&`fzDT#Ecz8X(9^IeI&t1SnCm(V9|}YYiRz_yo||wUOvo;?u3>_bHvD&23s^5bhCN zhl$?7@2$q8aHrhs>8FyXw%6va=6R8-^D zra&cs1{#Y!!HfZxm7+JuJ|4gO+U*kOmp5(C4A130jd<6;@#Ut!a1L?_ALKk2~#&1>3W0g?M(H`%Z<@5Pp&iXp)7{a`ZS<+rq&N7>VFqbmYH8A(1<_Z_^#sLd;md+pc9 ztydJEkY53shYK^&?>5xEx_nU!ZEfCOGWi~vJgJ!UQKh(T5dD5YnU_GLxbmu5F%?~o z{-EOhhrv63L!%u1k^hctHv#`)0sfN!-X%4{3*aY}fS+mrkRQSMRs`1<=e42`W#KFo z#;|ZM3S(JVj{>ha&fAPaEektP7{|gzD2!)e9|{v#7(`(r3-3f>5(_t=Fqws0QJBKQ zhfp|{3NR*pWcK}_=_CeUx( zVk=Z6AsCE5CxiieTED0e0xvvW;?Ds{4PT_@94U~<(`auA2?sL*Nz)KUjO(sNU`(WI zlUTe?U8Y_jytt;rJP%+k3M=90Pep9NSJtaWc#(~ekEFym2>2BNzi+C^%?NcWf43oM z!>-FFoCPrDWv=rP# z5FkS;nGscOYaMO5j{FLL&noL#8(LrylArnv$B2Fo7Z0M(sqHcw;WvT^ecqbPc*UKU zQAsTrTZPmMbZ#%gB~%i#=U@^BcNKaQJUf(1XvP2M$nwsoGnmPfrvS7;{O3qB})?k diff --git a/tests/baselines/advanced/loginserver/weapon-ServerListScreen.bytecode b/tests/baselines/advanced/loginserver/weapon-ServerListScreen.bytecode deleted file mode 100644 index 70548553f4829136f496f9a81c60fd8ffc3b4a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33833 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 UPG$t%?*<13D5^lj9M|yw09q)sY5)KL diff --git a/tests/baselines/advanced/loginserver/weapon-Serverlist_Patches.bytecode b/tests/baselines/advanced/loginserver/weapon-Serverlist_Patches.bytecode deleted file mode 100644 index c72c7d306db6b52ff1fbb44f579eed300de952e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmaKm!3x4K42IKfY&bl+?K;r2hxr8R!Hc3G^E$e%jLK-G%>>`Npbub+f*!=c2l@Zx zCjkHg0D;AoXDKWh7aUJiaa#9Gy9tqEtr$htIyIK!$kdgot?amPj&HH;cj~p#bB)!q zY2+ZVIw*;(!PS5$1#EOtBJVY{Orw&weSNk=_>n6wouVy!=j@QyrSo-N{0mKq52 a$sM9UPGU%Eyjg1eX_#k;2|mgtqxcCY=SYeG diff --git a/tests/baselines/advanced/loginserver/weapon-Staff_GUIExplorer.bytecode b/tests/baselines/advanced/loginserver/weapon-Staff_GUIExplorer.bytecode deleted file mode 100644 index 74a41907d5e65854fa5402dd3ca51394eff0f9e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2608 zcma)6O>@&m7+%T20hiK3ErkLNvSnz15L}0Zv^0gpA%PM;1GI;BGK#gtqKah8GLTXZ zEr;HEEI)vM(4ogphZ9Gp$6osfx@|l?_jz|EEW>oBo{@ISZQ_Fe6KN~GA-S_08HPF_1yiIA4WV{y%BMa zkcBnB4#%&^emG-?={oOtUrRzc#&Tb}{I=8eW6Fi69tN@F1w3L&c^32gF*~u|^>|W( zv3~VTX13JzKJx-MyjPDSpS7a!w&!y~=lw2Mma7Tqb&!-t0s3zE9uKGn-Yi+BtJQHl ztl(~6krlM%yHcYWCqni z@@k4GJ#;wddU2M1ilynB+*@zPOeG%}!ElToWZ3crdk- zcZXzS^|0%^RuIOPAEGI4AqVbJiR6@C-iEWz(WDQQyXqA1d(xKZ-C>QU=ev~twY%uj zwM{Og^`OA+I#GwtSV_nZ^O$8ZYt~|?3+&-(*nL(eDN!!oY;iWmj<5%;5q2TKEL5EQ1;gXKZ}l58)5bkL-L+LYQ>zg(*&(;$zIIUaLK(P?%*nV6Gn^KAHd}j)p(WRwgBM~Sxn^$y zVrBmc6Z&-EJ4aIByUt6^=Iqh3A?j_?Z$Vnn`Z=ZNq7AlWShP#h457}WiKi+J1uiKZ zE~Q81wjs{9DS0J}LeBX-*)FtYl|}m`N%swWRPj$GJZG!FI#XN(Pf$K?h-Dloa=A^m zvq*gr>@L}PRKDC+C%Th{xS~8{PD5NJ($`Y?;^NZBg&(&#__YMyJgSAUWFnVHx7a@NnT@8L?5_ diff --git a/tests/baselines/advanced/loginserver/weapon-Staff_GraalShop.bytecode b/tests/baselines/advanced/loginserver/weapon-Staff_GraalShop.bytecode deleted file mode 100644 index f467cc13362b020be28c1743bd67beb062d9177f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69892 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 diff --git a/tests/baselines/advanced/loginserver/weaponTestScript.bytecode b/tests/baselines/advanced/loginserver/weaponTestScript.bytecode deleted file mode 100644 index e7fd8aa8c7feb4e4e0c7d2af8d7ccfcc9be50e88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmZQzU|?imU|<1a5MTmgJ|Jey&vPzHO)N=G0f{mLv0zAQaY=A;QD#AjB139&Mm|Ua eq)m+R3j?pXF&C$}=m!R|4~%RIBA*%9*|`7}2@ZAu diff --git a/tests/baselines/basic/01_variables.bytecode b/tests/baselines/basic/01_variables.bytecode deleted file mode 100644 index 8d06b755edd07ff92ff17c8d5919948295a5c8b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmWlR%L>9k3`OtQ)@qkBK5)@Z7J>`W5&aZ5uBI|RV5-uNU_Z`(DpXvX1WxV=2?3x0 z#Eevr88IrjIvi|uvxRrHY$9gyMuWR89j?y%2hQGJ;L2xcP`Uc$11t)h(vf2^l02hA~DS*5}Hf&i5o~X6&+B{eMq_Pmc|&}Ax*PCr#LS- diff --git a/tests/baselines/basic/02_constants.bytecode b/tests/baselines/basic/02_constants.bytecode deleted file mode 100644 index 56700b0f4fafee65fe850df5c526f303af66f216..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmZQzU|?imU|<1a5MTmgAs}WfNi8mM&d)0@Nz5xL2FWl3v2;diVopg0Lvm?RQEFaE za7kiGDnnXga%NsSND0Ugb;d6YV&cYJd&NF5D2sefF#<9efeZ!^g9*$4a@g6q0Di0- A1poj5 diff --git a/tests/baselines/basic/03_data_types.bytecode b/tests/baselines/basic/03_data_types.bytecode deleted file mode 100644 index ca306be968ddb54bea91f3354b4b3ad0826c55b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmX|+OHRWu5QZmhArKx#C_GnHy(V%}x?qKbSo8qwBa2LfCFeox6!jD=IStp~9F=&i znK2TUe$V&MjK?+r1OPB1@fwhhNr6M_?v+yy>lQ6nhNL%JDPy3a$ZC@M3gL^Jz;X z-ZOArkNJwGFO{)>RQJaC6g`bU@EUx<;%pYZpKd_JpO6s*1Ro3o5r4z@?v{Bd;-6WP zUZ?XL-!vjG6Deit?H1W9nasV}7AKpK5A6`_GDHM>4EqEJ42R;J!&qE!I1-l`-5!R~ EFA6_t`Tzg` diff --git a/tests/baselines/classes/01_objects.bytecode b/tests/baselines/classes/01_objects.bytecode deleted file mode 100644 index 6f0c209db9ff8f1b20c7b8e16ec2bafcc5fd813e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmZ9H%TB{E5Jks*g@#vwG-X-IWy7-k1Y!dcRkxMfjD$<-M2TCPHGC3VB$j+mq;!kK z*hvE-(l|a>bA4w3fB`^@%6tu~9u?D=>ihW;7dkb1lj=R1FJbbig_et{NMNm=RrI1} zBvTt~Ap<2=2*x_BM6u9vgFrOf+S7K#p~x_S$wT>%qf}}cDVR*@p(ue>M4lA&Es9V- z8K0d)1`r^|vyBMX2vTiOQFjJX<0^$XiDFEw*cBIYubIy1A=ZtRZj;B#=}c0c?a zxSu!rIlCTP82NdVdxcw5i^!{~&HH($CWl{|`vL#88t&HI=7!xe;?PF8oFa}&<@m2s zB?qO$Hqk-xJNOz8yyDv{+V(M0Pk3iYQn2S!V!HSE;L6y0eB>2S?e(@7*na_D{rrs9 fW3`7>O2a7UW(_;;g_+s2k5WV5kk7{y;W+LO9B#4A diff --git a/tests/baselines/classes/02_arrays.bytecode b/tests/baselines/classes/02_arrays.bytecode deleted file mode 100644 index 67bec6ae738342365981ef31eb22126de70539cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 605 zcmZ8cK~BRk5L~;3(6msHl9m$^3cYYZqU8hS1su3XX=11$aZr*%doDjf;y1jAi=`mW z*lS}UEUmmVJG(mz00aQKD)gf&hAK$I>SkV5$)?tHN5z|16$@6?P&XA9_cauJ%`&*- zRoy_%(o$s5EP0i|lI3}63bARj_1Lrm7a3bawh>9e)A%{bR}6|oja|c2o^14z+Z#+^ zB_2ijBI0uKz|sa(2ZMReQwG=NLR(YL$vgRi&+*Lv7)gl6ld1ZN{i*#SIty9|TK^SA z3Xq@;9H2paq5(l!C_4_2P<9=lq1@4c+G*zwDA}$9^w_1H;Cps)c?FvAqTk)H)gJdW z#*GAVFH){_!M8${_M%g)_3a&f+&rG>d6<(wIc)Jp;)2xg668Mt+mRebp*+-p(NA%N*M8dl>it6C z|LvQmNe~Of&mTXG9mL;iC`fMw{{M(01gh5FRH6tNQZ)PDo`j7ixxaDvXF78BS0M+Eh=n1brV? z(<(7#F5`|Ei$V-#CY>aUdN*haVJw-D9_zf28NWD39go^=7<=o%luubILVuQy4wWD7SZk*NBB9#g@PmVI1DW+7Fg~Yw5R_ z{yrEgDCj}L9@v6nDKe-pGxWvYc%pgvUf5<+6q;{N7b)4z5Q$LHlrMs3YNHcF3lk+{ zoe;dJ{X;B2mtV@S diff --git a/tests/baselines/edge_cases/03_deep_nesting.bytecode b/tests/baselines/edge_cases/03_deep_nesting.bytecode deleted file mode 100644 index 88812d757b4c5a917f9497f483a58f45fe24385a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmZ{h&2AD=9L3KaC=|3ZAP)7b7B7A^ZuoLxSh{Fp;-W7=uuLmD0s^h#wr}Ic7tjar z1&ohD0y{UJGvmxGnoe?l|1;-)-wVJ1$WrNTUoz(4ncF8|ES&~{{>hqf)d7uuGr z8`>r<%)*~9Uitp?4eMxpsw_kOnfddxV1ck_H!7W|w4>6BN)tnl#sF_|j3IoS;1usL z!h3u`fR7ksf+;>>hB+2E!#O_V3zqnbF_-j*{lRQDSc1gyWIP-#Mw4+fwXM{)Q`<>x zH?=Rqy#&jCG;_Q_Fqur}{r?Bz*?4u%k=dA|TDw^I>8)UE`l{;#Z)I}c%Aqn;mfFg- z*du3&ylr@^ZJ{6(g=@lfVMn+jlmu5O3l-s}P!(u;QC^AjN}S`b@&g^KWa}hn>alR33j6i6ZpC)? z%?7{2meBs9b))nLZ7H(fxzBv~vb;M!ZjD9n$laOV<%Y~v4bD{!=28P!h-S|h{{g;H B6a)YO diff --git a/tests/baselines/expressions/01_arithmetic.bytecode b/tests/baselines/expressions/01_arithmetic.bytecode deleted file mode 100644 index 88b84ebceeaa98f514dcd70db523c85de5e3c85a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmXAjO-{o=423=UX&@{RVt_4>JyKIvsHJql6%acVI-@dDLPFvxa4BxUohl7t&2zBy z#`^4Mdx%I8Q36Rs&@rUg4!r6ezciNJT3RvmSQ$fuf9AegGc~?u*VUh7+}0UOO>2DJ zQrEuQo?h*yVz))reONR7PbEE6wYN9twCP*lSp(a^NC^4Dm-?ZnvswOqx}!peREKz8 z0u&(EAz27SfQb&-tw0Pogl#F10FE$rCy)XnbXEeB0uL1z_W~I@ss5c^O|NNOzgL{> g_D93zn;7!ZfZNzGUO7Mk_oD^0)IrTl9VpB4KT6YIbN~PV diff --git a/tests/baselines/expressions/02_comparison.bytecode b/tests/baselines/expressions/02_comparison.bytecode deleted file mode 100644 index 152e2d92d4d347c660d35b0a088fabeeaa9f30f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmYL@TMEK35Jji9wOal2wSfMMRJsDeC$2#X1}&tGCK0<07v!D_6~CQH0*1NCoZQPK z0N?>YfTGnwjZmIuO0PtD%VnWNMV61M+5M4osDwV*jx(izHpdsqa?K>T)7>g9U3X=i z3n2c_cnZnSP!=^iyOiz!iHzQ-FTT7F9B0e;J#8Qvw;|R#Mer>68-fmkkIt6BcdNAX0A@3CAeM_C&uxQIUG-2a2L#0#cGijwA88p8Fjn=K<`pIZ(?Z z&&=+Q7XTChObL7@gp6Q2Y|OTAOLxYW3(A?!ePMMji<)&nsEYQmceXdc942CQC$w%)Gw|;hvC%?_&80S1s4VsubKviIzdtp=HF=L0zsnosX%-Ifl4fsf zl1gN<5;-9m43Ld7$X6_1M>(bHhNnXEA7n;^(ms;qEt*NhTq3@otVOPUsC}@b)*tO- e?e!@l0}ucL zmLJJlvxFsMkF_0ZL*7@cEPoW}1~gRKi>d0;VyJJ`vR}KlZ|I3OH+L$~cOwn{)mIxa zVZY7d*XE5xyHGoIP8q}>P9EeBBzaH_T02>K2$ml8kyCO!@kO^19OSaUZ^q zt2n2eR!nuA_Nm)C<0(q&5=}>(GTu2{$62OP#>#x)`}%@@cjZ+TC(o4Ynztog#i;i` z#d}pSpEmbv}T5dnTni)OJAc z>{{TSI0M~o(1Eq*R2Tm>e&EBOxnD#;coKOMoEGuqd6N=h5Mj<-dX^A5I%7!ffh z!d9e>p0qq^5^AU_`t-`m6JCK+sJI*$7X!n(pA diff --git a/tests/baselines/functions/02_recursion.bytecode b/tests/baselines/functions/02_recursion.bytecode deleted file mode 100644 index f3ca061d04a0a1476726f3a3c490655fae6174f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmZvWO$x#=5QQhTZB%eqD!8%~T>FEFP~Ew4DR_VyD-@&wZE@|vypfASJ%IC~Qb7Zg z@XfsUGDIYZ$mYVaxFRlbh*hpnX?#StcSv_Si diff --git a/tests/baselines/functions/03_lambdas.bytecode b/tests/baselines/functions/03_lambdas.bytecode deleted file mode 100644 index b4fb7877d5c7b910660b211254ba563c1b4efd3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmZva&2G~`5XZ-HVmB_Ng}OG}61HcQ*l?@3R6-n(IQAIX&K6s2>fjFqhrU7|py!@@ z;)b|!?z6099)Ou$M=^CRt-Uk<-+b*F01N;a;-Y7OOX9lP6nVnS@;s~3vq*?IO1_YO zoo1g?UVJK6ym((j_V8%_V}D{r-8;t2af^}m3W3z1JRihMoQE_g78_6G0+zIP>> zV_l0X+lY)8psBD+&^!e%k=cHO)(+vZ6OSS4hSSi=_BOVgrA`RnB2jZiL;1Ci3cl)w z(g{3vcdHyP>VLF768t5M*!TQcRRPV_B*>P?&P}s{Bql&ik4+ka_4*&oF diff --git a/tests/baselines/functions/04_prejump_grouping.json b/tests/baselines/functions/04_prejump_grouping.json new file mode 100644 index 0000000..8a389a1 --- /dev/null +++ b/tests/baselines/functions/04_prejump_grouping.json @@ -0,0 +1,12 @@ +{ + "bytecode_hash": "d9621d9a021b2e3ef1e6db3ae2f413183afb9f3f2f34ac8cb79c475cd575d2d8", + "bytecode_size": 250, + "compilation_success": true, + "expected_failure": false, + "error_message": "Compilation successful\n -> saved to /Users/joey/projects/gs2/gs2-parser/tests/scripts/functions/04_prejump_grouping.gs2bc\n", + "metadata": { + "script_path": "functions/04_prejump_grouping.gs2", + "generated_at": "2026-02-23 11:10:36", + "compiler_version": "modified_1771862550" + } +} \ No newline at end of file diff --git a/tests/baselines/statements/01_conditionals.bytecode b/tests/baselines/statements/01_conditionals.bytecode deleted file mode 100644 index 49672ddf821dd50b4bf6c4a07249aa184a7b3bf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464 zcmY*T%TB{E5L~x`KzLnRI3XpguYFf*Vm*YZF zh#mc2-DZE68!BhptO5`K2MnkzdRi=!9bE%X%K2tGQXZk)L?x*Z#wy!lKtKNg(;d(u z`YD^9K}O+EQ9T+|wjRe#vn}xfw$Cae(_k4)Cp=*yIc4%S@_k0>Y>;^9oRcp~e4{JA P`vxL@07O|~Rhnl1O+S+H diff --git a/tests/baselines/statements/02_loops.bytecode b/tests/baselines/statements/02_loops.bytecode deleted file mode 100644 index 97d86eae4332de470f57d7c459e2135902d75179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmX|+u};G<5QcvzfwT@{YT6AoxQM-!0ja7Osl>w0(k7twNgl}M+Yzu%vI1|R?gRQ!2Vr&OZK%j#b1UCGp^x+zfBTfAUrbXKPoR>olSj4Xe` zYMr8}@-5QZnEb7R(eFt0D>kOc_y9UyM54pb=t}+$8>m5xscn)$EAN61=Y3iVb(T0f zcj;^_S`IuCBqL9efF%jH%zY;iUAXj`gi8tnHHw>~xH*oS@PebBvUEcBzQZHSeMUVs zor(5gOszajCHWGcr~2l7(Sb+*{EPXCnpi9Ou$y>tXD-}&{%QaG25mF$)-*sE%0Jz2 BZ-4** diff --git a/tests/baselines/statements/03_switch.bytecode b/tests/baselines/statements/03_switch.bytecode deleted file mode 100644 index 41a77d62fd25ac876287131843ea098b039856a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 425 zcmYk1%}#?r6h^-RDoXuZv~^<|3{POYa^=SO0>+&iLMMetnFI!jK7tG1$af+c_xfEz zO-XJ}4l{Em13&=?IP!U%3y!k7u}@uLvs`}roaeW+Y&B}#w55fqG;C*J^IB^do9h}` zYW3FC?3TeHrEWP)`0ka&A3# zgwhpG$U8C+Dt8|<6R|m!%m?L^Pk_khDC$s#_v}}G<+dnU&igagGIB~5^K1zpu5U-Ok?DxQR1eJ#Ev_VTW|yJWGPYC zJcnZG+4E-XnP&iS0HBR!my6ZMaj5K6IYZ)&yc-ttI@l=Qy@~ntCtQYTs>kRlNO+~EdG7iNKa+%4662MdvG025l zbEym95lb1@n8}pP1*9TN*fySPxk9eVo&V)>#a79IIn00)+b`8l4IhI?ulGX@jK*Iz z5NaG!c>y&psR$k|QiVZ@db`mBL`MypQqv)I>mKiPN$t+8a@;5rYI?Uwd&8hC?bDOd z828hW|7jy;)by= e71=)>Tn5x!qlz}vkdF01=B8oXhA9zuyWTGl)RayD diff --git a/tests/scripts/functions/04_prejump_grouping.gs2 b/tests/scripts/functions/04_prejump_grouping.gs2 new file mode 100644 index 0000000..7755a87 --- /dev/null +++ b/tests/scripts/functions/04_prejump_grouping.gs2 @@ -0,0 +1,18 @@ +function onCreated() { + temp.x = 1; +} + +function onTimeout() { + temp.y = 2; +} + +temp.startup = "initialized"; +echo("between groups"); + +function onPlayerEnters() { + temp.z = 3; +} + +function onPlayerLeaves() { + temp.w = 4; +} diff --git a/tests/tools/run_tests.py b/tests/tools/run_tests.py index b6e3afc..c517864 100755 --- a/tests/tools/run_tests.py +++ b/tests/tools/run_tests.py @@ -177,7 +177,7 @@ def _save_baseline(self, script_path: Path, success: bool, bytecode: bytes, erro bytecode_size=len(bytecode), compilation_success=success, expected_failure=expected_failure, - error_message=error_message, + error_message=error_message if not success else "", metadata={ "script_path": str(script_path.relative_to(self.scripts_dir)), "generated_at": time.strftime("%Y-%m-%d %H:%M:%S"), @@ -194,6 +194,17 @@ def _save_baseline(self, script_path: Path, success: bool, bytecode: bytes, erro with open(bytecode_path, 'wb') as f: f.write(bytecode) + def _baseline_matches_result(self, baseline: BaselineData, success: bool, bytecode: bytes, + error_message: str, expected_failure: bool) -> bool: + """Check whether baseline data already matches a compilation result.""" + bytecode_hash = hashlib.sha256(bytecode).hexdigest() if bytecode else "" + return ( + baseline.bytecode_hash == bytecode_hash + and baseline.bytecode_size == len(bytecode) + and baseline.compilation_success == success + and baseline.expected_failure == expected_failure + ) + def _load_baseline(self, script_path: Path) -> Optional[BaselineData]: """Load baseline data for a script""" baseline_path = self._get_baseline_path(script_path) @@ -291,7 +302,8 @@ def run_all_tests(self, category: Optional[str] = None, update_baselines: bool = "total_tests": len(script_files), "passed": 0, "failed": 0, - "expected_failures": 0 + "expected_failures": 0, + "changed": 0 }, "tests": [], "regressions": [], @@ -333,12 +345,18 @@ def run_all_tests(self, category: Optional[str] = None, update_baselines: bool = should_save_baseline = success or expected_failure if should_save_baseline: - self._save_baseline(script_path, success, bytecode, error_message) - if baseline is None: - results["new_tests"].append(test_info) - print(f" -> Created new baseline") + if baseline is not None and self._baseline_matches_result( + baseline, success, bytecode, error_message, expected_failure + ): + print(f" -> Baseline unchanged") else: - print(f" -> Updated baseline") + self._save_baseline(script_path, success, bytecode, error_message) + if baseline is None: + results["new_tests"].append(test_info) + print(f" -> Created new baseline") + else: + results["summary"]["changed"] += 1 + print(f" -> Updated baseline") elif baseline is None: print(f" -> Skipping baseline creation (test failed)") elif baseline: @@ -445,6 +463,7 @@ def main(): print(f" Expected Failures: {summary['expected_failures']}") print(f" Regressions: {len(results['regressions'])}") print(f" New Tests: {len(results['new_tests'])}") + print(f" Changed Tests: {summary['changed']}") print(f" Execution Time: {results['execution_time']:.2f}s") print(f" Report saved to: {report_file}") @@ -485,4 +504,4 @@ def main(): sys.exit(3) if __name__ == "__main__": - main() \ No newline at end of file + main() From 1dacede7153e1932d63b02b48265bbcc464fa020 Mon Sep 17 00:00:00 2001 From: joey <1166538+xtjoeytx@users.noreply.github.com> Date: Mon, 23 Feb 2026 11:56:11 -0500 Subject: [PATCH 7/7] baseline fix --- tests/baselines/functions/04_prejump_grouping.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/baselines/functions/04_prejump_grouping.json b/tests/baselines/functions/04_prejump_grouping.json index 8a389a1..3a733d3 100644 --- a/tests/baselines/functions/04_prejump_grouping.json +++ b/tests/baselines/functions/04_prejump_grouping.json @@ -3,10 +3,10 @@ "bytecode_size": 250, "compilation_success": true, "expected_failure": false, - "error_message": "Compilation successful\n -> saved to /Users/joey/projects/gs2/gs2-parser/tests/scripts/functions/04_prejump_grouping.gs2bc\n", + "error_message": "", "metadata": { "script_path": "functions/04_prejump_grouping.gs2", - "generated_at": "2026-02-23 11:10:36", - "compiler_version": "modified_1771862550" + "generated_at": "2026-02-23 11:55:54", + "compiler_version": "modified_1771863608" } } \ No newline at end of file