From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21955 invoked by alias); 26 Jan 2017 20:05:03 -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: 40423 Received: (qmail 20026 invoked from network); 26 Jan 2017 20:05:03 -0000 X-Qmail-Scanner-Diagnostics: from know-smtprelay-omc-7.server.virginmedia.net 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(80.0.253.71):SA:0(-1.2/5.0):. Processed in 0.754578 secs); 26 Jan 2017 20:05:03 -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=-1.2 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: p.w.stephenson@ntlworld.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _smtprelay.virginmedia.com designates 80.0.253.71 as permitted sender) X-Originating-IP: [86.21.219.59] X-Spam: 0 X-Authority: v=2.1 cv=SYcKDalu c=1 sm=1 tr=0 a=utowdAHh8RITBM/6U1BPxA==:117 a=utowdAHh8RITBM/6U1BPxA==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=kj9zAlcOel0A:10 a=MWUjAzoEKyAA:10 a=NLZqzBF-AAAA:8 a=KhJb5_6b4RvEO7Y8osEA:9 a=CjuIK1q_8ugA:10 a=wW_WBVUImv98JQXhvVPZ:22 Date: Thu, 26 Jan 2017 20:04:58 +0000 From: Peter Stephenson To: zsh-workers@zsh.org Subject: Re: LOCAL_VARS option ? Message-ID: <20170126200458.259122e2@ntlworld.com> In-Reply-To: <20170126194328.5aa3d79d@ntlworld.com> References: <20170119065408.GA5534@fujitsu.shahaf.local2> <20170119160841.354ec75c@pwslap01u.europe.root.pri> <20170120171922.0e0c370d@pwslap01u.europe.root.pri> <20170122190052.327898df@ntlworld.com> <20170123100914.55675852@pwslap01u.europe.root.pri> <20170123112008.GA8944@fujitsu.shahaf.local2> <20170125055009.GA11466@fujitsu.shahaf.local2> <20170125092438.215f5a2c@pwslap01u.europe.root.pri> <20170126194328.5aa3d79d@ntlworld.com> X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.28; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Thu, 26 Jan 2017 19:43:28 +0000 Peter Stephenson wrote: > This wasn't particularly tortuous, simply that when I extended the > create warning logic I handled this one rather badly. There's more! diff --git a/Src/params.c b/Src/params.c index 45b37cb..a8d4f50 100644 --- a/Src/params.c +++ b/Src/params.c @@ -3048,6 +3048,7 @@ assignaparam(char *s, char **val, int flags) Value v; char *t = s; char *ss; + int created = 0; if (!isident(s)) { zerr("not an identifier: %s", s); @@ -3058,10 +3059,10 @@ assignaparam(char *s, char **val, int flags) queue_signals(); if ((ss = strchr(s, '['))) { *ss = '\0'; - if (!(v = getvalue(&vbuf, &s, 1))) + if (!(v = getvalue(&vbuf, &s, 1))) { createparam(t, PM_ARRAY); - else - flags &= ~ASSPM_WARN_CREATE; + created = 1; + } *ss = '['; if (v && PM_TYPE(v->pm->node.flags) == PM_HASHED) { unqueue_signals(); @@ -3073,9 +3074,10 @@ assignaparam(char *s, char **val, int flags) } v = NULL; } else { - if (!(v = fetchvalue(&vbuf, &s, 1, SCANPM_ASSIGNING))) + if (!(v = fetchvalue(&vbuf, &s, 1, SCANPM_ASSIGNING))) { createparam(t, PM_ARRAY); - else if (!(PM_TYPE(v->pm->node.flags) & (PM_ARRAY|PM_HASHED)) && + created = 1; + } else if (!(PM_TYPE(v->pm->node.flags) & (PM_ARRAY|PM_HASHED)) && !(v->pm->node.flags & (PM_SPECIAL|PM_TIED))) { int uniq = v->pm->node.flags & PM_UNIQUE; if (flags & ASSPM_AUGMENT) { @@ -3093,8 +3095,6 @@ assignaparam(char *s, char **val, int flags) createparam(t, PM_ARRAY | uniq); v = NULL; } - else - flags &= ~ASSPM_WARN_CREATE; } if (!v) if (!(v = fetchvalue(&vbuf, &t, 1, SCANPM_ASSIGNING))) { @@ -3105,7 +3105,7 @@ assignaparam(char *s, char **val, int flags) } if (flags & ASSPM_WARN) - check_warn_pm(v->pm, "array", flags & ASSPM_WARN_CREATE); + check_warn_pm(v->pm, "array", created); if (flags & ASSPM_AUGMENT) { if (v->start == 0 && v->end == -1) { if (PM_TYPE(v->pm->node.flags) & PM_ARRAY) { diff --git a/Test/E01options.ztst b/Test/E01options.ztst index c265d78..343d5a9 100644 --- a/Test/E01options.ztst +++ b/Test/E01options.ztst @@ -1211,10 +1211,22 @@ print $var } ) -0:Warn when changing type of nested variable. +0:Warn when changing type of nested variable: array to scalar. ?(anon): scalar parameter var set in enclosing scope in function (anon) >three + ( + setopt warnnestedvar + () { + local var=three + () { var=(one two); } + print $var + } + ) +0:Warn when changing type of nested variable: scalar to array. +?(anon): array parameter var set in enclosing scope in function (anon) +>one two + # This really just tests if XTRACE is egregiously broken. # To test it properly would need a full set of its own. fn() { print message; }