• exec/tests/msgbase/get_all_msg_headers.js src/sbbs3/js_msgbase.cpp sbb

    From Rob Swindell (on Windows 11)@1:103/705 to Git commit to main/sbbs/master on Saturday, May 23, 2026 22:50:08
    https://gitlab.synchro.net/main/sbbs/-/commit/edf75242977c665f506b8457
    Modified Files:
    exec/tests/msgbase/get_all_msg_headers.js src/sbbs3/js_msgbase.cpp sbbsdefs.h
    Log Message:
    sbbsdefs: disable JSOPTION_JIT (TraceMonkey) by default -- fixes #1143

    JAVASCRIPT_OPTIONS dropped from 0x810 to 0x10 (kept JSOPTION_COMPILE_N_GO, dropped JSOPTION_JIT / bit 0x800 / TraceMonkey). TraceMonkey is the true
    root cause of MsgBase.get_all_msg_headers() returning `undefined` on cold
    first access of LAZY_STRING_TRUNCSP_NULL fields (to_ext, from_ext, replyto, to_list, cc_list, summary, tags, from_org, ...) on bulk-fetched headers:
    the trace recorder's shape-guarded GETPROP over a hot for..in dot-access
    loop mis-replays `undefined` across the shared header shape, since the
    *_NULL fields are conditionally-resolved own properties (present on some headers, absent on others).

    Confirmed via A/B on the same build by flipping only this bit
    (js.options 0x810 -> 0x10) on a live ~7.7k-msg mail base: cold
    hdr.to_ext undefined collapses from thousands of spurious mispredicts
    to exactly the genuinely-NULL count (216 of 7698 headers, matching the
    primed count). Reproduced on Linux/gcc and Windows/MSVC (both compile
    JS_TRACER into libmozjs); does not reproduce on FreeBSD/Clang (which
    builds with --disable-tracejit per 3rdp/build/GNUmakefile:38-43).

    JSOPTION_METHODJIT (bit 0x4000) was already off and remains off. Its
    PolyIC has a similarly shape-guarded structure and would warrant a
    re-run of the issue's probe_to_ext.js / probe_enum.js before being
    enabled. Prior art: a0607c011 dropped METHODJIT for analogous reasons (xtrn_sec.js misbehavior).

    Reverts two prior workarounds, which both named the wrong cache
    (interpreter PropertyCache rather than the trace JIT):
    ca448cb8b - eager JS_DefineProperty("number") (ineffective on real bases)
    666ff71ce - eager full js_get_msg_header_resolve(JSID_VOID) + defer_listing
    (effective but at the cost of laziness, on the wrong diagnosis)

    Tests: rewrites exec/tests/msgbase/get_all_msg_headers.js to (1) hard-
    assert JSOPTION_JIT is off in js.options, failing fast with a clear
    message if re-enabled, and (2) keep the behavioral bulk-fetch contract
    guard. Drops the now-stale single-message scenario.

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)