https://gitlab.synchro.net/main/sbbs/-/commit/378af3b080bb6209bc6a3649
Modified Files:
src/syncterm/scripts/syncterm.wren src/syncterm/wren_bind.c wren_host.c wren_host_internal.h
Log Message:
SyncTERM: lazy-cache foreign class handles, move Cache into Wren
Cleanup after rev to per-module entry scripts:
* The four foreign-class handles (Cell, Cells, KeyEvent, MouseEvent)
were captured eagerly in wren_host_init, which forced an
`import "syncterm"` bootstrap to run first so the wrenGetVariable
lookups had a loaded module to read from. None of that was
necessary Ä the handles are pure caches around symbol-table
lookups, and by the time any allocation site runs, the calling
script has already imported syncterm. New load_class_into_slot
helper does the fetch-and-cache lazily; six allocation sites
(push/resume key & mouse, fn_Screen_readRect, cells_make_view)
call it at the slot they were already filling. The `if (... ||
st->X_class == NULL)` bailouts on those sites were guarding a
case the lazy fill makes impossible.
* `Cache` (the singleton Directory pointing at the script-cache
directory) was injected into the syncterm module from C via
wren_bind_define_cache, reaching into vm->modules and calling
wrenDefineVariable. Replaced with a Wren-side `var Cache = ...`
in syncterm.wren backed by a new foreign static
Host.cacheDirectory. Cache is now an ordinary module variable
instead of a C-injected ghost. A user override of syncterm.wren
has to include the same boilerplate (one line) to keep Cache
available Ä that's the trade-off, and matches the rest of the
module's "the override is responsible for the contract" model.
* The entry-script iteration's special-case skip for "syncterm"
is gone; both loops now use wrenHasModule to skip any module
another entry script's import already loaded. Same effect for
syncterm, plus handles any future library-also-embedded module
generically.
wren_host_init shrinks to: make VM wire callbacks cache
call/call(_) handles set ownership glob run embeds run
user scripts. No bootstrap, no eager class capture, no Cache
injection, no name-specific skip.
Co-Authored-By: Claude Opus 4.7 (1M context) <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net