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-10 14:12:29 -0700
commitd649bf78dc3096d6ca0c705257a928b1acce3b82 (patch)
tree948d620a97dd7130e40cb6067d0063ff664499ca
parent2eb9289d1277bf71b1b9dea2addbddd36b61f276 (diff)
downloadzsh-d649bf78dc3096d6ca0c705257a928b1acce3b82.tar.gz
zsh-d649bf78dc3096d6ca0c705257a928b1acce3b82.tar.xz
zsh-d649bf78dc3096d6ca0c705257a928b1acce3b82.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