summaryrefslogtreecommitdiff
path: root/Test/V10private.ztst
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2023-02-12 11:23:06 -0800
committerBart Schaefer <schaefer@zsh.org>2023-02-12 11:23:06 -0800
commit143e153259efbb6b6b0d804b753bc2a69e422660 (patch)
tree6d26cf478715e1a6922e13d87bd3799474cc1dd9 /Test/V10private.ztst
parent511e020c68955f737036b7febd360615517a3637 (diff)
downloadzsh-143e153259efbb6b6b0d804b753bc2a69e422660.tar.gz
zsh-143e153259efbb6b6b0d804b753bc2a69e422660.zip
51361: Tests for 51360.
Diffstat (limited to 'Test/V10private.ztst')
-rw-r--r--Test/V10private.ztst78
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