diff options
author | Bart Schaefer <schaefer@zsh.org> | 2023-02-12 11:23:06 -0800 |
---|---|---|
committer | Bart Schaefer <schaefer@zsh.org> | 2023-02-12 11:23:06 -0800 |
commit | 143e153259efbb6b6b0d804b753bc2a69e422660 (patch) | |
tree | 6d26cf478715e1a6922e13d87bd3799474cc1dd9 /Test/V10private.ztst | |
parent | 511e020c68955f737036b7febd360615517a3637 (diff) | |
download | zsh-143e153259efbb6b6b0d804b753bc2a69e422660.tar.gz zsh-143e153259efbb6b6b0d804b753bc2a69e422660.zip |
51361: Tests for 51360.
Diffstat (limited to 'Test/V10private.ztst')
-rw-r--r-- | Test/V10private.ztst | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/Test/V10private.ztst b/Test/V10private.ztst index 56ffbc5b4..b191afcb7 100644 --- a/Test/V10private.ztst +++ b/Test/V10private.ztst @@ -299,6 +299,84 @@ F:future revision will create a global with this assignment *>* *>* + typeset top=TOP + () { + local -P -n test=top + print $top + () { print UP: $test } + } +0:nameref can be declared private +>TOP +>UP: + + () { + typeset -n ptr1=ptr2 + private -n ptr2 + typeset -p ptr1 ptr2 + typeset val=LOCAL + () { + ptr1=val + typeset -n + printf "%s=%s\n" ptr1 "$ptr1" ptr2 "$ptr2" + } + typeset -p ptr1 ptr2 + } + typeset -p ptr2 +1:up-reference for private namerefs, end not in scope +F:See K01typeset.ztst up-reference part 5 +F:Here ptr1 finds private ptr2 by scope mismatch, assignment silently fails +>typeset -n ptr1=ptr2 +>ptr1=ptr2 +>ptr1= +>ptr2= +>typeset -n ptr1=ptr2 +*?*no such variable: ptr2 + + typeset ptr2 + () { + typeset -n ptr1=ptr2 + private -n ptr2 + typeset -p ptr1 ptr2 + typeset val=LOCAL + () { + ptr1=val; + typeset -n + printf "%s=%s\n" ptr1 "$ptr1" ptr2 "$ptr2" + } + typeset -p ptr1 ptr2 + } + typeset -p ptr2 +0:up-reference for private namerefs, end is in scope +F:See K01typeset.ztst up-reference part 5 +F:Here ptr1 points to global ptr2 so assignment succeeds +>typeset -n ptr1=ptr2 +>ptr1=ptr2 +>ptr2=val +>ptr1=val +>ptr2=val +>typeset -n ptr1=ptr2 +>typeset ptr2=val + + () { + setopt localoptions errreturn + private -n ptr2 + typeset -n ptr1=ptr2 + typeset -p ptr1 ptr2 + typeset val=LOCAL + () { + ptr1=val + typeset -n + printf "v %s=%s\n" ptr1 "$ptr1" ptr2 "$ptr2" + } + typeset -p ptr1 ptr2 + } + typeset -p ptr1 ptr2 +1:up-reference for private namerefs, end is in scope but private +F:Should we allow "public" namerefs to private parameters? +*?*ptr2: invalid reference +*?*no such variable: ptr1 +*?*no such variable: ptr2 + %clean rm -r private.TMP |