From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9546 invoked by alias); 5 Sep 2017 10:01:25 -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: X-Seq: 41641 Received: (qmail 25402 invoked by uid 1010); 5 Sep 2017 10:01:25 -0000 X-Qmail-Scanner-Diagnostics: from mailout2.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.12):SA:0(-6.9/5.0):. Processed in 6.196055 secs); 05 Sep 2017 10:01:25 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | X-AuditID: cbfec7f2-f793b6d000003243-08-59ae75e50599 Date: Tue, 05 Sep 2017 11:01:06 +0100 From: Peter Stephenson To: Zsh hackers list Subject: Re: $((++a++)) Message-id: <20170905110106.16914af6@pwslap01u.europe.root.pri> In-reply-to: <74d2c8e3-7a0f-b705-29c8-e5a2f6e182aa@inlv.org> Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset="US-ASCII" Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrHIsWRmVeSWpSXmKPExsWy7djP87rPStdFGvy7y2RxsPkhkwOjx6qD H5gCGKO4bFJSczLLUov07RK4Mu68vcpa0C5Q8XPFRtYGxnaeLkZODgkBE4m5jw+xQ9hiEhfu rWfrYuTiEBJYyijxdPcfVginl0ni2KlONpiOhVuvMEIkljFKvLi+G8qZxiTx/fYkRpAqIYHT jBIzT/pBJM4wSjy5cwpsCYuAqsTVJzfARrEJGEpM3TQbrEFEQEtix8mTTCC2sIC4xONp88Fq eAXsJc4smQYW5xSwkbh35BeYzS+gL3H17ycmiJPsJWZeOcMIUS8o8WPyPRYQm1lAR2Lbtsfs ELa8xOY1b5lBDpIQmMMmsWbLBKAGDiDHRWLTXjGIOcISr45vgQaGjMTlyd0sEHY/0APdvhC9 MxglTp/ZAQ0La4m+2xcZIRbwSUzaNp0ZYiavREebEESJh8SS65Ogyh0lNk34DQ0toJlXt79i nsCoMAvJ3bOQ3D0Lyd0LGJlXMYqklhbnpqcWG+sVJ+YWl+al6yXn525iBKaC0/+Of9rB+PWE 1SFGAQ5GJR5ejbK1kUKsiWXFlbmHGCU4mJVEeFelrIsU4k1JrKxKLcqPLyrNSS0+xCjNwaIk zmsb1RYpJJCeWJKanZpakFoEk2Xi4JRqYHQsC4lKvpi7SatqUT2XOtf2I6JTpAou2RpZ+6+9 euAT64xV/k63yi7bXtdv+RDqvWuLXZ7Cn5oJ2uc+7P8q7OcS/Ki9PsrAfMG99fa3XxTc/KPk 3+J/bwbr561LbOri50T/kWXPWR61u1ErL5XBRLejVeGHya3HezK3nHK1qnuuLrBqf53IVyWW 4oxEQy3mouJEADjgDLIBAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrALMWRmVeSWpSXmKPExsVy+t/xK7pPS9dFGqztkrE42PyQyYHRY9XB D0wBjFFcNimpOZllqUX6dglcGXfeXmUtaBeo+LliI2sDYztPFyMnh4SAicTCrVcYIWwxiQv3 1rN1MXJxCAksYZR49/AmO4Qzg0mi695LKOc0o0T/201MEM4ZRomDZy6B9bMIqEpcfXKDDcRm EzCUmLppNlhcREBLYsfJk0wgtrCAuMTjafPBangF7CXOLJkGFucUsJG4d+QXmC0kMJFRYskO DxCbX0Bf4urfT0wQ99lLzLxyhhGiV1Dix+R7LCA2M9D8zduaWCFseYnNa94yQ8xRl7hxdzf7 BEbhWUhaZiFpmYWkZQEj8ypGkdTS4tz03GIjveLE3OLSvHS95PzcTYzAcN527OeWHYxd74IP MQpwMCrx8HJErY0UYk0sK67MPcQowcGsJMK7KmVdpBBvSmJlVWpRfnxRaU5q8SFGaQ4WJXHe 3j2rI4UE0hNLUrNTUwtSi2CyTBycUg2MFutPcy2YvHHdrDWNT9qltqrfvyo5LdIzaJuMogp3 lJx8+u1VuvyNQaF7ghZ6vl8Zt21l2Par4lNfveowPyZ/qj7E6//r77nHGmVuzDXYoVRzcofz Uw4R/SPlTJeyVy39Vn9BZU3U97yYdUeWli+5ulx+ce80K9HNkg93GR3fxBVauKa7ts52gxJL cUaioRZzUXEiABi/Ak5jAgAA X-CMS-MailID: 20170905100109eucas1p1d6f9a1ccedcebb84275877d11b98f771 X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUb?= =?UTF-8?B?7IK87ISx7KCE7J6QG1ByaW5jaXBhbCBFbmdpbmVlciwgU29mdHdhcmU=?= X-Global-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUbU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtQcmluY2lwYWwgRW5naW5lZXIsIFNvZnR3YXJl?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDA1Q0QwNTAwNTg=?= CMS-TYPE: 201P X-CMS-RootMailID: 20170904210547epcas2p2e46e1cb14a26b8e5fdd9217c58c077ff X-RootMTR: 20170904210547epcas2p2e46e1cb14a26b8e5fdd9217c58c077ff References: <74d2c8e3-7a0f-b705-29c8-e5a2f6e182aa@inlv.org> On Mon, 4 Sep 2017 22:45:46 +0200 Martijn Dekker wrote: > Why is this accepted? > > % a=1 > % echo $((++a++)) > 2 > % echo $((--a--)) > 1 > > Looks like that should be an invalid arithmetic expression. After staring at this for long enough, I realised it was trivial. The current code is in fact doing too much work in order to get it wrong... pws diff --git a/Src/math.c b/Src/math.c index f961300..c383160 100644 --- a/Src/math.c +++ b/Src/math.c @@ -1306,8 +1306,6 @@ op(int what) spval->type = MN_INTEGER; } else spval->u.l = !spval->u.l; - stack[sp].lval = NULL; - stack[sp].pval = NULL; break; case COMP: if (spval->type & MN_FLOAT) { @@ -1315,8 +1313,6 @@ op(int what) spval->type = MN_INTEGER; } else spval->u.l = ~spval->u.l; - stack[sp].lval = NULL; - stack[sp].pval = NULL; break; case POSTPLUS: a = *spval; @@ -1335,16 +1331,12 @@ op(int what) (void)setmathvar(stack + sp, a); break; case UPLUS: - stack[sp].lval = NULL; - stack[sp].pval = NULL; break; case UMINUS: if (spval->type & MN_FLOAT) spval->u.d = -spval->u.d; else spval->u.l = -spval->u.l; - stack[sp].lval = NULL; - stack[sp].pval = NULL; break; case QUEST: DPUTS(sp < 2, "BUG: math: three shall be the number of the counting."); @@ -1377,6 +1369,8 @@ op(int what) zerr("bad math expression: out of integers"); return; } + stack[sp].lval = NULL; + stack[sp].pval = NULL; } diff --git a/Test/C01arith.ztst b/Test/C01arith.ztst index 61da763..30409ad 100644 --- a/Test/C01arith.ztst +++ b/Test/C01arith.ztst @@ -420,3 +420,16 @@ 0:type of variable when created in arithmetic context >integer >scalar + + integer a=1 + print $(( ++a * 2 )) + print $(( ++a )) + print $(( a++ * 2 )) + print $(( a )) + print $(( ++a++ * 2 )) +1: Allow rvalue but not lvalue operations with result of increment +>4 +>3 +>6 +>4 +?(eval):6: bad math expression: lvalue required