zsh-workers
 help / color / mirror / code / Atom feed
* skipping assignment and function statements; Interactive comments
@ 2008-08-23  4:15 Rocky Bernstein
  2008-08-25 17:22 ` Peter Stephenson
  0 siblings, 1 reply; 3+ messages in thread
From: Rocky Bernstein @ 2008-08-23  4:15 UTC (permalink / raw)
  To: Zsh hackers list

I just added a skip command to zshdb (and committed to github), but it
seems that assignment statements and function definitions are not
really skipped.

Consider this example which is slightly modified from the regession
test that was put in when it was implimented:

  setopt localtraps localoptions debugbeforecmd
  trap '(( LINENO == 4 )) && setopt errexit' DEBUG
  x=three
  x=four  # Statement is supposed to be skipped
  print $LINENO five
  print x is $x

The output I get is:

  5 five
  x is four

And if the statement were a function definition, e.g.
  x() { return 4; }
I think x would get defined as a funciton

- - -
In tracking something else down I read this in zshoptions under
INTERACTIVE_COMMENTS:

   "Allow comments even in interactive shells".

I find this phrasing a little weird as it It seems to imply that one
never would want to write a comments, but sometimes one has to break
down and do it in an interactive shell. :-)

Perhaps the word "even" should be removed.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: skipping assignment and function statements; Interactive comments
  2008-08-23  4:15 skipping assignment and function statements; Interactive comments Rocky Bernstein
@ 2008-08-25 17:22 ` Peter Stephenson
  2008-08-26  2:59   ` Rocky Bernstein
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Stephenson @ 2008-08-25 17:22 UTC (permalink / raw)
  To: Zsh hackers list

On Sat, 23 Aug 2008 00:15:31 -0400
"Rocky Bernstein" <rocky.bernstein@gmail.com> wrote:
> I just added a skip command to zshdb (and committed to github), but it
> seems that assignment statements and function definitions are not
> really skipped.

Yes, thanks, there's yet another infuriating special case of the sort
that makes me wish I'd picked an easier project.

That's the third change here; the stuff with intrap is because it
doesn't detect that it's already inside a trap (and hence should skip
debugging) until it gets into dotrapargs(), and in this case it seems
neater not to go to the trouble.  This will be even more sensible when I
get around to regenerating the line to be debugged at this point.

Index: Src/exec.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/exec.c,v
retrieving revision 1.141
diff -u -r1.141 exec.c
--- Src/exec.c	22 Aug 2008 15:41:31 -0000	1.141
+++ Src/exec.c	25 Aug 2008 17:21:19 -0000
@@ -1068,7 +1068,7 @@
 		lineno = lnp1 - 1;
 	}
 
-	if (sigtrapped[SIGDEBUG] && isset(DEBUGBEFORECMD)) {
+	if (sigtrapped[SIGDEBUG] && isset(DEBUGBEFORECMD) && !intrap) {
 	    int oerrexit_opt = opts[ERREXIT];
 	    opts[ERREXIT] = 0;
 	    noerrexit = 1;
@@ -1086,11 +1086,12 @@
 	    donedebug = isset(ERREXIT) ? 2 : 1;
 	    opts[ERREXIT] = oerrexit_opt;
 	} else
-	    donedebug = 0;
+	    donedebug = intrap ? 1 : 0;
 
 	if (ltype & Z_SIMPLE) {
 	    next = state->pc + WC_LIST_SKIP(code);
-	    execsimple(state);
+	    if (donedebug != 2)
+		execsimple(state);
 	    state->pc = next;
 	    goto sublist_done;
 	}
Index: Test/C03traps.ztst
===================================================================
RCS file: /cvsroot/zsh/zsh/Test/C03traps.ztst,v
retrieving revision 1.14
diff -u -r1.14 C03traps.ztst
--- Test/C03traps.ztst	7 Aug 2008 16:25:16 -0000	1.14
+++ Test/C03traps.ztst	25 Aug 2008 17:21:19 -0000
@@ -415,6 +415,20 @@
 >3 three
 >5 five
 
+  # Assignments are a special case, since they use a simpler
+  # wordcode type, so we need to test skipping them separately.
+  fn() {
+    setopt localtraps localoptions debugbeforecmd
+    trap '(( LINENO == 4 )) && setopt errexit' DEBUG
+    x=three
+    x=four
+    print $LINENO $x
+    [[ -o errexit ]] && print "Hey, ERREXIT is set!"
+  }
+  fn
+1:Skip assignment from DEBUG trap
+>5 three
+
 %clean
 
   rm -f TRAPEXIT


-- 
Peter Stephenson <p.w.stephenson@ntlworld.com>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: skipping assignment and function statements; Interactive comments
  2008-08-25 17:22 ` Peter Stephenson
@ 2008-08-26  2:59   ` Rocky Bernstein
  0 siblings, 0 replies; 3+ messages in thread
From: Rocky Bernstein @ 2008-08-26  2:59 UTC (permalink / raw)
  To: Peter Stephenson; +Cc: Zsh hackers list

Thanks! Seems to work fine.

(Now I have to work out my own regression tests for on this ;-)

On Mon, Aug 25, 2008 at 1:22 PM, Peter Stephenson
<p.w.stephenson@ntlworld.com> wrote:
> On Sat, 23 Aug 2008 00:15:31 -0400
> "Rocky Bernstein" <rocky.bernstein@gmail.com> wrote:
>> I just added a skip command to zshdb (and committed to github), but it
>> seems that assignment statements and function definitions are not
>> really skipped.
>
> Yes, thanks, there's yet another infuriating special case of the sort
> that makes me wish I'd picked an easier project.
>
> That's the third change here; the stuff with intrap is because it
> doesn't detect that it's already inside a trap (and hence should skip
> debugging) until it gets into dotrapargs(), and in this case it seems
> neater not to go to the trouble.  This will be even more sensible when I
> get around to regenerating the line to be debugged at this point.
>
> Index: Src/exec.c
> ===================================================================
> RCS file: /cvsroot/zsh/zsh/Src/exec.c,v
> retrieving revision 1.141
> diff -u -r1.141 exec.c
> --- Src/exec.c  22 Aug 2008 15:41:31 -0000      1.141
> +++ Src/exec.c  25 Aug 2008 17:21:19 -0000
> @@ -1068,7 +1068,7 @@
>                lineno = lnp1 - 1;
>        }
>
> -       if (sigtrapped[SIGDEBUG] && isset(DEBUGBEFORECMD)) {
> +       if (sigtrapped[SIGDEBUG] && isset(DEBUGBEFORECMD) && !intrap) {
>            int oerrexit_opt = opts[ERREXIT];
>            opts[ERREXIT] = 0;
>            noerrexit = 1;
> @@ -1086,11 +1086,12 @@
>            donedebug = isset(ERREXIT) ? 2 : 1;
>            opts[ERREXIT] = oerrexit_opt;
>        } else
> -           donedebug = 0;
> +           donedebug = intrap ? 1 : 0;
>
>        if (ltype & Z_SIMPLE) {
>            next = state->pc + WC_LIST_SKIP(code);
> -           execsimple(state);
> +           if (donedebug != 2)
> +               execsimple(state);
>            state->pc = next;
>            goto sublist_done;
>        }
> Index: Test/C03traps.ztst
> ===================================================================
> RCS file: /cvsroot/zsh/zsh/Test/C03traps.ztst,v
> retrieving revision 1.14
> diff -u -r1.14 C03traps.ztst
> --- Test/C03traps.ztst  7 Aug 2008 16:25:16 -0000       1.14
> +++ Test/C03traps.ztst  25 Aug 2008 17:21:19 -0000
> @@ -415,6 +415,20 @@
>  >3 three
>  >5 five
>
> +  # Assignments are a special case, since they use a simpler
> +  # wordcode type, so we need to test skipping them separately.
> +  fn() {
> +    setopt localtraps localoptions debugbeforecmd
> +    trap '(( LINENO == 4 )) && setopt errexit' DEBUG
> +    x=three
> +    x=four
> +    print $LINENO $x
> +    [[ -o errexit ]] && print "Hey, ERREXIT is set!"
> +  }
> +  fn
> +1:Skip assignment from DEBUG trap
> +>5 three
> +
>  %clean
>
>   rm -f TRAPEXIT
>
>
> --
> Peter Stephenson <p.w.stephenson@ntlworld.com>
> Web page now at http://homepage.ntlworld.com/p.w.stephenson/
>


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2008-08-26  2:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-08-23  4:15 skipping assignment and function statements; Interactive comments Rocky Bernstein
2008-08-25 17:22 ` Peter Stephenson
2008-08-26  2:59   ` Rocky Bernstein

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).