From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6168 invoked by alias); 16 Sep 2014 19:20:44 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 19097 Received: (qmail 23892 invoked from network); 16 Sep 2014 19:20:30 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 X-Originating-IP: [109.156.72.52] X-Spam: 0 X-Authority: v=2.1 cv=VLdTnr/X c=1 sm=1 tr=0 a=7BeiIeuv7r7m37p3TTMUEg==:117 a=7BeiIeuv7r7m37p3TTMUEg==:17 a=NLZqzBF-AAAA:8 a=rTXyMR_be9AA:10 a=DdG8MeyGLZEA:10 a=uObrxnre4hsA:10 a=kj9zAlcOel0A:10 a=q2GGsy2AAAAA:8 a=Rr3yTG73_TakD71DrPQA:9 a=X66PDaSvkiCynn9Z:21 a=c5gDETDrdNGE_uR9:21 a=CjuIK1q_8ugA:10 a=_dQi-Dcv4p4A:10 a=I6wTmPyJxzYA:10 Date: Tue, 16 Sep 2014 20:14:54 +0100 From: Peter Stephenson To: zsh-users@zsh.org Subject: Re: Detect if a script is being sourced vs executed Message-ID: <20140916201454.4257991f@pws-pc.ntlworld.com> In-Reply-To: References: <541333FF.3090601@thequod.de> <20140912200509.6cac2742@pws-pc.ntlworld.com> <140912162116.ZM23683@torch.brasslantern.com> X-Mailer: Claws Mail 3.8.0 (GTK+ 2.24.7; x86_64-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Sat, 13 Sep 2014 09:01:21 +0100 Peter Stephenson wrote: > On 13/09/2014, Bart Schaefer wrote: > > On Sep 12, 8:05pm, Peter Stephenson wrote: > > } > > } I was surprised to find the zsh/parameter modules series of array > > } parameters that allow you to trace back the functions, sourced files, > > } etc. being executed don't give this information, which is present > > } internally. This adds $functypestack to do this. > > > > Is this in some way NOT redundant with $zsh_eval_context ? Other than > > apparently being in the reverse order? > > You're right, I was looking in the wrong place. It can > be replaced simply by a cross-reference. They also don't actually quite correspond -- you can get extra entries in zsh_eval_context since it intercepts the lowest level of code execution while the funcstack stuff is done for each applicable layer separately. So there's potentially some use for functypestack --- however, it's not needed for the purpose here, where $zsh_eval_context[-1] is good enough (it'll be either "toplevel" or "file"). diff --git a/Doc/Zsh/mod_parameter.yo b/Doc/Zsh/mod_parameter.yo index c157160..7886d0e 100644 --- a/Doc/Zsh/mod_parameter.yo +++ b/Doc/Zsh/mod_parameter.yo @@ -201,10 +201,7 @@ The format of each element is var(filename)tt(:)var(lineno). For functions autoloaded from a file in native zsh format, where only the body of the function occurs in the file, or for files that have been executed by the tt(source) or `tt(.)' builtins, the trace information is -shown as var(filename)tt(:)var(0), since the entire file is the -definition. - -The most recent call is the first element in the array. +shown as var(filename)tt(:)var(0), since the entire file is the definition. Most users will be interested in the information in the tt(funcfiletrace) array instead. @@ -215,6 +212,14 @@ This array contains the names of the functions, sourced files, and (if tt(EVAL_LINENO) is set) tt(eval) commands. currently being executed. The first element is the name of the function using the parameter. + +The standard shell array tt(zsh_eval_context) can be used to +determine the type of shell construct being executed at each depth: +note, however, that is in the opposite order, with the most recent +item last, and it is more detailed, for example including an +entry for tt(toplevel), the main shell code being executed +either interactively or from a script, which is not present +in tt($funcstack). ) vindex(functrace) item(tt(functrace))( @@ -224,13 +229,4 @@ The format of each element is var(name)tt(:)var(lineno). Callers are also shown for sourced files; the caller is the point where the tt(source) or `tt(.)' command was executed. ) -vindex(functypestack) -item(tt(functypestack))( -This array corresponds element by element with tt(funcstack). -Each element contains `tt(source)' for a sourced file, `tt(function)' -for a function and `tt(eval)' for an tt(eval)'d expression. At the top -level of execution of a series of commands, tt($functypestack[1]) is -empty if the commands are being executed as a script, or one of the -previous strings if the commands are being executed as that type. -) enditem() diff --git a/Src/Modules/parameter.c b/Src/Modules/parameter.c index 02a642b..0385a70 100644 --- a/Src/Modules/parameter.c +++ b/Src/Modules/parameter.c @@ -640,41 +640,6 @@ funcfiletracegetfn(UNUSED(Param pm)) return ret; } -/* Functions for the functypestack special parameter. */ - -static char ** -functypestackgetfn(UNUSED(Param pm)) -{ - Funcstack f; - int num; - char **ret, **p; - - for (f = funcstack, num = 0; f; f = f->prev, num++); - - ret = (char **) zhalloc((num + 1) * sizeof(char *)); - - for (f = funcstack, p = ret; f; f = f->prev, p++) - { - switch (f->tp) - { - case FS_SOURCE: - *p = "source"; - break; - - case FS_FUNC: - *p = "function"; - break; - - case FS_EVAL: - *p = "eval"; - break; - } - } - *p = NULL; - - return ret; -} - /* Functions for the builtins special parameter. */ /**/ @@ -2081,8 +2046,6 @@ static const struct gsu_array funcsourcetrace_gsu = { funcsourcetracegetfn, arrsetfn, stdunsetfn }; static const struct gsu_array funcfiletrace_gsu = { funcfiletracegetfn, arrsetfn, stdunsetfn }; -static const struct gsu_array functypestack_gsu = -{ functypestackgetfn, arrsetfn, stdunsetfn }; static const struct gsu_array reswords_gsu = { reswordsgetfn, arrsetfn, stdunsetfn }; static const struct gsu_array disreswords_gsu = @@ -2127,8 +2090,6 @@ static struct paramdef partab[] = { scanpmfunctions), SPECIALPMDEF("functrace", PM_ARRAY|PM_READONLY, &functrace_gsu, NULL, NULL), - SPECIALPMDEF("functypestack", PM_ARRAY|PM_READONLY, - &functypestack_gsu, NULL, NULL), SPECIALPMDEF("galiases", 0, &pmgaliases_gsu, getpmgalias, scanpmgaliases), SPECIALPMDEF("history", PM_READONLY, -- Peter Stephenson Web page now at http://homepage.ntlworld.com/p.w.stephenson/