busybox/shell/hush_test
Denys Vlasenko 9abf53beb4 ash: eval: Variable assignments on functions are no longer persistent
Upstream commit:

    Date: Wed, 4 Apr 2018 17:54:01 +0800
    eval: Variable assignments on functions are no longer persistent

    Dirk Fieldhouse <fieldhouse@gmx.net> wrote:
    > In POSIX.1-2017 ("simultaneously IEEE Std 1003.1™-2017 and The Open
    > Group Technical Standard Base Specifications, Issue 7")
    > <http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09>,
    > we read under '2.9.1 Simple Commands'
    >
    > "Variable assignments shall be performed as follows:
    > ...
    > -    If the command name is a standard utility implemented as a function
    > (see XBD Utility), the effect of variable assignments shall be as if the
    > utility was not implemented as a function.
    > ...
    > -    If the command name is a function that is not a standard utility
    > implemented as a function, variable assignments shall affect the current
    > execution environment during the execution of the function. It is
    > unspecified:
    >
    >     *   Whether or not the variable assignments persist after the
    > completion of the function
    >
    >     *   Whether or not the variables gain the export attribute during
    > the execution of the function
    >
    >     *   Whether or not export attributes gained as a result of the
    > variable assignments persist after the completion of the function (if
    > variable assignments persist after the completion of the function)"

    POSIX used to require the current dash behaviour.  However, you're
    right that this is no longer the case.

    This patch will remove the persistence of the variable assignment.

    I have considered the exporting the variables during the function
    execution but have decided against it because:

    1) It makes the code bigger.
    2) dash has never done this in the past.
    3) You cannot use this portably anyway.

    Reported-by: Dirk Fieldhouse <fieldhouse@gmx.net>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

function                                             old     new   delta
evalcommand                                         1606    1635     +29
evalcase                                             313     317      +4
evalfun                                              280     268     -12
pushlocalvars                                         48       -     -48
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 2/1 up/down: 33/-60)            Total: -27 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-08-05 11:14:11 +02:00
..
hush-arith ash: parser: Add syntax stack for recursive parsing 2018-04-02 13:15:37 +02:00
hush-bugs hush: fix and_or_and_backgrounding.tests failure 2017-07-15 22:51:55 +02:00
hush-getopts hush: fix "getopts" builtin to not be upset by other builtins calling getopt() 2017-08-29 13:38:30 +02:00
hush-glob hush: never glob result of dquoted "${v:+/bin/c*}" 2018-07-20 19:29:41 +02:00
hush-heredoc hush: add "heredoc.tests" from ash, tweak ash "is a function" message 2018-07-24 17:10:18 +02:00
hush-invert hush testsuite: add many tests from ash testsuite 2016-10-02 17:39:31 +02:00
hush-leak hush: do not use ps -o in leak_argv1; do not hardcode path in negate 2009-08-12 14:21:30 +02:00
hush-misc ash: eval: Variable assignments on functions are no longer persistent 2018-08-05 11:14:11 +02:00
hush-parsing hush: fix recent breakage from parse_stream() changes 2018-04-11 20:00:43 +02:00
hush-psubst hush: fix a few more corner cases with empty-expanding cmds 2018-04-05 15:15:53 +02:00
hush-quoting hush: fix handling of '' in ${var:+ARG} 2018-07-20 17:36:06 +02:00
hush-read hush: fix IFS handling in read 2018-04-11 17:18:34 +02:00
hush-redir hush: fix nested redirects colliding with script fds 2018-07-24 16:54:41 +02:00
hush-signals hush: add support for "set -e" 2017-07-14 13:36:48 +02:00
hush-standalone ash: fix nofork bug where environment is not properly passed to a command 2017-11-03 14:16:25 +01:00
hush-vars ash,hush: properly handle ${v//pattern/repl} if pattern starts with / 2018-08-04 22:25:28 +02:00
hush-z_slow hush: improve ${var#...}, ${var:+...} and ${var/.../...} - handle quoting 2018-07-17 14:21:38 +02:00
.gitignore hush_test: ignore generated files 2009-05-21 17:45:26 -04:00
run-all nofork: fix a bug uncovered by hush testsuite (forgotten fflush) 2017-08-03 19:52:47 +02:00