Sigil 0.22.13
A bug-fix release. The headline: since 0.22.10, a non-ASCII character in any manifest string (an em-dash in a description:, say) broke sigil deps for every project that read it. That's fixed, along with a build hang, a few native string miscompiles and --dry-run.
Existing projects build without changes. Crash The Stack, Harkfell and Phantom Burn build and pass their own checks on this release.
write and read agree on non-ASCII text
write escaped each byte of a non-ASCII character with no closing ;, so read couldn't read its own output back. That's what broke manifests. write now prints printable non-ASCII text as itself ((write "café — λ") prints "café — λ"), escapes control characters as valid \x<hex>; escapes, and everything it prints reads back unchanged.
A lock file written by 0.22.13 with non-ASCII text in it won't pass 0.22.12's identity check, so upgrade every machine that shares one.
Fixes
sigil buildcould hang forever when a compiler or linker wrote a lot of warnings to stderr. Builds now read both output streams together.- Native and WebAssembly builds could compile some string constants wrong:
"a\x0;12"came out as"a\n", and"\x1B;7"didn't compile. String constants now match the bytecode VM byte for byte. sigil build --dry-runactually built everything. It now only reports what each step would do.- The store couldn't detect a changed item on macOS and BSD (it relied on GNU
find), so a modified item could be served as verified. --no-bundlenative builds left out native package initializers, so for examplesha256from(sigil crypto)was unbound.- A
--no-bundleweb build of an app with a native dependency that has no WebAssembly code (sigil-audio, for one) failed with "Failed to link dev runtime". Web builds now link only what was built for them. - Managed Zig picked up C++ include paths when compiling C, which broke builds inside Guix and Nix shells.
- Web builds could write invalid JSON or HTML for names containing control characters or quotes.
donow accepts a variable with no step expression, as R7RS allows.- The bootstrap CLI's
sigil --versionprinted garbage.
Known issues
syntax-rulesdoesn't match nested ellipses yet: a pattern such as(_ (name value ...) ...)never matches.