summaryrefslogtreecommitdiff
path: root/Src/params.c
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2023-03-06 19:54:48 -0800
committerBart Schaefer <schaefer@zsh.org>2023-03-06 19:54:48 -0800
commit0562be0af8127bb728774de47e4e8851461bd8e2 (patch)
tree1c7eb42461dfb8c6ed2cdd2a908760e41da23bfc /Src/params.c
parentac1bf482ba43d4bf68708625e56a42860541d851 (diff)
downloadzsh-0562be0af8127bb728774de47e4e8851461bd8e2.tar.gz
zsh-0562be0af8127bb728774de47e4e8851461bd8e2.zip
51509 (+ fix typo): Add ${(!)name} for the referred-to name of a named reference
Extend ${!name} in ksh emulation for same
Diffstat (limited to 'Src/params.c')
-rw-r--r--Src/params.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/Src/params.c b/Src/params.c
index c9f4b3017..85eaee609 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -2144,7 +2144,10 @@ fetchvalue(Value v, char **pptr, int bracks, int flags)
int isvarat;
isvarat = (t[0] == '@' && !t[1]);
- pm = (Param) paramtab->getnode(paramtab, *t == '0' ? "0" : t);
+ if (flags & SCANPM_NONAMEREF)
+ pm = (Param) paramtab->getnode2(paramtab, *t == '0' ? "0" : t);
+ else
+ pm = (Param) paramtab->getnode(paramtab, *t == '0' ? "0" : t);
if (sav)
*s = sav;
*pptr = s;
@@ -2155,7 +2158,7 @@ fetchvalue(Value v, char **pptr, int bracks, int flags)
memset(v, 0, sizeof(*v));
else
v = (Value) hcalloc(sizeof *v);
- if (pm->node.flags & PM_NAMEREF) {
+ if ((pm->node.flags & PM_NAMEREF) && !(flags & SCANPM_NONAMEREF)) {
char *refname = GETREFNAME(pm);
if (refname && *refname) {
/* only happens for namerefs pointing to array elements */