busybox/shell/ash_test
Denys Vlasenko 216913c290 ash: parser: Add syntax stack for recursive parsing
This closes 10821.

Upstream patch:

    From: Herbert Xu <herbert@gondor.apana.org.au>
    Date: Fri, 9 Mar 2018 00:14:02 +0800
    parser: Add syntax stack for recursive parsing

    Without a stack of syntaxes we cannot correctly these two cases
    together:

            "${a#'$$'}"
            "${a#"${b-'$$'}"}"

    A recursive parser also helps in some other corner cases such
    as nested arithmetic expansion with paratheses.

    This patch adds a syntax stack allocated from the stack using
    alloca.  As a side-effect this allows us to remove the naked
    backslashes for patterns within double-quotes, which means that
    EXP_QPAT also has to go.

    This patch also fixes removes any backslashes that precede right
    braces when they are present within a parameter expansion context,
    and backslashes that precede double quotes within inner double
    quotes inside a parameter expansion in a here-document context.

    The idea of a recursive parser is based on a patch by Harald van
    Dijk.

    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

var_bash3, var_bash4 and var_bash6 tests are updated
with the output given by bash-4.3.43

With this patch, the following tests now pass for ash:

    dollar_repl_slash_bash2.tests
    squote_in_varexp2.tests
    squote_in_varexp.tests
    var_bash4.tests

function                                             old     new   delta
readtoken1                                          2615    2874    +259
synstack_push                                          -      54     +54
evalvar                                              574     571      -3
rmescapes                                            330     310     -20
subevalvar                                          1279    1258     -21
argstr                                              1146    1107     -39
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/4 up/down: 313/-83)           Total: 230 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-04-02 13:15:37 +02:00
..
ash-alias
ash-arith ash: parser: Add syntax stack for recursive parsing 2018-04-02 13:15:37 +02:00
ash-getopts hush: fix "getopts" builtin to not be upset by other builtins calling getopt() 2017-08-29 13:38:30 +02:00
ash-glob ash: fix globbing bugs when using glibc glob() 2016-10-02 15:17:15 +02:00
ash-heredoc parser: Fix backquote support in here-document EOF mark 2018-04-01 16:38:32 +02:00
ash-invert
ash-misc hush: fix raw ^C handlisg in single-quoted strings 2018-01-13 19:14:27 +01:00
ash-parsing ash,hush: handle a few more bkslash-newline cases 2018-04-01 03:04:55 +02:00
ash-psubst ash: add LINENO support 2018-01-27 22:02:05 +01:00
ash-quoting ash: parser: Add syntax stack for recursive parsing 2018-04-02 13:15:37 +02:00
ash-read shell: optional support for read -t N.NNN, closes 10101 2017-07-20 16:09:31 +02:00
ash-redir ash,hush: fix "saved" redirected fds still visible in children 2018-03-28 18:35:07 +02:00
ash-signals ash: copy three tests from hush_test/hush-signals/* 2017-07-24 19:42:46 +02:00
ash-standalone ash: fix nofork bug where environment is not properly passed to a command 2017-11-03 14:16:25 +01:00
ash-vars ash: parser: Add syntax stack for recursive parsing 2018-04-02 13:15:37 +02:00
.gitignore ash_test: ignore generated files 2016-03-22 18:15:24 -04:00
printenv.c do not use `a' quoting style in comments 2017-08-02 14:26:33 +02:00
recho.c whitespace cleanup 2010-10-29 11:46:52 +02:00
run-all ash: add all hush parsing tests to ast tests 2017-07-24 02:49:56 +02:00
zecho.c whitespace cleanup 2010-10-29 11:46:52 +02:00