summaryrefslogtreecommitdiff
path: root/Test
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2024-03-04 21:07:01 -0800
committerBart Schaefer <schaefer@zsh.org>2024-03-04 21:07:01 -0800
commit610b18875ad9f4498a57e9af6903bcac3b14ff46 (patch)
tree44123f9fbd7650323f320cb81b4ed05448dd36d1 /Test
parent05c7b21e2b30873d002b50b37e2fbd3803d4b608 (diff)
downloadzsh-610b18875ad9f4498a57e9af6903bcac3b14ff46.tar.gz
zsh-610b18875ad9f4498a57e9af6903bcac3b14ff46.zip
52650 plus minor fixes: add -u for named references pointing to "upper" scope
Diffstat (limited to 'Test')
-rw-r--r--Test/K01nameref.ztst53
-rw-r--r--Test/V10private.ztst4
2 files changed, 52 insertions, 5 deletions
diff --git a/Test/K01nameref.ztst b/Test/K01nameref.ztst
index ff48e2289..47d32697c 100644
--- a/Test/K01nameref.ztst
+++ b/Test/K01nameref.ztst
@@ -492,7 +492,6 @@ F:unexpected side-effects of previous tests
}
typeset -p ptr2
1:up-reference part 5, stacked namerefs, end not in scope
-F:What is the correct behavior for the scope of ptr1?
>typeset -n ptr1=ptr2
>typeset -n ptr2
>ptr1=ptr2
@@ -529,6 +528,49 @@ F:Same test, should part 5 output look like this?
>typeset -n ptr2
>typeset ptr2=val
+ () {
+ () {
+ local var
+ typeset -nu ptr1=var
+ ptr1=outer && print -u2 assignment expected to fail
+ typeset -n ptr2=var
+ ptr2=inner
+ typeset -n
+ printf "%s=%s\n" ptr1 "$ptr1" ptr2 "$ptr2"
+ }
+ typeset -p var
+ }
+ typeset -p var
+1:up-reference part 7, upscope namerefs, end not in scope
+>ptr1=var
+>ptr2=var
+>ptr1=
+>ptr2=inner
+*?*typeset*: no such variable: var
+*?*typeset*: no such variable: var
+
+ typeset var
+ () {
+ () {
+ local var
+ typeset -nu ptr1=var
+ ptr1=outer || print -u2 assignment expected to succeed
+ typeset -n ptr2=var
+ ptr2=inner
+ typeset -n
+ printf "%s=%s\n" ptr1 "$ptr1" ptr2 "$ptr2"
+ }
+ typeset -p var
+ }
+ typeset -p var
+0:up-reference part 8, upscope namerefs, end in scope
+>ptr1=var
+>ptr2=var
+>ptr1=outer
+>ptr2=inner
+>typeset -g var=outer
+>typeset var=outer
+
if zmodload zsh/parameter; then
() {
zmodload -u zsh/parameter
@@ -539,7 +581,7 @@ F:Same test, should part 5 output look like this?
}
else ZTST_skip='Cannot zmodload zsh/parameter, skipping autoload test'
fi
-0:up-reference part 3, autoloading with hidden special
+0:up-reference part 9, autoloading with hidden special
>nameref-local-nameref-local
>typeset -h parameters
@@ -762,12 +804,17 @@ F:relies on global TYPESET_TO_UNSET in %prep
bar=xx
typeset -n foo=bar
- () { typeset -n foo; foo=zz; foo=zz; print $bar $zz }
+ () {
+ typeset -n foo; foo=zz
+ foo=zz || print -u2 foo: assignment failed
+ print $bar $zz
+ }
() { typeset -n foo; foo=zz; local zz; foo=zz; print $bar $zz }
0:regression: local nameref may not in-scope a global parameter
F:previously this could create an infinite recursion and crash
>xx
>xx zz
+*?*foo: assignment failed
typeset -nm foo=bar
1:create nameref by pattern match not allowed
diff --git a/Test/V10private.ztst b/Test/V10private.ztst
index efa346002..ed51316f3 100644
--- a/Test/V10private.ztst
+++ b/Test/V10private.ztst
@@ -378,7 +378,7 @@ F:Here ptr1 finds private ptr2 by scope mismatch
typeset -p ptr1 ptr2
typeset val=LOCAL
() {
- ptr1=val # This is a silent no-op, why?
+ ptr1=val || print -u2 ptr1: assignment failed
typeset -n
printf "%s=%s\n" ptr1 "$ptr1" ptr2 "$ptr2"
}
@@ -388,7 +388,6 @@ F:Here ptr1 finds private ptr2 by scope mismatch
1:up-reference for private namerefs, end not in scope
F:See K01nameref.ztst up-reference part 5
F:Here ptr1 finds private ptr2 by scope mismatch
-F:Assignment silently fails, is that correct?
>typeset -n ptr1=ptr2
>typeset -hn ptr2=''
>ptr1=ptr2
@@ -396,6 +395,7 @@ F:Assignment silently fails, is that correct?
>ptr2=
>typeset -n ptr1=ptr2
>typeset -hn ptr2=''
+*?*ptr1: assignment failed
*?*no such variable: ptr2
typeset ptr2