From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14984 invoked by alias); 2 Feb 2017 09:43:55 -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: 40486 Received: (qmail 14243 invoked from network); 2 Feb 2017 09:43:55 -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(-5.0/5.0):. Processed in 1.372729 secs); 02 Feb 2017 09:43:55 -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=-5.0 required=5.0 tests=RCVD_IN_DNSWL_HI, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at samsung.com does not designate permitted sender hosts) X-AuditID: cbfec7f4-f79716d000006f65-73-5892ff4f736f Date: Thu, 02 Feb 2017 09:43:40 +0000 From: Peter Stephenson To: zsh-workers@zsh.org Subject: Re: Bug in regexp operator when warn_create_global is in effect Message-id: <20170202094340.64946066@pwslap01u.europe.root.pri> In-reply-to: <1486021036.1782934.867696784.0FCB3E9A@webmail.messagingengine.com> 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+NgFnrJIsWRmVeSWpSXmKPExsWy7djPc7r+/ydFGBy5JGxxsPkhkwOjx6qD H5gCGKO4bFJSczLLUov07RK4Mia2TGMraJKvmP7oCksD41nxLkYODgkBE4nbU9m7GDmBTDGJ C/fWs4HYQgJLGSX+g5RwAdm9TBInFuxlhSgykZh9azYzRGIZo8TO5/8YITqmMUl8WFQFYZ9m lHjyJRqi6AyjRPuZ/2BFLAKqEq8bm8AmsQkYSkzdNBssLiIgLnF27XkWEFtYwEPiy6NVzCA2 r4C9xOzTl8FqOAUCJM7c/w1m8wvoS1z9+4kJ4iJ7iZlXzjBC1AtK/Jh8D2wOs4COxLZtj9kh bHmJzWvegl0tIfCfTeL/ko0sEO/LSmw6wAwxx0XizIppbBC2sMSr41ugwSIj0dlxEGpXP9Bj 3b4Qc2YwSpw+swOqwVqi7/ZFRohlfBKTtk1nhpjPK9HRJgRhAv21QgCi2lHiXNdT5gmMirOQ XD0LydWzkFy9gJF5FaNIamlxbnpqsYlecWJucWleul5yfu4mRmACOP3v+JcdjIuPWR1iFOBg VOLhzRCbFCHEmlhWXJl7iFGCg1lJhJfzN1CINyWxsiq1KD++qDQntfgQozQHi5I4754FV8KF BNITS1KzU1MLUotgskwcnFINjALrJlYesJVqL+D4mhTEu3uR95c32+ZlsYqs2V512ETY4Hip 4M6WAuc+4bXNi85kGzqWhuw7+kie5XOY8U7jExXWUtsjJ3g/qAk91ntN/U6NcqSKiLzp9iWe j+frbimS+sAT3cOW91eI3aTsdP1Rr9jYfeyJ7OstpBim1tR+k2Bdmy5ikPFdiaU4I9FQi7mo OBEADPY5zPwCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrGIsWRmVeSWpSXmKPExsVy+t/xa7pT/k+KMJizTcriYPNDJgdGj1UH PzAFMEa52WSkJqakFimk5iXnp2TmpdsqhYa46VooKeQl5qbaKkXo+oYEKSmUJeaUAnlGBmjA wTnAPVhJ3y7BLWNiyzS2gib5iumPrrA0MJ4V72Lk5JAQMJGYfWs2M4QtJnHh3nq2LkYuDiGB JYwSczY8h3JmMElcmDaDCcI5zSgxe/lcFgjnDKPEhtZnLCD9LAKqEq8bm1hBbDYBQ4mpm2Yz gtgiAuISZ9eeB6sRFvCQ+PJoFdg+XgF7idmnL4PVcAoESJy5/xvMFhJYyijxalooiM0voC9x 9e8nJoj77CVmXjnDCNErKPFj8j2wmcwCWhKbt0HsZRaQl9i85i0zxBx1iRt3d7NPYBSehaRl FpKWWUhaFjAyr2IUSS0tzk3PLTbUK07MLS7NS9dLzs/dxAiMo23Hfm7ewXhpY/AhRgEORiUe 3gMSkyKEWBPLiitzDzFKcDArifBy/gYK8aYkVlalFuXHF5XmpBYfYjQFBsxEZinR5HxgjOeV xBuaGJpbGhoZW1iYGxkpifOWfLgSLiSQnliSmp2aWpBaBNPHxMEp1cDYstEm59KVhIxJSjOm qgbNZ7pnozo56KvU9I+rSovXJuyaqx59ZyVzXuqaWzdW2u36PcXm7IGWcwtrUjk6X9baqrTM XDdf6H9vu7/0ntV7mHbcLHb4udCbI+Fxp+DHPQ3ZjDynaqX/fnGXuPZk36ItDzatCmCzOt2x suBi93r2+x0qp2vqxGNllViKMxINtZiLihMBvisc97kCAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170202094342eucas1p1b0b3e8e407cc9aa277781f80a1f77471 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 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-HopCount: 7 X-CMS-RootMailID: 20170202073801epcas4p3fa77b3bbe2794d2f574ac0319f13ab3f X-RootMTR: 20170202073801epcas4p3fa77b3bbe2794d2f574ac0319f13ab3f References: <1486021036.1782934.867696784.0FCB3E9A@webmail.messagingengine.com> On Thu, 02 Feb 2017 08:37:16 +0100 Ronald Fischer wrote: > Consider the following program: > > #!/bin/zsh > function f { > [[ x =~ x ]] > } > setopt warn_create_global > f > > When run by zsh 5.2 (x86_64-ubuntu-linux-gnu), I get the error messages: > > f:1: scalar parameter MATCH created globally in function f > f:1: numeric parameter MBEGIN created globally in function f > f:1: numeric parameter MEND created globally in function f > > While it is correct, that regexp matching sets, as side effect, the > variables mentioned here, it doesn't, IMHO, make much sense that a zsh > user, who not even *uses* these variables, receives these error > messages. Yes, you're right, the user doesn't even necessarily want them, which is different from the case of the globbing flags in native zsh expressions. So probably best to turn the warnings off. We don't yet have quite the full infrastructure for numerical variables, annoyingly, but probably useful to add anyway... pws diff --git a/Src/Modules/regex.c b/Src/Modules/regex.c index edb7234..d02769e 100644 --- a/Src/Modules/regex.c +++ b/Src/Modules/regex.c @@ -111,7 +111,7 @@ zcond_regex_match(char **a, int id) *x = NULL; } if (isset(BASHREMATCH)) { - setaparam("BASH_REMATCH", arr); + assignaparam("BASH_REMATCH", arr, 0); } else { zlong offs; char *ptr; @@ -119,7 +119,7 @@ zcond_regex_match(char **a, int id) m = matches; s = metafy(lhstr + m->rm_so, m->rm_eo - m->rm_so, META_DUP); - setsparam("MATCH", s); + assignsparam("MATCH", s, 0); /* * Count the characters before the match. */ @@ -133,7 +133,7 @@ zcond_regex_match(char **a, int id) ptr += clen; leftlen -= clen; } - setiparam("MBEGIN", offs + !isset(KSHARRAYS)); + assigniparam("MBEGIN", offs + !isset(KSHARRAYS), 0); /* * Add on the characters in the match. */ @@ -144,7 +144,7 @@ zcond_regex_match(char **a, int id) ptr += clen; leftlen -= clen; } - setiparam("MEND", offs + !isset(KSHARRAYS) - 1); + assigniparam("MEND", offs + !isset(KSHARRAYS) - 1, 0); if (nelem) { char **mbegin, **mend, **bptr, **eptr; bptr = mbegin = (char **)zalloc(sizeof(char *)*(nelem+1)); diff --git a/Src/params.c b/Src/params.c index 20abe6a..19cbb1c 100644 --- a/Src/params.c +++ b/Src/params.c @@ -3192,11 +3192,12 @@ sethparam(char *s, char **val) /* * Set a generic shell number, floating point or integer. + * Option to warn on setting. */ /**/ -Param -setnparam(char *s, mnumber val) +mod_export Param +assignnparam(char *s, mnumber val, int flags) { struct value vbuf; Value v; @@ -3248,15 +3249,41 @@ setnparam(char *s, mnumber val) unqueue_signals(); return NULL; } - check_warn_pm(v->pm, "numeric", !was_unset, 1); + if (flags & ASSPM_WARN) + check_warn_pm(v->pm, "numeric", !was_unset, 1); } else { - check_warn_pm(v->pm, "numeric", 0, 1); + if (flags & ASSPM_WARN) + check_warn_pm(v->pm, "numeric", 0, 1); } setnumvalue(v, val); unqueue_signals(); return v->pm; } +/* + * Set a generic shell number, floating point or integer. + * Warn on setting based on option. + */ + +/**/ +mod_export Param +setnparam(char *s, mnumber val) +{ + return assignnparam(s, val, ASSPM_WARN); +} + +/* Simplified interface to assignnparam */ + +/**/ +mod_export Param +assigniparam(char *s, zlong val, int flags) +{ + mnumber mnval; + mnval.type = MN_INTEGER; + mnval.u.l = val; + return assignnparam(s, mnval, flags); +} + /* Simplified interface to setnparam */ /**/ @@ -3266,7 +3293,7 @@ setiparam(char *s, zlong val) mnumber mnval; mnval.type = MN_INTEGER; mnval.u.l = val; - return setnparam(s, mnval); + return assignnparam(s, mnval, ASSPM_WARN); } /*