about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@ipost.com>2020-12-27 14:36:35 -0800
committerBart Schaefer <schaefer@ipost.com>2021-04-13 21:18:35 -0700
commitf621fb7ab8ba9a7d4992a45b4b1033e7ef897154 (patch)
tree5cae7720ba5e9d659776a3bc03da8f4f4db052d2
parentdcd4439a9f3a2212d753ece6ef644aed2ec4d333 (diff)
downloadzsh-f621fb7ab8ba9a7d4992a45b4b1033e7ef897154.tar.gz
zsh-f621fb7ab8ba9a7d4992a45b4b1033e7ef897154.tar.xz
zsh-f621fb7ab8ba9a7d4992a45b4b1033e7ef897154.zip
Fix ${(t)var} output, add comparative test cases
-rw-r--r--Src/subst.c3
-rw-r--r--Test/E01options.ztst15
-rw-r--r--Test/E03posix.ztst14
3 files changed, 31 insertions, 1 deletions
diff --git a/Src/subst.c b/Src/subst.c
index 96e0914eb..9928be0e9 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -2563,7 +2563,8 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
 	     * Handle the (t) flag: value now becomes the type
 	     * information for the parameter.
 	     */
-	    if (v && v->pm && !(v->pm->node.flags & PM_UNSET)) {
+	    if (v && v->pm && ((v->pm->node.flags & PM_DECLARED) ||
+			       !(v->pm->node.flags & PM_UNSET))) {
 		int f = v->pm->node.flags;
 
 		switch (PM_TYPE(f)) {
diff --git a/Test/E01options.ztst b/Test/E01options.ztst
index 415f46cd7..72749e6ab 100644
--- a/Test/E01options.ztst
+++ b/Test/E01options.ztst
@@ -1451,3 +1451,18 @@ F:If this test fails at the first unsetopt, refer to P01privileged.ztst.
 0q:RM_STAR_SILENT
 *>zsh: sure you want to delete all 15 files in ${PWD:h}/options.tmp \[yn\]\? ${BEL}(|n)
 *>zsh: sure you want to delete (all <->|more than <->) files in / \[yn\]\? ${BEL}(|n)
+
+  () {
+    local var
+    print ${(t)var}
+  }
+0:(t) returns correct type
+>scalar-local
+
+  () {
+    readonly var
+    typeset -p var
+  }
+0:readonly with typeset -p
+F:compare E03posix.ztst
+>typeset -r var=''
diff --git a/Test/E03posix.ztst b/Test/E03posix.ztst
index 5e6eddeba..c59ca4f6e 100644
--- a/Test/E03posix.ztst
+++ b/Test/E03posix.ztst
@@ -103,3 +103,17 @@
 >arg1 arg2
 >noktarg1
 >0 0
+
+  () {
+    local var
+    print ${(t)var}
+  }
+0:(t) returns correct type
+>scalar-local
+
+  () {
+    readonly var
+    typeset -p var
+  }
+0:readonly with typeset -p
+>typeset -g -r var