microlisp 0.1.4
Fourth post-release iteration. Five findings from a fresh cold
reviewer, all landed.
See CHANGELOG.md for the full inventory.
Added
MICROLISP_ERR_EQUAL_DEPTH+microlisp_options::max_equal_depth
(default 1024).equal?andeqv?walked pair-car chains
recursively without a bound; two 500k-deep nested structures
used to SEGFAULT. Same depth-guard pattern as the printer in
v0.1.3.
Fixed
equal?/eqv?no longer crash on deeply-nested
structures. ASan-confirmed clean.microlisp_replnow honors itsout_filecontract.
display,write,newlineroute through astate->output
field that the REPL swaps toout_filefor its duration,
instead of writing directly to stdout.- Allocator alignment contract documented and enforced.
microlisp_state_createchecks the first allocation rather
than letting a misaligned arena silently corrupt tagged
values on the next GC. microlispno longer prints the prompt on piped stdin.
The comment said this was intended; the code shipped without
theisattycheck until now.scripts/coverage.showns reset/test/capture/enforce.
Stale.gcdafiles used to merge with new counters, libgcov
spammed stderr, and a CLI regex test broke. The script now
deletes.gcdabefore running ctest.
Source tarball
A deterministic tarball is attached: `microlisp-0.1.4.tar.gz`
plus SHA-256 checksum.
```sh
sha256sum -c microlisp-0.1.4.tar.gz.sha256
tar xzf microlisp-0.1.4.tar.gz
cd microlisp-0.1.4
cmake --preset release
cmake --build --preset release
ctest --test-dir build/release --output-on-failure
```