Skip to content

microlisp 0.1.4

Choose a tag to compare

@jkindrix jkindrix released this 17 May 02:52
· 1 commit to main since this release

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? and eqv? 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_repl now honors its out_file contract.
    display, write, newline route through a state->output
    field that the REPL swaps to out_file for its duration,
    instead of writing directly to stdout.
  • Allocator alignment contract documented and enforced.
    microlisp_state_create checks the first allocation rather
    than letting a misaligned arena silently corrupt tagged
    values on the next GC.
  • microlisp no longer prints the prompt on piped stdin.
    The comment said this was intended; the code shipped without
    the isatty check until now.
  • scripts/coverage.sh owns reset/test/capture/enforce.
    Stale .gcda files used to merge with new counters, libgcov
    spammed stderr, and a CLI regex test broke. The script now
    deletes .gcda before 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
```