From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from euclid.skiles.gatech.edu (list@euclid.skiles.gatech.edu [130.207.146.50]) by coral.primenet.com.au (8.7.5/8.7.3) with ESMTP id HAA02989 for ; Fri, 23 Aug 1996 07:12:47 +1000 (EST) Received: (from list@localhost) by euclid.skiles.gatech.edu (8.7.3/8.7.3) id RAA00575; Thu, 22 Aug 1996 17:11:08 -0400 (EDT) Resent-Date: Thu, 22 Aug 1996 17:11:08 -0400 (EDT) From: Zoltan Hidvegi Message-Id: <199608222110.XAA16315@bolyai.cs.elte.hu> Subject: Re: bug in 3.0.0? To: schaefer@nbn.com Date: Thu, 22 Aug 1996 23:10:11 +0200 (MET DST) Cc: mliggett@pobox.com, zsh-workers@math.gatech.edu In-Reply-To: <960821121437.ZM11481@candle.brasslantern.com> from Bart Schaefer at "Aug 21, 96 12:14:37 pm" Organization: Dept. of Comp. Sci., Eotvos University, Budapest, Hungary Phone: (36 1)2669833 ext: 2667, home phone: (36 1) 2752368 X-Mailer: ELM [version 2.4ME+ PL16 (25)] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Resent-Message-ID: <"fgZ-c1.0.v8.hpC7o"@euclid> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/2051 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu > The problem is with "else { ... }". 3.0 wants a "fi" at the end of the > if/elif/else chain, even when using the { ... } form -- but only when > it ends with "else { ... }". > > This seems to fix it. That breaks if ... ; then ... ; else { ... } ; ... fi The patch below is a slighly modified version of Bart's patch. Zoltan *** Src/parse.c 1996/08/14 16:48:19 2.25 --- Src/parse.c 1996/08/22 21:07:43 *************** *** 605,611 **** unsigned char nc; LinkList ifsl, thensl; LinkNode no; ! int ni = 0, nt = 0; List l, *ll; ifsl = newlinklist(); --- 605,611 ---- unsigned char nc; LinkList ifsl, thensl; LinkNode no; ! int ni = 0, nt = 0, usebrace = 0; List l, *ll; ifsl = newlinklist(); *************** *** 634,639 **** --- 634,640 ---- xtok = FI; nc = cmdstack[cmdsp - 1] == CS_IF ? CS_IFTHEN : CS_ELIFTHEN; if (tok == THEN) { + usebrace = 0; cmdpop(); cmdpush(nc); yylex(); *************** *** 643,648 **** --- 644,650 ---- cmdpop(); } else { if (tok == INBRACE) { + usebrace = 1; cmdpop(); cmdpush(nc); yylex(); *************** *** 676,685 **** cmdpush(CS_ELSE); while (tok == SEPER) yylex(); ! l = par_list(); ! if (tok != FI) { ! cmdpop(); ! YYERRORV; } addlinknode(thensl, l); nt++; --- 678,696 ---- cmdpush(CS_ELSE); while (tok == SEPER) yylex(); ! if (tok == INBRACE && usebrace) { ! yylex(); ! l = par_list(); ! if (tok != OUTBRACE) { ! cmdpop(); ! YYERRORV; ! } ! } else { ! l = par_list(); ! if (tok != FI) { ! cmdpop(); ! YYERRORV; ! } } addlinknode(thensl, l); nt++;