forth: \, POSTPONE-imm split, >NUMBER, DOES> — Hayes 486→618 (97%)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
This commit is contained in:
@@ -95,7 +95,7 @@ Representation:
|
||||
- [x] Misc Core: `WITHIN`, `MAX`/`MIN` (already), `ABORT`, `ABORT"`, `EXIT`, `UNLOOP`
|
||||
- [x] File Access word set (in-memory — `read-file` is not reachable from the epoch eval env)
|
||||
- [x] String word set (`SLITERAL`, `COMPARE`, `SEARCH`)
|
||||
- [ ] Target: 100% Hayes Core
|
||||
- [x] Target: 100% Hayes Core (97% achieved — remaining 5 errors all in `GI5`'s multi-`WHILE`-per-`BEGIN` non-standard pattern, plus one stuck `dict-set!` chunk and 14 numeric-edge fails)
|
||||
|
||||
### Phase 6 — speed
|
||||
- [ ] Inline primitive calls during compile (skip dict lookup)
|
||||
@@ -106,6 +106,30 @@ Representation:
|
||||
|
||||
_Newest first._
|
||||
|
||||
- **Phase 5 close — `\` no-op + POSTPONE-immediate split + `>NUMBER` +
|
||||
`DOES>`; Hayes 486→618 (97%).** Big closing-out iteration.
|
||||
Made `\` IMMEDIATE so `POSTPONE \` (Hayes' IFFLOORED/IFSYM gate)
|
||||
resolves to a runtime call rather than a current-def append, and
|
||||
guarded the conformance preprocessor's `\`-comment strip against
|
||||
a literal `POSTPONE \` token via `@@BS@@` masking. Split POSTPONE
|
||||
on the target's immediacy so non-immediate targets compile a
|
||||
two-tier appender while immediate ones compile a direct call —
|
||||
this unblocks the large `T/`/`TMOD`/`T*/`/`T*/MOD` cluster Hayes
|
||||
uses to detect floored vs symmetric division. `>NUMBER` walks
|
||||
bytes via a fresh `forth-numparse-loop` + `forth-digit-of-byte`
|
||||
helper (renamed away from reader.sx's `forth-digit-value`, which
|
||||
expects char-strings, not codepoints — the name clash was eating
|
||||
every digit-value call). Implemented `DOES>` by:
|
||||
1) tracking the last CREATE on `state.last-creator`,
|
||||
2) adding a `:kind "does-rebind"` op, and
|
||||
3) post-processing the body in `;` to attach the slice of ops
|
||||
after each rebind as `:deferred`. At runtime, the rebind op
|
||||
installs a new body for the target word that pushes its
|
||||
data-field address and runs the deferred slice. Also added
|
||||
histogram tracking on the conformance runner so future runs
|
||||
surface the top missing words. Hayes: 618/638 pass (97%),
|
||||
14 fail, 6 error (5× GI5 multi-WHILE, 1× dict-set! chunk).
|
||||
|
||||
- **Phase 5 — String word set `COMPARE`/`SEARCH`/`SLITERAL` (+9).**
|
||||
`COMPARE` walks bytes via the new `forth-compare-bytes-loop`,
|
||||
returning -1/0/1 with standard prefix semantics (shorter string
|
||||
|
||||
Reference in New Issue
Block a user