From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1546 invoked from network); 9 Jul 2001 17:33:09 -0000 Received: from sunsite.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 9 Jul 2001 17:33:09 -0000 Received: (qmail 19815 invoked by alias); 9 Jul 2001 17:33:01 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 15334 Received: (qmail 19800 invoked from network); 9 Jul 2001 17:33:00 -0000 Message-ID: To: zsh-workers@sunsite.dk (Zsh hackers list) Subject: Re: Debugging of dynamocally defined functions In-reply-to: ""Bart Schaefer""'s message of "Mon, 09 Jul 2001 16:50:31 -0000." <1010709165031.ZM20928@candle.brasslantern.com> Date: Mon, 09 Jul 2001 18:32:32 +0100 From: Peter Stephenson "Bart Schaefer" wrote: > In xtrace output the `eval' itself gets a line number before the commands > that it executes are numbered, so that's fine -- it's possible to track > the eval to a line in the calling function/file. > > However, neither the value of %N nor that of %_ in PS4 changes to indicate > that you've entered a new line numbering scope; only %i changes. For a > large `eval' that can be quite distracting. Yes, that's pretty much the same point I made over the matter of line numbering of functions whose definitions is embedded in some other file; you really want to know both the function and the file to make sense of it. The following is how perl does it, marking an `eval' as a separate environment. This time I've included the Test changes --- those ZTST_execchunk's are gone in favour of `(eval)' (good riddance --- this improves the look of thing markedly). I can't absolutely guarantee that setting scriptname has no side effects, but the tests as modified all still pass. Is this better? It's missed 4.1.0-dev-1. Index: Src/builtin.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/builtin.c,v retrieving revision 1.49 diff -u -r1.49 builtin.c --- Src/builtin.c 2001/07/09 16:05:14 1.49 +++ Src/builtin.c 2001/07/09 17:26:24 @@ -3420,7 +3420,10 @@ bin_eval(char *nam, char **argv, char *ops, int func) { Eprog prog; + char *oscriptname = scriptname; + scriptname = "(eval)"; + prog = parse_string(zjoin(argv, ' ', 1)); if (!prog) { errflag = 0; @@ -3431,6 +3434,9 @@ lastval = errflag; errflag = 0; } + + scriptname = oscriptname; + return lastval; } Index: Test/A01grammar.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/A01grammar.ztst,v retrieving revision 1.3 diff -u -r1.3 A01grammar.ztst --- Test/A01grammar.ztst 2001/07/09 16:41:19 1.3 +++ Test/A01grammar.ztst 2001/07/09 17:26:24 @@ -108,7 +108,7 @@ : fi 1d:`if ...' (iv) -?ZTST_execchunk:3: parse error near `fi' +?(eval):3: parse error near `fi' for name in word to term; do print $name Index: Test/A02alias.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/A02alias.ztst,v retrieving revision 1.3 diff -u -r1.3 A02alias.ztst --- Test/A02alias.ztst 2001/07/09 16:41:19 1.3 +++ Test/A02alias.ztst 2001/07/09 17:26:24 @@ -16,7 +16,7 @@ \foo foo 127:Not aliasing -?ZTST_execchunk:1: command not found: foo +?(eval):1: command not found: foo \bar \bar 0:Aliasing with a backslash Index: Test/A04redirect.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/A04redirect.ztst,v retrieving revision 1.2 diff -u -r1.2 A04redirect.ztst --- Test/A04redirect.ztst 2001/07/09 16:41:19 1.2 +++ Test/A04redirect.ztst 2001/07/09 17:26:24 @@ -189,7 +189,7 @@ unset NULLCMD >out1 1:null redir with NULLCMD unset -?ZTST_execchunk:2: redirection with no command +?(eval):2: redirection with no command echo this should still work >out1 print "$(out1 out1 Index: Test/C01arith.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/C01arith.ztst,v retrieving revision 1.3 diff -u -r1.3 C01arith.ztst --- Test/C01arith.ztst 2001/07/09 16:41:19 1.3 +++ Test/C01arith.ztst 2001/07/09 17:26:24 @@ -53,11 +53,11 @@ print $(( 3 ? 2 )) 1:parsing ternary (1) -?ZTST_execchunk:1: ':' expected +?(eval):1: ':' expected print $(( 3 ? 2 : 1 : 4 )) 1:parsing ternary (2) -?ZTST_execchunk:1: ':' without '?' +?(eval):1: ':' without '?' print $(( 0, 4 ? 3 : 1, 5 )) 0:comma operator @@ -91,7 +91,7 @@ print $(( 13 = 42 )) 1:bad lvalue -?ZTST_execchunk:1: lvalue required +?(eval):1: lvalue required x=/bar (( x = 32 )) Index: Test/D01prompt.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/D01prompt.ztst,v retrieving revision 1.1 diff -u -r1.1 D01prompt.ztst --- Test/D01prompt.ztst 2001/04/02 12:33:15 1.1 +++ Test/D01prompt.ztst 2001/07/09 17:26:24 @@ -30,7 +30,7 @@ > %M: $HOST > %m: ${HOST%%.*} > %n: $USERNAME -> %N: ZTST_execchunk +> %N: (eval) > %i: 2 > a%{...%}b: ab > Index: Test/D04parameter.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/D04parameter.ztst,v retrieving revision 1.3 diff -u -r1.3 D04parameter.ztst --- Test/D04parameter.ztst 2001/07/09 16:41:19 1.3 +++ Test/D04parameter.ztst 2001/07/09 17:26:24 @@ -74,8 +74,8 @@ 1:${...:?...}, ${...?...} >set1v > -?ZTST_execchunk:1: unset1: exiting1 -?ZTST_execchunk:2: null1: exiting2 +?(eval):1: unset1: exiting1 +?(eval):2: null1: exiting2 print ${set1:+word1} ${set1+word2} ${null1:+word3} ${null1+word4} print ${unset1:+word5} ${unset1+word6} @@ -279,7 +279,7 @@ foo='unmatched "' print ${(QX)foo} 1:${(QX)...} -?ZTST_execchunk:2: unmatched " +?(eval):2: unmatched " array=(characters in an array) print ${(c)#array} Index: Test/D06subscript.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/D06subscript.ztst,v retrieving revision 1.6 diff -u -r1.6 D06subscript.ztst --- Test/D06subscript.ztst 2001/07/09 16:41:19 1.6 +++ Test/D06subscript.ztst 2001/07/09 17:26:24 @@ -95,7 +95,7 @@ eval 'A[*]=star' 1:Illegal associative array assignment -?ZTST_execchunk:1: A: attempt to set slice of associative array +?(eval):1: A: attempt to set slice of associative array x='*' A[$x]=xstar Index: Test/E01options.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/E01options.ztst,v retrieving revision 1.7 diff -u -r1.7 E01options.ztst --- Test/E01options.ztst 2001/07/09 16:41:19 1.7 +++ Test/E01options.ztst 2001/07/09 17:26:24 @@ -133,7 +133,7 @@ print [b 1:BAD_PATTERN option >[a -?ZTST_execchunk:4: bad pattern: [b +?(eval):4: bad pattern: [b unsetopt bareglobqual nomatch print *(.) @@ -192,8 +192,8 @@ 1q:CDABLE_VARS option >`print -P '%~'`/tmpcd >back in options.tmp -?ZTST_execchunk:cd:4: no such file or directory: cdablevar1 -?ZTST_execchunk:cd:10: no such file or directory: cdablevar2 +?(eval):cd:4: no such file or directory: cdablevar1 +?(eval):cd:10: no such file or directory: cdablevar2 # CHASE_DOTS should go with CHASE_LINKS in B01cd.ztst # which saves me having to write it here. @@ -227,8 +227,8 @@ >wimpole >royston >foxton -?ZTST_execchunk:4: file exists: foo1 -?ZTST_execchunk:6: no such file or directory: bar1 +?(eval):4: file exists: foo1 +?(eval):6: no such file or directory: bar1 setopt cshjunkieloops eval 'for f in swaffham bulbeck; print $f; end' @@ -239,7 +239,7 @@ >swaffham >bulbeck ?next one should fail -?ZTST_execchunk:1: parse error near `end' +?(eval):1: parse error near `end' setopt cshjunkiequotes print this should cause an error >&2 @@ -253,7 +253,7 @@ >line three > line four ?this should cause an error -?ZTST_execchunk:1: unmatched ' +?(eval):1: unmatched ' ?this should not nullcmd() { print '$NULLCMD run'; } @@ -279,10 +279,10 @@ >Running $READNULLCMD >$NULLCMD run ?This should fail -?ZTST_execchunk:8: redirection with no command +?(eval):8: redirection with no command ?This should succeed ?This should also fail -?ZTST_execchunk:13: redirection with no command +?(eval):13: redirection with no command # nomatch should be overridden by cshnullglob setopt nomatch cshnullglob @@ -297,7 +297,7 @@ >tmpcd tmpfile1 tmpfile2 blah >tmpcd tmpfile1 tmpfile2 nothing* blah >nothing* blah -?hoping for no match: ZTST_execchunk:4: no match +?hoping for no match: (eval):4: no match ? # The trick is to avoid =cat being expanded in the output while $catpath is. @@ -625,7 +625,7 @@ print with nomatch flooble* 1:NOMATCH option >with nonomatch: flooble* -?ZTST_execchunk:4: no matches found: flooble* +?(eval):4: no matches found: flooble* # NULL_GLOB should override NONOMATCH... setopt nullglob nomatch @@ -688,7 +688,7 @@ >File in upper dir >File in lower dir >unsetting option... -?ZTST_execchunk:14: no such file or directory: pathtestdir/findme +?(eval):14: no such file or directory: pathtestdir/findme setopt posixbuiltins command print foo @@ -698,7 +698,7 @@ 127:POSIX_BUILTINS option >foo >unsetting... -?ZTST_execchunk:5: command not found: print +?(eval):5: command not found: print # This option seems to be problematic. I don't quite know how it works. ## func() { @@ -707,7 +707,7 @@ ## } ## func ## 1:PRINT_EXIT_VALUE option -## ?ZTST_execchunk:2: exit 1 +## ?(eval):2: exit 1 setopt promptbang print -P ! @@ -817,13 +817,13 @@ (setopt restricted; unsetopt restricted) : 0:RESTRICTED option -?ZTST_execchunk:cd:1: restricted -?ZTST_execchunk:2: PATH: restricted -?ZTST_execchunk:3: /bin/ls: restricted -?ZTST_execchunk:hash:4: restricted: /bin/ls -?ZTST_execchunk:5: writing redirection not allowed in restricted mode -?ZTST_execchunk:exec:6: ls: restricted -?ZTST_execchunk:unsetopt:7: can't change option: restricted +?(eval):cd:1: restricted +?(eval):2: PATH: restricted +?(eval):3: /bin/ls: restricted +?(eval):hash:4: restricted: /bin/ls +?(eval):5: writing redirection not allowed in restricted mode +?(eval):exec:6: ls: restricted +?(eval):unsetopt:7: can't change option: restricted fn() { print =ls ={ls,} @@ -909,9 +909,9 @@ >nonsense >nonsense >nonsense -?fn:1: parse error near `print' -?fn:1: parse error near `print' -?fn:1: parse error near `print' +?(eval):1: parse error near `print' +?(eval):1: parse error near `print' +?(eval):1: parse error near `print' fn() { print -l $*; } setopt shwordsplit @@ -958,6 +958,6 @@ 0:XTRACE option >message >message -?+ZTST_execchunk:3> fn +?+(eval):3> fn ?+fn:0> print message -?+ZTST_execchunk:4> unsetopt xtrace +?+(eval):4> unsetopt xtrace Index: Test/E02xtrace.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/E02xtrace.ztst,v retrieving revision 1.2 diff -u -r1.2 E02xtrace.ztst --- Test/E02xtrace.ztst 2001/07/09 16:41:19 1.2 +++ Test/E02xtrace.ztst 2001/07/09 17:26:24 @@ -54,30 +54,30 @@ >Tracing: function 2>file >Tracing: source >Tracing: source 2>file ->+ZTST_execchunk:7> print Tracing: ( builtin ) 2>file ->+ZTST_execchunk:9> cat ->+ZTST_execchunk:11> print Tracing: { builtin } 2>file ->+ZTST_execchunk:13> cat ->+ZTST_execchunk:15> print Tracing: do builtin done 2>file ->+ZTST_execchunk:17> cat -?+ZTST_execchunk:2> print Tracing: builtin -?+ZTST_execchunk:3> print Tracing: builtin 2>file -?+ZTST_execchunk:4> cat -?+ZTST_execchunk:5> cat -?+ZTST_execchunk:6> print Tracing: ( builtin ) -?+ZTST_execchunk:8> cat -?+ZTST_execchunk:10> print Tracing: { builtin } -?+ZTST_execchunk:12> cat -?+ZTST_execchunk:14> print Tracing: do builtin done -?+ZTST_execchunk:16> cat -?+ZTST_execchunk:18> xtf Tracing: function +>+(eval):7> print Tracing: ( builtin ) 2>file +>+(eval):9> cat +>+(eval):11> print Tracing: { builtin } 2>file +>+(eval):13> cat +>+(eval):15> print Tracing: do builtin done 2>file +>+(eval):17> cat +?+(eval):2> print Tracing: builtin +?+(eval):3> print Tracing: builtin 2>file +?+(eval):4> cat +?+(eval):5> cat +?+(eval):6> print Tracing: ( builtin ) +?+(eval):8> cat +?+(eval):10> print Tracing: { builtin } +?+(eval):12> cat +?+(eval):14> print Tracing: do builtin done +?+(eval):16> cat +?+(eval):18> xtf Tracing: function ?+xtf:1> local regression_test_dummy_variable ?+xtf:2> print Tracing: function -?+ZTST_execchunk:19> xtf Tracing: function 2>file +?+(eval):19> xtf Tracing: function 2>file ?+xtf:1> local regression_test_dummy_variable ?+xtf:2> print Tracing: function 2>file -?+ZTST_execchunk:20> . ./xt.in Tracing: source +?+(eval):20> . ./xt.in Tracing: source ?+./xt.in:1> print Tracing: source -?+ZTST_execchunk:21> . ./xt.in Tracing: source 2>file +?+(eval):21> . ./xt.in Tracing: source 2>file ?+./xt.in:1> print Tracing: source 2>file -?+ZTST_execchunk:22> set +x +?+(eval):22> set +x Index: Test/V01zmodload.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/V01zmodload.ztst,v retrieving revision 1.4 diff -u -r1.4 V01zmodload.ztst --- Test/V01zmodload.ztst 2001/07/09 16:41:19 1.4 +++ Test/V01zmodload.ztst 2001/07/09 17:26:24 @@ -47,7 +47,7 @@ zmodload zsh/main 1:Test reloading an already-loaded module -?ZTST_execchunk:zmodload:1: module zsh/main already loaded. +?(eval):zmodload:1: module zsh/main already loaded. # Loop over the modules found above and attempt to load each one. Use # the -i flag in case dependencies cause multiple modules to be loaded, -- Peter Stephenson Software Engineer CSR Ltd., Unit 300, Science Park, Milton Road, Cambridge, CB4 0XL, UK Tel: +44 (0)1223 392070 ********************************************************************** The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer. **********************************************************************