diff options
| author | Bart Schaefer <schaefer@zsh.org> | 2025-05-09 16:38:28 -0700 |
|---|---|---|
| committer | Bart Schaefer <schaefer@zsh.org> | 2025-05-09 16:38:28 -0700 |
| commit | abd541e18c1a8c311834ed85d9abd5f3fd27495f (patch) | |
| tree | 0c4bce8a4860c827e9197e2ee3fab1f3200c67a6 /Test | |
| parent | 53532: mark --enable-zsh-mem as deprecated. (diff) | |
| download | zsh-abd541e18c1a8c311834ed85d9abd5f3fd27495f.tar zsh-abd541e18c1a8c311834ed85d9abd5f3fd27495f.tar.gz zsh-abd541e18c1a8c311834ed85d9abd5f3fd27495f.tar.bz2 zsh-abd541e18c1a8c311834ed85d9abd5f3fd27495f.tar.lz zsh-abd541e18c1a8c311834ed85d9abd5f3fd27495f.tar.xz zsh-abd541e18c1a8c311834ed85d9abd5f3fd27495f.tar.zst zsh-abd541e18c1a8c311834ed85d9abd5f3fd27495f.zip | |
53568: fix additional problems with reference scoping, update documentation
Scope exits could miss some scope updates in named reference chains.
References declared -u behave like any other reference upon scope exit.
Diffstat (limited to 'Test')
| -rw-r--r-- | Test/K01nameref.ztst | 74 |
1 files changed, 72 insertions, 2 deletions
diff --git a/Test/K01nameref.ztst b/Test/K01nameref.ztst index cc689613b..30b6673e0 100644 --- a/Test/K01nameref.ztst +++ b/Test/K01nameref.ztst @@ -77,6 +77,61 @@ local s=T a=(T); + function f1() { + typeset var=$0; + typeset -n ref1 ref2; typeset -n ref3=ref2; + function f2() { + typeset ref2=XX; + function f3() { + typeset var=$0; + function f4() { + typeset var=$0; + ref1=var; + ref3=var; # Initializes ref2 to var + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + } + f4; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + function g4() { + typeset var=$0; + function g5() { + typeset var=$0; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + } + g5; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + } + g4; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + } + f3; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + } + f2; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + function h2() { + typeset var=$0; + function h3() { + typeset var=$0; + function h4() { + typeset var=$0; + function h5() { + typeset var=$0; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + } + h5; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + } + h4; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + } + h3; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + } + h2; + echo "$0: ref1=$ref1 ref2=$ref2 ref3=$ref3"; + } + %test typeset -n ptr @@ -1039,10 +1094,10 @@ F:previously this could create an infinite recursion and crash >i:3: rs=h - ra=h - rs1=h - ra1=h >k:1: rs=h - ra=h - rs1=h - ra1=h >k:2: rs=h - ra=h - rs1=h - ra1=h ->h:3: rs=g - ra=g - rs1=g - ra1=g +>h:3: rs=h - ra=h - rs1=h - ra1=h >k:1: rs=h - ra=h - rs1=h - ra1=h >k:2: rs=h - ra=h - rs1=h - ra1=h ->g:3: rs=f - ra=f - rs1=f - ra1=f +>g:3: rs=g - ra=g - rs1=g - ra1=g e '' 6 0:assignment at different scope than declaration, '' 6 @@ -1062,6 +1117,21 @@ F:previously this could create an infinite recursion and crash >k:2: rs=h - ra=h - rs1=h - ra1=h >g:3: rs=g - ra=g - rs1=g - ra1=g + f1 +0:Transitive references with scoping changes +>f4: ref1=f4 ref2=XX ref3=f4 +>f3: ref1=f3 ref2=XX ref3=f3 +>g5: ref1=f3 ref2=XX ref3=g4 +>g4: ref1=f3 ref2=XX ref3=g4 +>f3: ref1=f3 ref2=XX ref3=f3 +>f2: ref1=f1 ref2=XX ref3=f1 +>f1: ref1=f1 ref2=f1 ref3=f1 +>h5: ref1=f1 ref2=f1 ref3=f1 +>h4: ref1=f1 ref2=f1 ref3=f1 +>h3: ref1=f1 ref2=f1 ref3=f1 +>h2: ref1=f1 ref2=f1 ref3=f1 +>f1: ref1=f1 ref2=f1 ref3=f1 + # # The following tests are run in interactive mode, using PS1 as an # assignable special with side-effects. This crashed at one time. |
