diff options
author | Bart Schaefer <schaefer@zsh.org> | 2023-02-12 11:51:41 -0800 |
---|---|---|
committer | Bart Schaefer <schaefer@zsh.org> | 2023-02-12 11:51:41 -0800 |
commit | 3eed6f70cdfea63cfdc380a4df8382fff38af55d (patch) | |
tree | e044d367f65abaa8e63294c4c3cddbb2456397fe /Src/loop.c | |
parent | e807ac1157015581c1466407cbe722179244be37 (diff) | |
download | zsh-3eed6f70cdfea63cfdc380a4df8382fff38af55d.tar.gz zsh-3eed6f70cdfea63cfdc380a4df8382fff38af55d.zip |
51402: Some ksh/bash features, additional sanity checking
* Add "unset -n"
* Allow and enforce "typeset -n -r" for read-only references
* "can't change type via subscript reference" error
* Better checking for self-referential declarations/assignments
* Ksh-style "foo=bar; typeset -n foo" creates foo=bar reference
* Support "typeset -n ref; for ref in ..."
* Subscripted references use NO_EXEC for safety
* References assigned in called scopes reset scope at end
* Allow named references to $! $? $$ $- $0 $_
Diffstat (limited to 'Src/loop.c')
-rw-r--r-- | Src/loop.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/Src/loop.c b/Src/loop.c index 7df379ecf..0f3847541 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -53,7 +53,7 @@ execfor(Estate state, int do_exec) wordcode code = state->pc[-1]; int iscond = (WC_FOR_TYPE(code) == WC_FOR_COND), ctok = 0, atok = 0; int last = 0; - char *name, *str, *cond = NULL, *advance = NULL; + char *str, *cond = NULL, *advance = NULL; zlong val = 0; LinkList vars = NULL, args = NULL; int old_simple_pline = simple_pline; @@ -151,7 +151,7 @@ execfor(Estate state, int do_exec) int count = 0; for (node = firstnode(vars); node; incnode(node)) { - name = (char *)getdata(node); + char *name = (char *)getdata(node); if (!args || !(str = (char *) ugetnode(args))) { if (count) { @@ -165,7 +165,7 @@ execfor(Estate state, int do_exec) fprintf(xtrerr, "%s=%s\n", name, str); fflush(xtrerr); } - setsparam(name, ztrdup(str)); + setloopvar(name, ztrdup(str)); count++; } if (!count) |