Skip to content
Success

#24 (Mar 29, 2026, 9:04:29 AM)

Started 2 days 1 hr ago
Took 11 min
Build Artifacts
commandhelper-3.3.5-SNAPSHOT-full.jar28.56 MiB view
commandhelper-3.3.5-SNAPSHOT.jar9.52 MiB view
commandhelper-3.3.5-SNAPSHOT.pom32.56 KiB view
Tests (no failures)
    Add Env/GenericParams overloads to various methods. (#1408)

    * Add Env/GenericParams overloads to various methods.

    These are needed for genericsTake2. They simply forward to the old
    methods with null for now, which continue to exist (but deprecated), but the callers should all be updated, and so now
    have more time to upgrade before the genericsTake2 branch is merged in
    with the breaking changes.
    (commit: 07433a0)
    noreply at
    Reverse the order of the getBooleanValue parameters.
    (commit: 4af691d)
    LadyCailin at
    Upgrade some call sites to non-deprecated versions
    (commit: 760d39c)
    LadyCailin at
    Fix more deprecation warnings
    (commit: 6d45acd)
    LadyCailin at
    Change 'environment' to 'env' everywhere
    (commit: 45e9582)
    LadyCailin at
    Fix more deprecations
    (commit: 3eadef1)
    LadyCailin at
    Merge additional changes from genericsTake2 to reduce the diff.
    (commit: d4f8b9f)
    LadyCailin at
    Continue fixing deprecations
    (commit: da2b820)
    LadyCailin at
    Refactor ObjectGenerator
    (commit: 903f744)
    LadyCailin at
    Remove unneeded item() overload
    (commit: e0e944c)
    LadyCailin at
    Upgrade MCTagType
    (commit: 6d8759f)
    LadyCailin at
    Cherry-pick select changes from genericsTake2
    (commit: 4bd4788)
    LadyCailin at
    Add .mvn folder to gitignore
    (commit: f14c8e5)
    LadyCailin at
    Fix optimization issue in material_info
    (commit: 689bc2b)
    LadyCailin at
    Also fix max_stack_size
    (commit: f12d3ef)
    LadyCailin at
    Convert to an iterative eval loop instead of a recursive one (#1409)

    * Convert to an iterative eval loop instead of a recursive one.

    This is a major change in the script evaluation process, which changes
    how "special execution" functions work. Previously, functions could
    choose to implement execs instead of exec, which received a ParseTree,
    instead of Mixed. This allowed the individual function to decide how or
    even if the ParseTree nodes were further executed. This works in
    general, however it has several drawbacks.

    In particular, the core evaluation loop loses control over the script
    once it decends into individual functions. Therefore features like
    Ctrl+C in command line scripts relied on each of these "flow" functions
    to implement that feature correctly, and only some of them did. This
    also prevents new features from being implemented as easily, like a debugger,
    since the evaluation loop would need to be modified, and every single
    flow function would need to make the same changes as well.

    This also has several performance benefits. Using a recursive approach
    meant that each frame of MethodScript had about 3 Java frames, which is
    inefficient. The biggest performance change with this is moving away
    from exception based control flow. Previously, return, break, and
    continue were all implemented with Java exceptions. This is more
    expensive than it needs to be, especially for very unexceptional cases
    such as return(). Now, when a proc or closure returns, it triggers a
    different phase in the state machine, instead of throwing an exception.

    This also unlocks future features that were not possible today. A
    debugger could have been implemented before (though it would have been
    difficult) but now an asynchronous debugger can be implemented.
    async/await is also possible now. Tail call optimizations can be done,
    execution time quotas, and the profiler can probably be improved.

    * Use our own stack counter to determine when a StackOverflow happens.

    * Add CallbackYield class for functions that execute callbacks.

    Previously, callback invocations required re-entering the eval loop from
    the top, which defeats the iterative loop. In principal,
    the functions that call Callables need to become flow functions to
    behave correctly, but for basic yield-style invocations, this
    infrastructure is too heavy, so CallbackYield is a new class which puts
    the function in terms of an exec-like mechanism, only introducing the
    Yield object, which is just a queue of operations, effectively.

    More functions need to convert to this, but as a first start, array_map
    has been converted. Some of the simpler FlowFunctions might be able to
    be simplified to this as well.

    * Convert various function to CallbackYield functions.

    These are the "easy" functions to convert.

    * Finish converting CallbackYield and FlowFunctions
    (commit: b846e13)
    noreply at
    Unwrap CREs from the reflection exception
    (commit: 1eb61de)
    LadyCailin at