mem_call: object_get_dynamic args: 0,39,40,62,92,126,127,160,203,207,208,248,279,326,330,332,15 base: 65632
result: 332 bits: 4074c00000000000
mem_call: object_get_dynamic args: 0,39,40,62,92,126,127,160,203,207,208,248,279,326,330,332,15 base: 65632
result: 332 bits: 4074c00000000000
...
(repeating indefinitely; tab survives but never finishes, no error, no event loop progress.)
git clone https://github.com/HoneIDE/editor && cd editor
# Apply rt.date_get_day shim + __classDispatch arg-padding workaround
# (already wired in examples/web/build.ts on the web-architecture branch).
bun run examples/web/build.ts
python3 -m http.server -d examples/web/dist 8765 &
open http://localhost:8765/index.html
# DevTools console will show the repeating object_get_dynamic mem_calls.
If a focused repro would help, I'll reduce the keyword tokenizer to a standalone test case and attach.
Summary
After working around #1034 (rt.date_get_day) and #1035 (__classDispatch arg padding), the editor's TS-side keyword tokenizer enters its outer per-line loop and hangs. DevTools console shows the runtime's
mem_call: object_get_dynamiclog line firing on the same array + same index over and over with no termination:(repeating indefinitely; tab survives but never finishes, no error, no event loop progress.)
Environment
--target web)@honeide/editor'sperry/editor-component.ts. Hang occurs afterCompositeEngine.parse(buffer)returns and the keyword scanner begins working on the document. Other targets (macOS, iOS) tokenize the same buffer without issue.What we know
The 17 args to
object_get_dynamiclook like a fixed array[0, 39, 40, 62, 92, 126, 127, 160, 203, 207, 208, 248, 279, 326, 330, 332]and an index15. Result332matchesarr[15].These numbers line up with byte offsets of
|separators in the_KWS_TSkeyword string inview-model/editor-view-model.ts, suggesting it's_KWS_TS.indexOf(...)or a related lookup inside a loop that never advances.The loop body in
core/tokenizer/keyword-syntax-engine.ts:524:…is plain TS that works on every other target. If the
kicounter isn't being incremented in the WASM codegen, orkws.lengthis being re-read as a constant that prevents loop exit, that would explain the observation.What I haven't done
arr[idx]lookups in a class method on--target web" but I haven't proven it standalone. Happy to do this if useful; flagging early in case you recognize the pattern immediately.RUST_LOG=traceagainstperry-codegen-wasmto see what loop ops it emits.Repro pointer
If a focused repro would help, I'll reduce the keyword tokenizer to a standalone test case and attach.
Possibly related