From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: zsh-workers-return-43597-ml=inbox.vuxu.org@zsh.org X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 6d45a407 for ; Thu, 4 Oct 2018 16:32:40 +0000 (UTC) Received: (qmail 537 invoked by alias); 4 Oct 2018 16:32:07 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 43597 Received: (qmail 27493 invoked by uid 1010); 4 Oct 2018 16:32:07 -0000 X-Qmail-Scanner-Diagnostics: from mailout1.w1.samsung.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(210.118.77.11):SA:0(-6.9/5.0):. Processed in 2.975768 secs); 04 Oct 2018 16:32:07 -0000 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20181004163200euoutp01a89b56f49b99ae6ea1c752b79a3fe3ea~adN4dJgAN2281622816euoutp01P DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1538670720; bh=1GkIlGOjmsiKvgpSYFy3F9CAYC7nDZkyh7OpSu35mOs=; h=Subject:From:To:Date:In-Reply-To:References:From; b=cfZAMtXKpXz4OcNfWgC2HxSX1CSEkJTuDayFcay0M+3yKd8KBO6hkNlp0MgjHn6SW 4EPM270xuR5aN+kvR9ZkivqEnxosjsBXc6DKhg1RxyJzjRrVUmbZDK8YldUVNqoKPo CoxpXs897J9Iqry5qWzA993h1qBffH+2N1qXEsQg= X-AuditID: cbfec7f5-34dff700000012c6-57-5bb6407eb199 Subject: Re: Parse error (lack thereof) on incomplete loops From: Peter Stephenson To: Date: Thu, 4 Oct 2018 17:31:56 +0100 In-Reply-To: X-Mailer: Evolution 3.18.5.2-0ubuntu3.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrDIsWRmVeSWpSXmKPExsWy7djPc7p1DtuiDT4/sbI42PyQyYHRY9XB D0wBjFFcNimpOZllqUX6dglcGWe3CBb8k6x4dfETawPjQtEuRk4OCQETickXZ7J1MXJxCAms YJR41H6bCcLpY5KY/Xc/E0iVkEAvk8TG3hCYjrfTJ7NDFC1nlFjfcoIRrmjbC3GIxGlGiW+9 m1ggnPOMEid7jrOAVAkLWEtsX/QDzGYTMJSYumk2WLeIgKTEtebTQDYHB4uAisS8q/EgYU6B QIkfzy6xQmzWkNhw8xjYRbwCghInZz4BG8MsIC/RvHU2M8guCYHbbBLLf6+FKiqTWDVvFxNE s4vE+1t9UIOEJV4d38IOYctI/N85nwmiuZ1RYs2k1+wQTg+jxKajdxghqqwl+m5fBLuOWUBT Yv0ufYiwo8SPza3sIGEJAT6JG28FIQ7ik5i0bTozRJhXoqNNCKJaTWJH01ZGiLCMxNM1ChMY lWYh+WYWkm9mIaxawMi8ilE8tbQ4Nz212DgvtVyvODG3uDQvXS85P3cTIzANnP53/OsOxn1/ kg4xCnAwKvHwvlDeFi3EmlhWXJl7iFGCg1lJhPe2BlCINyWxsiq1KD++qDQntfgQozQHi5I4 77J5G6OFBNITS1KzU1MLUotgskwcnFINjJ5zL15l/Mq7ujjFYN/hNc8tTq2y+7B562fzh88z BXJzn2x3vSAV/4VFZNffuH0On39n3ja76/z10s/1XxKXe52+c5/z5ZVas0czW9u4H33rY7r7 3nj3/nTGjQyBr7Oku/jvmax5sWWK/nG2Fa/9V+SdWad6dOPGRQHce05dTmDXyfq752JGVcEM JZbijERDLeai4kQAR6/rgv8CAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpgkeLIzCtJLcpLzFFi42I5/e/4Xd06h23RBl+XsVgcbH7I5MDoserg B6YAxig9m6L80pJUhYz84hJbpWhDCyM9Q0sLPSMTSz1DY/NYKyNTJX07m5TUnMyy1CJ9uwS9 jLNbBAv+SVa8uviJtYFxoWgXIyeHhICJxNvpk9m7GLk4hASWMkocWXiRESIhI/Hpykd2CFtY 4s+1LjaIom4mid9Lt7JCOKcZJX49fMYI4ZxnlDjwcyJYO6+AocSMlyvB2oUFrCW2L/rBAmKz AcWnbpoNViMiIClxrfk0kM3BwSKgIjHvajxImFMgUOLHs0usIDbYSXvuaILYzAKaEq3bf0Nd pCGx4eYxJohVghInZz5hgaiRl2jeOpt5AqPQLCQts5CUzUJStoCReRWjSGppcW56brGhXnFi bnFpXrpecn7uJkZg6G879nPzDsZLG4MPMQpwMCrx8L5Q3hYtxJpYVlyZe4hRgoNZSYT3tgZQ iDclsbIqtSg/vqg0J7X4EKMp0D8TmaVEk/OBcZlXEm9oamhuYWlobmxubGahJM573qAySkgg PbEkNTs1tSC1CKaPiYNTqoGRgemTga/3Rg2ZpQkObk2RNgb2JkLXb922c5x/f/aRR34JRdo7 dFp8SxlagnnmaOaLVyvENp2J5rjnfyKZgZ/LcT+HduHDqO61nd3SVpPX7zKvl3OMTlhyxtzk 26V/O5U/9Di9fHl1wcZsBq3iLY7TvNjfW4QtM9D5E/bSvOmMmExUa+EuByWW4oxEQy3mouJE AL7PfzeTAgAA Message-Id: <20181004163158eucas1p234a045be013b5463d8db44314ed217dc~adN28lJmq0822408224eucas1p2F@eucas1p2.samsung.com> X-CMS-MailID: 20181004163158eucas1p234a045be013b5463d8db44314ed217dc X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20181004154947epcas4p2441e109a2c4e060bf39f0f6925e98241 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20181004154947epcas4p2441e109a2c4e060bf39f0f6925e98241 References: On Thu, 2018-10-04 at 08:49 -0700, Bart Schaefer wrote: > This went by in a zsh-users thread so it may have been missed: Not sure who the additional audience is... > % { while false > cursh while> } > % >  > This indicates a parsing problem in 5.6, because in 5.0: >  > % { while false > cursh while> } > zsh: parse error near `}' It affects for, repeat, until and if, too, and isn't hard to turn back into a parse error.  Patch attached, though I'm not going to apply it at the moment. However, I'm very far from convinced this is actually a bug.  If you turn off SHORT_LOOPS you'll find you get the error back; the alternative loop syntax is defined in such a woolly fashion perhaps you actually can get away with this.  The short-loop user is probably primed to notice such things as that there's no following command so it'll just do nothing. I'm therefore inclined to leave it alone since the SHORT_LOOPS user (Marc) is perfectly happy with it and a lot of us avoid the alternative syntax like the plague. diff --git a/Src/parse.c b/Src/parse.c index 83383f1..a96cdcb 100644 --- a/Src/parse.c +++ b/Src/parse.c @@ -446,12 +446,17 @@ ecstrcode(char *s)          par_list(C); \          if (eu == ecused) ecadd(WCB_END()); \      } while (0) -#define par_save_list1(C) \ -    do { \ -        int eu = ecused; \ -        par_list1(C); \ -        if (eu == ecused) ecadd(WCB_END()); \ -    } while (0) + +/**/ +static int +par_save_list1(int *cmplx) +{ +    int eu = ecused; +    int ret = par_list1(cmplx); +    if (eu == ecused) + ecadd(WCB_END()); +    return ret; +}      /**/ @@ -766,7 +771,7 @@ par_list(int *cmplx)  }    /**/ -static void +static int  par_list1(int *cmplx)  {      int p = ecadd(0), c = 0; @@ -774,8 +779,11 @@ par_list1(int *cmplx)      if (par_sublist(&c)) {   set_list_code(p, (Z_SYNC | Z_END), c);   *cmplx |= c; -    } else + return 1; +    } else {   ecused--; + return 0; +    }  }    /* @@ -1151,8 +1159,8 @@ par_for(int *cmplx)   zshlex();      } else if (unset(SHORTLOOPS)) {   YYERRORV(oecused); -    } else - par_save_list1(cmplx); +    } else if (!par_save_list1(cmplx)) + YYERRORV(oecused);        ecbuf[p] = (sel ?   WCB_SELECT(type, ecused - 1 - p) : @@ -1439,7 +1447,8 @@ par_if(int *cmplx)   } else {       cmdpop();       cmdpush(nc); -     par_save_list1(cmplx); +     if (!par_save_list1(cmplx)) + YYERRORV(oecused);       ecbuf[pp] = WCB_IF(type, ecused - 1 - pp);       incmdpos = 1;       break; @@ -1512,8 +1521,8 @@ par_while(int *cmplx)   zshlex();      } else if (unset(SHORTLOOPS)) {   YYERRORV(oecused); -    } else - par_save_list1(cmplx); +    } else if (!par_save_list1(cmplx)) + YYERRORV(oecused);        ecbuf[p] = WCB_WHILE(type, ecused - 1 - p);  } @@ -1561,8 +1570,8 @@ par_repeat(int *cmplx)   zshlex();      } else if (unset(SHORTLOOPS)) {   YYERRORV(oecused); -    } else - par_save_list1(cmplx); +    } else if (!par_save_list1(cmplx)) + YYERRORV(oecused);        ecbuf[p] = WCB_REPEAT(ecused - 1 - p);  }