Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Bug in case stmt with '('



It seems that when a pattern in a case statement is preceded by the optional
'(', the parser is in the wrong state when parsing the statement following
the pattern.  In particular, an assignment such as 'var=value' is not
recognized; instead, zsh complains 'command not found: var=value'.

This problem exists in zsh-3.0-pre1 and -pre3 (I never built -pre2),
and it seems that -pre3 behaves even worse than -pre1:  the following
console listing (lines 63-65) shows that "zsh3p3 case3let.ksh"
induces the message "segmentation fault (core dumped)"!
(As far as I can tell, I built -pre1 and -pre3 the same way.)
Moreover (lines 73-75, with zsh-3.0-pre3 as the interactive shell),
". case3let.ksh" not only results in the message
	"case3let.ksh: command not found: gigo=case '(v)' [2]"
but the interpreter then apparently falls through to the next branch of
the case statement rather than exiting the case statement.  (This falling
through is also done by -pre1 but is not shown in the listing below.)

 1  $(0) 15:38:50 [39] head case*
 2  ==> case2let.ksh <==
 3  case v in
 4  #(v)    gigo="case '(v)'"
 5  #       echo $gigo;;
 6  v)      gigo="case 'v)'"
 7          echo $gigo;;
 8  *)      gigo="case '*)'"
 9          echo $gigo;;
10  esac
11
12  ==> case3let.ksh <==
13  case v in
14  (v)     gigo="case '(v)'"
15          echo $gigo;;
16  v)      gigo="case 'v)'"
17          echo $gigo;;
18  *)      gigo="case '*)'"
19          echo $gigo;;
20  esac
21  $(0) 15:38:55 [40] sh case2let.ksh # try Bourne shell
22  case 'v)'
23  $(0) 15:39:16 [41] r 2l=3l
24  sh case3let.ksh # try Bourne shell
25  case3let.ksh: syntax error at line 2: `(' unexpected
26  zsh: 10255 exit 2     sh case3let.ksh
27  $(2) 15:39:27 [42] ksh case2let.ksh # try Korn shell
28  case 'v)'
29  $(0) 15:39:46 [43] r 2l=3l
30  ksh case3let.ksh # try Korn shell
31  case '(v)'
32  $(0) 15:39:52 [44] zsh25 case2let.ksh # try 2.5.03
33  case 'v)'
34  $(0) 15:41:11 [45] r 2l=3l
35  zsh25 case3let.ksh # try 2.5.03
36  case3let.ksh: parse error near `gigo="case '(v)'"' [2]
37  case3let.ksh: parse error near `;;' [3]
38  case3let.ksh: parse error near `)' [4]
39  case3let.ksh: parse error near `;;' [5]
40  case3let.ksh: parse error near `)' [6]
41  case3let.ksh: parse error near `;;' [7]
42  case3let.ksh: parse error near `esac' [8]
43  $(0) 15:41:16 [46] zsh26 case2let.ksh # try 2.6-beta20
44  case 'v)'
45  $(0) 15:41:56 [47] r 2l=3l
46  zsh26 case3let.ksh # try 2.6-beta20
47  case3let.ksh: parse error near `gigo="case '(v)'"' [2]
48  case3let.ksh: parse error near `;;' [3]
49  case3let.ksh: parse error near `)' [4]
50  case3let.ksh: parse error near `;;' [5]
51  case3let.ksh: parse error near `)' [6]
52  case3let.ksh: parse error near `;;' [7]
53  case3let.ksh: parse error near `esac' [8]
54  $(0) 15:42:06 [48] zsh3p1 case2let.ksh # try zsh-3.0-pre1
55  case 'v)'
56  $(0) 15:42:45 [49] r 2l=3l
57  zsh3p1 case3let.ksh # try zsh-3.0-pre1
58  case3let.ksh: command not found: gigo=case '(v)' [2]
59
60  $(0) 15:42:50 [50] zsh3p3 case2let.ksh # try zsh-3.0-pre3
61  case 'v)'
62  $(0) 15:43:11 [51] r 2l=3l
63  zsh3p3 case3let.ksh # try zsh-3.0-pre3
64  case3let.ksh: command not found: gigo=case '(v)' [2]
65  zsh: 10287 segmentation fault (core dumped)  zsh3p3 case3let.ksh
66  $(139) 15:43:16 [52] ls -sailF core
67  937892978377 8377 -rw-r--r--  1 segal     8577456 Jul 17 15:43 core
68  $(0) 15:43:29 [53] echo $ZSH_VERSION
69  3.0-pre3
70  $(0) 15:43:41 [54] . case2let.ksh
71  case 'v)'
72  $(0) 15:43:50 [55] r 2l=3l
73  . case3let.ksh
74  case3let.ksh: command not found: gigo=case '(v)' [2]
75  case 'v)'
76  $(0) 15:44:01 [56]




Messages sorted by: Reverse Date, Date, Thread, Author