fix(web): surface Forth messages from host-word throws

A host word signals failure by throwing across the JS boundary, and the
browser runtime reported that exception with its Debug form, so an
empty-stack RESIZE surfaced as

    call_func(134) failed: JsValue(Error: Stack underflow ...)

with the engine's JS stack trace glued on. The thrown message IS the
Forth message, so take it verbatim: 'Stack underflow', the same text the
native CLI prints. Exceptions without a message keep the call context --
those are genuine runtime faults, not Forth throws.

CATCH is unaffected: it reads the throw code from its own channel rather
than parsing messages. Verified against a fresh VM in Node (initSync +
WaferRepl): host-word underflow, compiled-guard underflow, THROW,
unknown word and ' RESIZE CATCH . all match the native CLI.

Ships as v0.2.4.
This commit is contained in:
Oleksandr Kozachuk
2026-08-06 20:45:27 +02:00
parent d55a27873e
commit 4769987b20
6 changed files with 41 additions and 8 deletions
Generated
+3 -3
View File
@@ -1589,7 +1589,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "wafer"
version = "0.2.3"
version = "0.2.4"
dependencies = [
"anyhow",
"clap",
@@ -1600,7 +1600,7 @@ dependencies = [
[[package]]
name = "wafer-core"
version = "0.2.3"
version = "0.2.4"
dependencies = [
"anyhow",
"insta",
@@ -1615,7 +1615,7 @@ dependencies = [
[[package]]
name = "wafer-web"
version = "0.2.3"
version = "0.2.4"
dependencies = [
"anyhow",
"js-sys",