Features
- Optional chaining (
?.) is now supported in the core engine - Nullish coalescing assignment (
??=) operator added - Logical assignment operators (
||=and&&=) added
Improvements
- SyntaxError reporting now aligns with other JS engines — file name is no longer embedded in the error message, but exposed via the
stackproperty instead - Error.stack traces are now attached in error constructors, with ~100× performance improvement
Bug Fixes
nginx modules
- Fixed
expirefield truncation in shared dict state files — millisecond timestamps were silently truncated to 10 digits, causing restored entries to appear expired on restart. Appeared ineca03622(0.9.1) - Suppressed spurious
slab log_nomemmessages for evict-enabled shared dict zones, where allocation failures are expected behavior - Fixed stack trace reporting for
ngx.fetch()exceptions in the QuickJS engine
Core
- Fixed string offset map corruption in scope values hash — caused SEGV/SIGBUS crashes for multi-byte UTF-8 string constants >32 characters when accessing a character at index ≥ 32 (e.g. via
.replace()or bracket notation). Regression sincee7caa46d(0.9.5) - Fixed heap-buffer-overflow in atom hash triggered by
Symbol() - Fixed
WebCrypto importKey()crash with mismatched JWK key type - Fixed interactive mode detection for piped stdin. Regression since
4988565c(0.8.0) - Fixed build on macOS
- Fixed
PTRmacro compatibility with newer BFD library auto/cc: replacedwhichwith portablecommand -v(thanks to Zurab Kvachadze)
New Contributors
- @OwenSanzas made their first contribution in #1013
- @BalkanMadman made their first contribution in #1016
Full Changelog: 0.9.5...0.9.6