fix(core): silent ABORT, and name the compile-only condition
Two reporting bugs found from the browser shell. An uncaught ABORT printed 'ABORT (throw -1)'. The standard defines ABORT as 'empty the data stack and perform the function of QUIT', and QUIT displays no message; gforth and SwiftForth are both silent. It now takes the same silent path QUIT got in 0.2.5. CATCH still reports -1 and still restores the stack depth, and ABORT" still prints its text -- different word, different code (-2). Compile-only constructs used in interpretation state claimed to be an 'unknown word', which is misleading for a word the system obviously knows: ABORT", IF, THEN, LOOP, LITERAL, RECURSE and friends. They now report 'interpreting a compile-only word: <name> (throw -14)', the standard condition both reference engines give. The check reuses the existing INTERPRETER_TOKENS table at the point where interpretation has already failed, so a genuine typo still reports 'unknown word'. Ships as v0.2.6.
This commit is contained in:
@@ -5,6 +5,24 @@ All notable changes to WAFER are documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [0.2.6] - 2026-08-07
|
||||
|
||||
### Fixed
|
||||
|
||||
- **An uncaught `ABORT` no longer prints anything.** It used to report
|
||||
`ABORT (throw -1)`, but the standard defines `ABORT` as "empty the data
|
||||
stack and perform the function of `QUIT`", and `QUIT` displays no
|
||||
message. gforth and SwiftForth are both silent here. `CATCH` still
|
||||
reports -1 as before, and `ABORT"` still prints its text — that is a
|
||||
different word with a different code (-2).
|
||||
- **Compile-only words used in interpretation state name the condition.**
|
||||
`ABORT"`, `IF`, `THEN`, `LOOP`, `LITERAL`, `RECURSE` and the rest of
|
||||
the compile-time constructs claimed to be an `unknown word`, which is
|
||||
actively misleading for a word the system obviously knows. They now
|
||||
report `interpreting a compile-only word: <name> (throw -14)`, the
|
||||
standard condition both reference engines give. A genuine typo still
|
||||
reports `unknown word`.
|
||||
|
||||
## [0.2.5] - 2026-08-06
|
||||
|
||||
### Added
|
||||
|
||||
Reference in New Issue
Block a user