Tracking the 21 fixes applied to reach 349/349 on the BusyBox ash test suite.
349/349 (100%). Started at 328/349 (21 failures).
| Category | Pass | Total |
|---|---|---|
| ash-alias | 5 | 5 |
| ash-arith | 6 | 6 |
| ash-comm | 3 | 3 |
| ash-getopts | 8 | 8 |
| ash-glob | 10 | 10 |
| ash-heredoc | 25 | 25 |
| ash-invert | 3 | 3 |
| ash-misc | 99 | 99 |
| ash-parsing | 35 | 35 |
| ash-quoting | 24 | 24 |
| ash-read | 10 | 10 |
| ash-redir | 27 | 27 |
| ash-signals | 22 | 22 |
| ash-standalone | 6 | 6 |
| ash-vars | 69 | 69 |
| ash-z_slow | 3 | 3 |
| Total | 349 | 349 |
- Backslash-newline continuation — joins at line-read level;
lineContMarkerfor offsets. ifacross\<newline>—peekNextNonMarkerfor operator lookahead.$empty""and$empty''empty word —containsUnescapedQuotecheck."$@"with no args → zero words — special case in word expansion and for-loop.if()reserved-word syntax error — detect reserved words as function names.- Case pattern
()quoting —findCasePatternClosetracks single/double quotes. - Alias in case body — disable alias expansion when collecting case compound.
- Prefix
IFS=for all builtins —IFS="," read ...now works. ${x#'*'}pattern quoting in heredoc — removed prematurestripOuterQuotes.- Single-quote pattern in
${x#'\\\\'}— pattern quoting fix. - Backtick inside single quotes — track backtick regions when scanning.
- Command-sub newline stripping —
TrimRightinstead ofTrimSuffixfor trailing\n. unset -ffflag — accept repeated-f/-vflags.\<newline>at EOF — only strip if original script had trailing newline.
exec 1>&-persistence — updatesavedStdiobefore defer return.1>&-/2>&-parsing — handle fd close before checking next token.exec <file+read+cat— persistbufio.Readerwrapping insavedStdio.In.
- Trap exit codes —
killin background runs viastartSubshellBackgroundwithforwardSignal. - Nested signal traps — inherited signal propagation from subshell to parent.
returnin trap handler —kill -s USR1 $$inside subshell propagates viaforwardSignal.- Subshell signal reset — real OS signals terminate subshell (not propagated).
- Pipeline fast path —
echo/printf | (subshell)avoids goroutine+runner copy overhead. readReadyfor in-memory readers — detectLen()onbytes.Readeretc.