NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bin/48843: sh(1): break/continue/return broken inside dot commands



The following reply was made to PR bin/48843; it has been noted by GNATS.

From: Jarmo Jaakkola <jarmo.jaakkola%roskakori.fi@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: 
Subject: Re: bin/48843: sh(1): break/continue/return broken inside dot
        commands
Date: Thu, 29 May 2014 03:26:45 +0300

 Here's a bunch test cases.
 
 The test cases are named with the pattern
     dotscope_cmd_cmdscope,
 where dotscope is the scope in which the dot command is and cmdscope
 is the scope where cmd is in the sourced file.
 
 These cases fail for the current shell and are fixed by the original
 patch:
     t_dotcmd:for_break_case, t_dotcmd:for_break_file,
     t_dotcmd:for_break_func, t_dotcmd:for_continue_case,
     t_dotcmd:for_continue_file, t_dotcmd:for_continue_func,
     t_dotcmd:func_return_case, t_dotcmd:func_return_compound,
     t_dotcmd:func_return_file, t_dotcmd:func_return_for,
     t_dotcmd:func_return_until, t_dotcmd:func_return_while,
     t_dotcmd:until_break_case, t_dotcmd:until_break_file,
     t_dotcmd:until_break_func, t_dotcmd:until_continue_case,
     t_dotcmd:until_continue_file, t_dotcmd:until_continue_func,
     t_dotcmd:while_break_case, t_dotcmd:while_break_file,
     t_dotcmd:while_break_func, t_dotcmd:while_continue_case,
     t_dotcmd:while_continue_file, t_dotcmd:while_continue_func
 
 Index: etc/mtree/NetBSD.dist.tests
 ===================================================================
 RCS file: /cvsroot/src/etc/mtree/NetBSD.dist.tests,v
 retrieving revision 1.60
 diff -u -p -u -r1.60 NetBSD.dist.tests
 --- etc/mtree/NetBSD.dist.tests        13 Feb 2012 21:03:06 -0000      1.60
 +++ etc/mtree/NetBSD.dist.tests        28 May 2014 23:59:58 -0000
 @@ -128,6 +128,10 @@
  ./usr/tests/atf/atf-run
  ./usr/tests/atf/atf-sh
  ./usr/tests/atf/test-programs
 +./usr/tests/bin
 +./usr/tests/bin/sh
 +./usr/tests/bin/sh/dotcmd
 +./usr/tests/bin/sh/dotcmd/out
  ./usr/tests/crypto
  ./usr/tests/crypto/libcrypto
  ./usr/tests/dev
 diff -urN nonexistant/Makefile tests/bin/Makefile
 --- nonexistant/Makefile       1970-01-01 02:00:00.000000000 +0200
 +++ tests/bin/Makefile 2014-05-27 14:45:36.000000000 +0300
 @@ -0,0 +1,10 @@
 +# $NetBSD$
 +#
 +
 +.include <bsd.own.mk>
 +
 +TESTSDIR=     ${TESTSBASE}/bin
 +
 +TESTS_SUBDIRS+=       sh
 +
 +.include <bsd.test.mk>
 Binary files nonexistant/sh/.Makefile.swp and tests/bin/sh/.Makefile.swp differ
 diff -urN nonexistant/sh/Makefile tests/bin/sh/Makefile
 --- nonexistant/sh/Makefile    1970-01-01 02:00:00.000000000 +0200
 +++ tests/bin/sh/Makefile      2014-05-27 23:51:40.000000000 +0300
 @@ -0,0 +1,10 @@
 +# $NetBSD$
 +#
 +
 +.include <bsd.own.mk>
 +
 +TESTSDIR = ${TESTSBASE}/bin/sh
 +
 +TESTS_SUBDIRS += dotcmd
 +
 +.include <bsd.test.mk>
 Binary files nonexistant/sh/dotcmd/.Makefile.swp and 
tests/bin/sh/dotcmd/.Makefile.swp differ
 Binary files nonexistant/sh/dotcmd/.t_dotcmd.sh.swp and 
tests/bin/sh/dotcmd/.t_dotcmd.sh.swp differ
 diff -urN nonexistant/sh/dotcmd/Makefile tests/bin/sh/dotcmd/Makefile
 --- nonexistant/sh/dotcmd/Makefile     1970-01-01 02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/Makefile       2014-05-28 13:29:14.000000000 +0300
 @@ -0,0 +1,40 @@
 +# $NetBSD$
 +#
 +
 +.include <bsd.own.mk>
 +
 +TESTSDIR = ${TESTSBASE}/bin/sh/dotcmd
 +
 +TESTS_SH = t_dotcmd
 +
 +FILESDIR = ${TESTSDIR}/out
 +
 +# Testing scripts: dotcmd in various scopes includes a file with
 +# return / break / continue in various scopes.
 +#
 +.for cmd_scope in case compound file for func subshell until while
 +. for cmd in return break continue
 +FILES += ${cmd}_${cmd_scope}
 +FILESDIR_${cmd}_${cmd_scope} = ${TESTSDIR}
 +FILESBUILD_${cmd}_${cmd_scope} = yes
 +
 +${cmd}_${cmd_scope}: scoped_command
 +      ${.CURDIR}/scoped_command '${cmd_scope}' '${cmd}' '${cmd}' \
 +              >'${.TARGET}'
 +
 +.  for dot_scope in case compound file for func subshell until while
 +FILES += \
 +      ${dot_scope}_${cmd}_${cmd_scope} \
 +      out/${dot_scope}_${cmd}_${cmd_scope}.out
 +FILESDIR_${dot_scope}_${cmd}_${cmd_scope} = ${TESTSDIR}
 +FILESBUILD_${dot_scope}_${cmd}_${cmd_scope} = yes
 +FILESMODE_${dot_scope}_${cmd}_${cmd_scope} = ${BINMODE}
 +
 +${dot_scope}_${cmd}_${cmd_scope}: scoped_command
 +      ${.CURDIR}/scoped_command '${dot_scope}' \
 +              '. "${cmd}_${cmd_scope}"' 'dotcmd' 'dotcmd' >'${.TARGET}'
 +.  endfor
 +. endfor
 +.endfor
 +
 +.include <bsd.test.mk>
 diff -urN nonexistant/sh/dotcmd/out/case_break_case.out 
tests/bin/sh/dotcmd/out/case_break_case.out
 --- nonexistant/sh/dotcmd/out/case_break_case.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_break_case.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +before case
 +before break
 +after break, return value: 0
 +after case
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_break_compound.out 
tests/bin/sh/dotcmd/out/case_break_compound.out
 --- nonexistant/sh/dotcmd/out/case_break_compound.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_break_compound.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +compound start
 +before break
 +after break, return value: 0
 +compound end
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_break_file.out 
tests/bin/sh/dotcmd/out/case_break_file.out
 --- nonexistant/sh/dotcmd/out/case_break_file.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_break_file.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before case
 +before dotcmd
 +before break
 +after break, return value: 0
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_break_for.out 
tests/bin/sh/dotcmd/out/case_break_for.out
 --- nonexistant/sh/dotcmd/out/case_break_for.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_break_for.out 2014-05-28 16:45:07.000000000 
+0300
 @@ -0,0 +1,7 @@
 +before case
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_break_func.out 
tests/bin/sh/dotcmd/out/case_break_func.out
 --- nonexistant/sh/dotcmd/out/case_break_func.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_break_func.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +before function
 +before break
 +after break
 +after function
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_break_subshell.out 
tests/bin/sh/dotcmd/out/case_break_subshell.out
 --- nonexistant/sh/dotcmd/out/case_break_subshell.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_break_subshell.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +subshell start
 +before break
 +after break, return value: 0
 +subshell end
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_break_until.out 
tests/bin/sh/dotcmd/out/case_break_until.out
 --- nonexistant/sh/dotcmd/out/case_break_until.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_break_until.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,7 @@
 +before case
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_break_while.out 
tests/bin/sh/dotcmd/out/case_break_while.out
 --- nonexistant/sh/dotcmd/out/case_break_while.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_break_while.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,7 @@
 +before case
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_continue_case.out 
tests/bin/sh/dotcmd/out/case_continue_case.out
 --- nonexistant/sh/dotcmd/out/case_continue_case.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_continue_case.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +before case
 +before continue
 +after continue, return value: 0
 +after case
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_continue_compound.out 
tests/bin/sh/dotcmd/out/case_continue_compound.out
 --- nonexistant/sh/dotcmd/out/case_continue_compound.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_continue_compound.out 2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +compound start
 +before continue
 +after continue, return value: 0
 +compound end
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_continue_file.out 
tests/bin/sh/dotcmd/out/case_continue_file.out
 --- nonexistant/sh/dotcmd/out/case_continue_file.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_continue_file.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before case
 +before dotcmd
 +before continue
 +after continue, return value: 0
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_continue_for.out 
tests/bin/sh/dotcmd/out/case_continue_for.out
 --- nonexistant/sh/dotcmd/out/case_continue_for.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_continue_for.out      2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_continue_func.out 
tests/bin/sh/dotcmd/out/case_continue_func.out
 --- nonexistant/sh/dotcmd/out/case_continue_func.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_continue_func.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +before function
 +before continue
 +after continue
 +after function
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_continue_subshell.out 
tests/bin/sh/dotcmd/out/case_continue_subshell.out
 --- nonexistant/sh/dotcmd/out/case_continue_subshell.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_continue_subshell.out 2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +subshell start
 +before continue
 +after continue, return value: 0
 +subshell end
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_continue_until.out 
tests/bin/sh/dotcmd/out/case_continue_until.out
 --- nonexistant/sh/dotcmd/out/case_continue_until.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_continue_until.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_continue_while.out 
tests/bin/sh/dotcmd/out/case_continue_while.out
 --- nonexistant/sh/dotcmd/out/case_continue_while.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_continue_while.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before case
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_return_case.out 
tests/bin/sh/dotcmd/out/case_return_case.out
 --- nonexistant/sh/dotcmd/out/case_return_case.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_return_case.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before case
 +before dotcmd
 +before case
 +before return
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_return_compound.out 
tests/bin/sh/dotcmd/out/case_return_compound.out
 --- nonexistant/sh/dotcmd/out/case_return_compound.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_return_compound.out   2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before case
 +before dotcmd
 +compound start
 +before return
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_return_file.out 
tests/bin/sh/dotcmd/out/case_return_file.out
 --- nonexistant/sh/dotcmd/out/case_return_file.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_return_file.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,5 @@
 +before case
 +before dotcmd
 +before return
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_return_for.out 
tests/bin/sh/dotcmd/out/case_return_for.out
 --- nonexistant/sh/dotcmd/out/case_return_for.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_return_for.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before case
 +before dotcmd
 +before for
 +before return
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_return_func.out 
tests/bin/sh/dotcmd/out/case_return_func.out
 --- nonexistant/sh/dotcmd/out/case_return_func.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_return_func.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,7 @@
 +before case
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_return_subshell.out 
tests/bin/sh/dotcmd/out/case_return_subshell.out
 --- nonexistant/sh/dotcmd/out/case_return_subshell.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_return_subshell.out   2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before case
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_return_until.out 
tests/bin/sh/dotcmd/out/case_return_until.out
 --- nonexistant/sh/dotcmd/out/case_return_until.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_return_until.out      2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before case
 +before dotcmd
 +before until
 +before return
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/case_return_while.out 
tests/bin/sh/dotcmd/out/case_return_while.out
 --- nonexistant/sh/dotcmd/out/case_return_while.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/case_return_while.out      2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before case
 +before dotcmd
 +before while
 +before return
 +after dotcmd, return value: 0
 +after case
 diff -urN nonexistant/sh/dotcmd/out/compound_break_case.out 
tests/bin/sh/dotcmd/out/compound_break_case.out
 --- nonexistant/sh/dotcmd/out/compound_break_case.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_break_case.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +before case
 +before break
 +after break, return value: 0
 +after case
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_break_compound.out 
tests/bin/sh/dotcmd/out/compound_break_compound.out
 --- nonexistant/sh/dotcmd/out/compound_break_compound.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_break_compound.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +compound start
 +before break
 +after break, return value: 0
 +compound end
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_break_file.out 
tests/bin/sh/dotcmd/out/compound_break_file.out
 --- nonexistant/sh/dotcmd/out/compound_break_file.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_break_file.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +compound start
 +before dotcmd
 +before break
 +after break, return value: 0
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_break_for.out 
tests/bin/sh/dotcmd/out/compound_break_for.out
 --- nonexistant/sh/dotcmd/out/compound_break_for.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_break_for.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,7 @@
 +compound start
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_break_func.out 
tests/bin/sh/dotcmd/out/compound_break_func.out
 --- nonexistant/sh/dotcmd/out/compound_break_func.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_break_func.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +before function
 +before break
 +after break
 +after function
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_break_subshell.out 
tests/bin/sh/dotcmd/out/compound_break_subshell.out
 --- nonexistant/sh/dotcmd/out/compound_break_subshell.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_break_subshell.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +subshell start
 +before break
 +after break, return value: 0
 +subshell end
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_break_until.out 
tests/bin/sh/dotcmd/out/compound_break_until.out
 --- nonexistant/sh/dotcmd/out/compound_break_until.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_break_until.out   2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,7 @@
 +compound start
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_break_while.out 
tests/bin/sh/dotcmd/out/compound_break_while.out
 --- nonexistant/sh/dotcmd/out/compound_break_while.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_break_while.out   2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,7 @@
 +compound start
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_continue_case.out 
tests/bin/sh/dotcmd/out/compound_continue_case.out
 --- nonexistant/sh/dotcmd/out/compound_continue_case.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_continue_case.out 2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +before case
 +before continue
 +after continue, return value: 0
 +after case
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_continue_compound.out 
tests/bin/sh/dotcmd/out/compound_continue_compound.out
 --- nonexistant/sh/dotcmd/out/compound_continue_compound.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_continue_compound.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +compound start
 +before continue
 +after continue, return value: 0
 +compound end
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_continue_file.out 
tests/bin/sh/dotcmd/out/compound_continue_file.out
 --- nonexistant/sh/dotcmd/out/compound_continue_file.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_continue_file.out 2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +compound start
 +before dotcmd
 +before continue
 +after continue, return value: 0
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_continue_for.out 
tests/bin/sh/dotcmd/out/compound_continue_for.out
 --- nonexistant/sh/dotcmd/out/compound_continue_for.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_continue_for.out  2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_continue_func.out 
tests/bin/sh/dotcmd/out/compound_continue_func.out
 --- nonexistant/sh/dotcmd/out/compound_continue_func.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_continue_func.out 2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +before function
 +before continue
 +after continue
 +after function
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_continue_subshell.out 
tests/bin/sh/dotcmd/out/compound_continue_subshell.out
 --- nonexistant/sh/dotcmd/out/compound_continue_subshell.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_continue_subshell.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +subshell start
 +before continue
 +after continue, return value: 0
 +subshell end
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_continue_until.out 
tests/bin/sh/dotcmd/out/compound_continue_until.out
 --- nonexistant/sh/dotcmd/out/compound_continue_until.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_continue_until.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_continue_while.out 
tests/bin/sh/dotcmd/out/compound_continue_while.out
 --- nonexistant/sh/dotcmd/out/compound_continue_while.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_continue_while.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +compound start
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_return_case.out 
tests/bin/sh/dotcmd/out/compound_return_case.out
 --- nonexistant/sh/dotcmd/out/compound_return_case.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_return_case.out   2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +compound start
 +before dotcmd
 +before case
 +before return
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_return_compound.out 
tests/bin/sh/dotcmd/out/compound_return_compound.out
 --- nonexistant/sh/dotcmd/out/compound_return_compound.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_return_compound.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +compound start
 +before dotcmd
 +compound start
 +before return
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_return_file.out 
tests/bin/sh/dotcmd/out/compound_return_file.out
 --- nonexistant/sh/dotcmd/out/compound_return_file.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_return_file.out   2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,5 @@
 +compound start
 +before dotcmd
 +before return
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_return_for.out 
tests/bin/sh/dotcmd/out/compound_return_for.out
 --- nonexistant/sh/dotcmd/out/compound_return_for.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_return_for.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +compound start
 +before dotcmd
 +before for
 +before return
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_return_func.out 
tests/bin/sh/dotcmd/out/compound_return_func.out
 --- nonexistant/sh/dotcmd/out/compound_return_func.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_return_func.out   2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,7 @@
 +compound start
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_return_subshell.out 
tests/bin/sh/dotcmd/out/compound_return_subshell.out
 --- nonexistant/sh/dotcmd/out/compound_return_subshell.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_return_subshell.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +compound start
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_return_until.out 
tests/bin/sh/dotcmd/out/compound_return_until.out
 --- nonexistant/sh/dotcmd/out/compound_return_until.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_return_until.out  2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +compound start
 +before dotcmd
 +before until
 +before return
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/compound_return_while.out 
tests/bin/sh/dotcmd/out/compound_return_while.out
 --- nonexistant/sh/dotcmd/out/compound_return_while.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/compound_return_while.out  2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +compound start
 +before dotcmd
 +before while
 +before return
 +after dotcmd, return value: 0
 +compound end
 diff -urN nonexistant/sh/dotcmd/out/file_break_case.out 
tests/bin/sh/dotcmd/out/file_break_case.out
 --- nonexistant/sh/dotcmd/out/file_break_case.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_break_case.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +before case
 +before break
 +after break, return value: 0
 +after case
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_break_compound.out 
tests/bin/sh/dotcmd/out/file_break_compound.out
 --- nonexistant/sh/dotcmd/out/file_break_compound.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_break_compound.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +compound start
 +before break
 +after break, return value: 0
 +compound end
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_break_file.out 
tests/bin/sh/dotcmd/out/file_break_file.out
 --- nonexistant/sh/dotcmd/out/file_break_file.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_break_file.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,4 @@
 +before dotcmd
 +before break
 +after break, return value: 0
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_break_for.out 
tests/bin/sh/dotcmd/out/file_break_for.out
 --- nonexistant/sh/dotcmd/out/file_break_for.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_break_for.out 2014-05-28 16:45:07.000000000 
+0300
 @@ -0,0 +1,5 @@
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_break_func.out 
tests/bin/sh/dotcmd/out/file_break_func.out
 --- nonexistant/sh/dotcmd/out/file_break_func.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_break_func.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +before function
 +before break
 +after break
 +after function
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_break_subshell.out 
tests/bin/sh/dotcmd/out/file_break_subshell.out
 --- nonexistant/sh/dotcmd/out/file_break_subshell.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_break_subshell.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +subshell start
 +before break
 +after break, return value: 0
 +subshell end
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_break_until.out 
tests/bin/sh/dotcmd/out/file_break_until.out
 --- nonexistant/sh/dotcmd/out/file_break_until.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_break_until.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,5 @@
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_break_while.out 
tests/bin/sh/dotcmd/out/file_break_while.out
 --- nonexistant/sh/dotcmd/out/file_break_while.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_break_while.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,5 @@
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_continue_case.out 
tests/bin/sh/dotcmd/out/file_continue_case.out
 --- nonexistant/sh/dotcmd/out/file_continue_case.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_continue_case.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +before case
 +before continue
 +after continue, return value: 0
 +after case
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_continue_compound.out 
tests/bin/sh/dotcmd/out/file_continue_compound.out
 --- nonexistant/sh/dotcmd/out/file_continue_compound.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_continue_compound.out 2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +compound start
 +before continue
 +after continue, return value: 0
 +compound end
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_continue_file.out 
tests/bin/sh/dotcmd/out/file_continue_file.out
 --- nonexistant/sh/dotcmd/out/file_continue_file.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_continue_file.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,4 @@
 +before dotcmd
 +before continue
 +after continue, return value: 0
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_continue_for.out 
tests/bin/sh/dotcmd/out/file_continue_for.out
 --- nonexistant/sh/dotcmd/out/file_continue_for.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_continue_for.out      2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_continue_func.out 
tests/bin/sh/dotcmd/out/file_continue_func.out
 --- nonexistant/sh/dotcmd/out/file_continue_func.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_continue_func.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +before function
 +before continue
 +after continue
 +after function
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_continue_subshell.out 
tests/bin/sh/dotcmd/out/file_continue_subshell.out
 --- nonexistant/sh/dotcmd/out/file_continue_subshell.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_continue_subshell.out 2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +subshell start
 +before continue
 +after continue, return value: 0
 +subshell end
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_continue_until.out 
tests/bin/sh/dotcmd/out/file_continue_until.out
 --- nonexistant/sh/dotcmd/out/file_continue_until.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_continue_until.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_continue_while.out 
tests/bin/sh/dotcmd/out/file_continue_while.out
 --- nonexistant/sh/dotcmd/out/file_continue_while.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_continue_while.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_return_case.out 
tests/bin/sh/dotcmd/out/file_return_case.out
 --- nonexistant/sh/dotcmd/out/file_return_case.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_return_case.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,4 @@
 +before dotcmd
 +before case
 +before return
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_return_compound.out 
tests/bin/sh/dotcmd/out/file_return_compound.out
 --- nonexistant/sh/dotcmd/out/file_return_compound.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_return_compound.out   2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,4 @@
 +before dotcmd
 +compound start
 +before return
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_return_file.out 
tests/bin/sh/dotcmd/out/file_return_file.out
 --- nonexistant/sh/dotcmd/out/file_return_file.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_return_file.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,3 @@
 +before dotcmd
 +before return
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_return_for.out 
tests/bin/sh/dotcmd/out/file_return_for.out
 --- nonexistant/sh/dotcmd/out/file_return_for.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_return_for.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,4 @@
 +before dotcmd
 +before for
 +before return
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_return_func.out 
tests/bin/sh/dotcmd/out/file_return_func.out
 --- nonexistant/sh/dotcmd/out/file_return_func.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_return_func.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,5 @@
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_return_subshell.out 
tests/bin/sh/dotcmd/out/file_return_subshell.out
 --- nonexistant/sh/dotcmd/out/file_return_subshell.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_return_subshell.out   2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,4 @@
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_return_until.out 
tests/bin/sh/dotcmd/out/file_return_until.out
 --- nonexistant/sh/dotcmd/out/file_return_until.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_return_until.out      2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,4 @@
 +before dotcmd
 +before until
 +before return
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/file_return_while.out 
tests/bin/sh/dotcmd/out/file_return_while.out
 --- nonexistant/sh/dotcmd/out/file_return_while.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/file_return_while.out      2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,4 @@
 +before dotcmd
 +before while
 +before return
 +after dotcmd, return value: 0
 diff -urN nonexistant/sh/dotcmd/out/for_break_case.out 
tests/bin/sh/dotcmd/out/for_break_case.out
 --- nonexistant/sh/dotcmd/out/for_break_case.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_break_case.out 2014-05-28 16:45:07.000000000 
+0300
 @@ -0,0 +1,5 @@
 +before for
 +before dotcmd
 +before case
 +before break
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_break_compound.out 
tests/bin/sh/dotcmd/out/for_break_compound.out
 --- nonexistant/sh/dotcmd/out/for_break_compound.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_break_compound.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,5 @@
 +before for
 +before dotcmd
 +compound start
 +before break
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_break_file.out 
tests/bin/sh/dotcmd/out/for_break_file.out
 --- nonexistant/sh/dotcmd/out/for_break_file.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_break_file.out 2014-05-28 16:45:07.000000000 
+0300
 @@ -0,0 +1,4 @@
 +before for
 +before dotcmd
 +before break
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_break_for.out 
tests/bin/sh/dotcmd/out/for_break_for.out
 --- nonexistant/sh/dotcmd/out/for_break_for.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_break_for.out  2014-05-28 16:45:07.000000000 
+0300
 @@ -0,0 +1,12 @@
 +before for
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd, return value: 0
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_break_func.out 
tests/bin/sh/dotcmd/out/for_break_func.out
 --- nonexistant/sh/dotcmd/out/for_break_func.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_break_func.out 2014-05-28 16:45:07.000000000 
+0300
 @@ -0,0 +1,5 @@
 +before for
 +before dotcmd
 +before function
 +before break
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_break_subshell.out 
tests/bin/sh/dotcmd/out/for_break_subshell.out
 --- nonexistant/sh/dotcmd/out/for_break_subshell.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_break_subshell.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,10 @@
 +before for
 +before dotcmd
 +subshell start
 +before break
 +after dotcmd, return value: 0
 +before dotcmd
 +subshell start
 +before break
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_break_until.out 
tests/bin/sh/dotcmd/out/for_break_until.out
 --- nonexistant/sh/dotcmd/out/for_break_until.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_break_until.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,12 @@
 +before for
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd, return value: 0
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_break_while.out 
tests/bin/sh/dotcmd/out/for_break_while.out
 --- nonexistant/sh/dotcmd/out/for_break_while.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_break_while.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,12 @@
 +before for
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd, return value: 0
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_continue_case.out 
tests/bin/sh/dotcmd/out/for_continue_case.out
 --- nonexistant/sh/dotcmd/out/for_continue_case.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_continue_case.out      2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before for
 +before dotcmd
 +before case
 +before continue
 +before dotcmd
 +before case
 +before continue
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_continue_compound.out 
tests/bin/sh/dotcmd/out/for_continue_compound.out
 --- nonexistant/sh/dotcmd/out/for_continue_compound.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_continue_compound.out  2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before for
 +before dotcmd
 +compound start
 +before continue
 +before dotcmd
 +compound start
 +before continue
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_continue_file.out 
tests/bin/sh/dotcmd/out/for_continue_file.out
 --- nonexistant/sh/dotcmd/out/for_continue_file.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_continue_file.out      2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before for
 +before dotcmd
 +before continue
 +before dotcmd
 +before continue
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_continue_for.out 
tests/bin/sh/dotcmd/out/for_continue_for.out
 --- nonexistant/sh/dotcmd/out/for_continue_for.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_continue_for.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,14 @@
 +before for
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd, return value: 0
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_continue_func.out 
tests/bin/sh/dotcmd/out/for_continue_func.out
 --- nonexistant/sh/dotcmd/out/for_continue_func.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_continue_func.out      2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before for
 +before dotcmd
 +before function
 +before continue
 +before dotcmd
 +before function
 +before continue
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_continue_subshell.out 
tests/bin/sh/dotcmd/out/for_continue_subshell.out
 --- nonexistant/sh/dotcmd/out/for_continue_subshell.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_continue_subshell.out  2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,10 @@
 +before for
 +before dotcmd
 +subshell start
 +before continue
 +after dotcmd, return value: 0
 +before dotcmd
 +subshell start
 +before continue
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_continue_until.out 
tests/bin/sh/dotcmd/out/for_continue_until.out
 --- nonexistant/sh/dotcmd/out/for_continue_until.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_continue_until.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,14 @@
 +before for
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd, return value: 0
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_continue_while.out 
tests/bin/sh/dotcmd/out/for_continue_while.out
 --- nonexistant/sh/dotcmd/out/for_continue_while.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_continue_while.out     2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,14 @@
 +before for
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd, return value: 0
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_return_case.out 
tests/bin/sh/dotcmd/out/for_return_case.out
 --- nonexistant/sh/dotcmd/out/for_return_case.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_return_case.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,10 @@
 +before for
 +before dotcmd
 +before case
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before case
 +before return
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_return_compound.out 
tests/bin/sh/dotcmd/out/for_return_compound.out
 --- nonexistant/sh/dotcmd/out/for_return_compound.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_return_compound.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,10 @@
 +before for
 +before dotcmd
 +compound start
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +compound start
 +before return
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_return_file.out 
tests/bin/sh/dotcmd/out/for_return_file.out
 --- nonexistant/sh/dotcmd/out/for_return_file.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_return_file.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before for
 +before dotcmd
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before return
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_return_for.out 
tests/bin/sh/dotcmd/out/for_return_for.out
 --- nonexistant/sh/dotcmd/out/for_return_for.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_return_for.out 2014-05-28 16:45:07.000000000 
+0300
 @@ -0,0 +1,10 @@
 +before for
 +before dotcmd
 +before for
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before for
 +before return
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_return_func.out 
tests/bin/sh/dotcmd/out/for_return_func.out
 --- nonexistant/sh/dotcmd/out/for_return_func.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_return_func.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,12 @@
 +before for
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd, return value: 0
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_return_subshell.out 
tests/bin/sh/dotcmd/out/for_return_subshell.out
 --- nonexistant/sh/dotcmd/out/for_return_subshell.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_return_subshell.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,10 @@
 +before for
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_return_until.out 
tests/bin/sh/dotcmd/out/for_return_until.out
 --- nonexistant/sh/dotcmd/out/for_return_until.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_return_until.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,10 @@
 +before for
 +before dotcmd
 +before until
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before until
 +before return
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/for_return_while.out 
tests/bin/sh/dotcmd/out/for_return_while.out
 --- nonexistant/sh/dotcmd/out/for_return_while.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/for_return_while.out       2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,10 @@
 +before for
 +before dotcmd
 +before while
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before while
 +before return
 +after dotcmd, return value: 0
 +after for
 diff -urN nonexistant/sh/dotcmd/out/func_break_case.out 
tests/bin/sh/dotcmd/out/func_break_case.out
 --- nonexistant/sh/dotcmd/out/func_break_case.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_break_case.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +before case
 +before break
 +after break, return value: 0
 +after case
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_break_compound.out 
tests/bin/sh/dotcmd/out/func_break_compound.out
 --- nonexistant/sh/dotcmd/out/func_break_compound.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_break_compound.out    2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +compound start
 +before break
 +after break, return value: 0
 +compound end
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_break_file.out 
tests/bin/sh/dotcmd/out/func_break_file.out
 --- nonexistant/sh/dotcmd/out/func_break_file.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_break_file.out        2014-05-28 
16:45:07.000000000 +0300
 @@ -0,0 +1,6 @@
 +before function
 +before dotcmd
 +before break
 +after break, return value: 0
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_break_for.out 
tests/bin/sh/dotcmd/out/func_break_for.out
 --- nonexistant/sh/dotcmd/out/func_break_for.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_break_for.out 2014-05-28 16:45:07.000000000 
+0300
 @@ -0,0 +1,7 @@
 +before function
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_break_func.out 
tests/bin/sh/dotcmd/out/func_break_func.out
 --- nonexistant/sh/dotcmd/out/func_break_func.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_break_func.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +before function
 +before break
 +after break
 +after function
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_break_subshell.out 
tests/bin/sh/dotcmd/out/func_break_subshell.out
 --- nonexistant/sh/dotcmd/out/func_break_subshell.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_break_subshell.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +subshell start
 +before break
 +after break, return value: 0
 +subshell end
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_break_until.out 
tests/bin/sh/dotcmd/out/func_break_until.out
 --- nonexistant/sh/dotcmd/out/func_break_until.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_break_until.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,7 @@
 +before function
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_break_while.out 
tests/bin/sh/dotcmd/out/func_break_while.out
 --- nonexistant/sh/dotcmd/out/func_break_while.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_break_while.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,7 @@
 +before function
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_continue_case.out 
tests/bin/sh/dotcmd/out/func_continue_case.out
 --- nonexistant/sh/dotcmd/out/func_continue_case.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_continue_case.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +before case
 +before continue
 +after continue, return value: 0
 +after case
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_continue_compound.out 
tests/bin/sh/dotcmd/out/func_continue_compound.out
 --- nonexistant/sh/dotcmd/out/func_continue_compound.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_continue_compound.out 2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +compound start
 +before continue
 +after continue, return value: 0
 +compound end
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_continue_file.out 
tests/bin/sh/dotcmd/out/func_continue_file.out
 --- nonexistant/sh/dotcmd/out/func_continue_file.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_continue_file.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +before function
 +before dotcmd
 +before continue
 +after continue, return value: 0
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_continue_for.out 
tests/bin/sh/dotcmd/out/func_continue_for.out
 --- nonexistant/sh/dotcmd/out/func_continue_for.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_continue_for.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_continue_func.out 
tests/bin/sh/dotcmd/out/func_continue_func.out
 --- nonexistant/sh/dotcmd/out/func_continue_func.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_continue_func.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +before function
 +before continue
 +after continue
 +after function
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_continue_subshell.out 
tests/bin/sh/dotcmd/out/func_continue_subshell.out
 --- nonexistant/sh/dotcmd/out/func_continue_subshell.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_continue_subshell.out 2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +subshell start
 +before continue
 +after continue, return value: 0
 +subshell end
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_continue_until.out 
tests/bin/sh/dotcmd/out/func_continue_until.out
 --- nonexistant/sh/dotcmd/out/func_continue_until.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_continue_until.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_continue_while.out 
tests/bin/sh/dotcmd/out/func_continue_while.out
 --- nonexistant/sh/dotcmd/out/func_continue_while.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_continue_while.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before function
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_return_case.out 
tests/bin/sh/dotcmd/out/func_return_case.out
 --- nonexistant/sh/dotcmd/out/func_return_case.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_return_case.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +before function
 +before dotcmd
 +before case
 +before return
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_return_compound.out 
tests/bin/sh/dotcmd/out/func_return_compound.out
 --- nonexistant/sh/dotcmd/out/func_return_compound.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_return_compound.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +before function
 +before dotcmd
 +compound start
 +before return
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_return_file.out 
tests/bin/sh/dotcmd/out/func_return_file.out
 --- nonexistant/sh/dotcmd/out/func_return_file.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_return_file.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,5 @@
 +before function
 +before dotcmd
 +before return
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_return_for.out 
tests/bin/sh/dotcmd/out/func_return_for.out
 --- nonexistant/sh/dotcmd/out/func_return_for.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_return_for.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +before function
 +before dotcmd
 +before for
 +before return
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_return_func.out 
tests/bin/sh/dotcmd/out/func_return_func.out
 --- nonexistant/sh/dotcmd/out/func_return_func.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_return_func.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,7 @@
 +before function
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_return_subshell.out 
tests/bin/sh/dotcmd/out/func_return_subshell.out
 --- nonexistant/sh/dotcmd/out/func_return_subshell.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_return_subshell.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +before function
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_return_until.out 
tests/bin/sh/dotcmd/out/func_return_until.out
 --- nonexistant/sh/dotcmd/out/func_return_until.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_return_until.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +before function
 +before dotcmd
 +before until
 +before return
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/func_return_while.out 
tests/bin/sh/dotcmd/out/func_return_while.out
 --- nonexistant/sh/dotcmd/out/func_return_while.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/func_return_while.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +before function
 +before dotcmd
 +before while
 +before return
 +after dotcmd
 +after function
 diff -urN nonexistant/sh/dotcmd/out/subshell_break_case.out 
tests/bin/sh/dotcmd/out/subshell_break_case.out
 --- nonexistant/sh/dotcmd/out/subshell_break_case.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_break_case.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +before case
 +before break
 +after break, return value: 0
 +after case
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_break_compound.out 
tests/bin/sh/dotcmd/out/subshell_break_compound.out
 --- nonexistant/sh/dotcmd/out/subshell_break_compound.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_break_compound.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +compound start
 +before break
 +after break, return value: 0
 +compound end
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_break_file.out 
tests/bin/sh/dotcmd/out/subshell_break_file.out
 --- nonexistant/sh/dotcmd/out/subshell_break_file.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_break_file.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +subshell start
 +before dotcmd
 +before break
 +after break, return value: 0
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_break_for.out 
tests/bin/sh/dotcmd/out/subshell_break_for.out
 --- nonexistant/sh/dotcmd/out/subshell_break_for.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_break_for.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,7 @@
 +subshell start
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_break_func.out 
tests/bin/sh/dotcmd/out/subshell_break_func.out
 --- nonexistant/sh/dotcmd/out/subshell_break_func.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_break_func.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +before function
 +before break
 +after break
 +after function
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_break_subshell.out 
tests/bin/sh/dotcmd/out/subshell_break_subshell.out
 --- nonexistant/sh/dotcmd/out/subshell_break_subshell.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_break_subshell.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +subshell start
 +before break
 +after break, return value: 0
 +subshell end
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_break_until.out 
tests/bin/sh/dotcmd/out/subshell_break_until.out
 --- nonexistant/sh/dotcmd/out/subshell_break_until.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_break_until.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,7 @@
 +subshell start
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_break_while.out 
tests/bin/sh/dotcmd/out/subshell_break_while.out
 --- nonexistant/sh/dotcmd/out/subshell_break_while.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_break_while.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,7 @@
 +subshell start
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_continue_case.out 
tests/bin/sh/dotcmd/out/subshell_continue_case.out
 --- nonexistant/sh/dotcmd/out/subshell_continue_case.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_continue_case.out 2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +before case
 +before continue
 +after continue, return value: 0
 +after case
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_continue_compound.out 
tests/bin/sh/dotcmd/out/subshell_continue_compound.out
 --- nonexistant/sh/dotcmd/out/subshell_continue_compound.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_continue_compound.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +compound start
 +before continue
 +after continue, return value: 0
 +compound end
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_continue_file.out 
tests/bin/sh/dotcmd/out/subshell_continue_file.out
 --- nonexistant/sh/dotcmd/out/subshell_continue_file.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_continue_file.out 2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +subshell start
 +before dotcmd
 +before continue
 +after continue, return value: 0
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_continue_for.out 
tests/bin/sh/dotcmd/out/subshell_continue_for.out
 --- nonexistant/sh/dotcmd/out/subshell_continue_for.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_continue_for.out  2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_continue_func.out 
tests/bin/sh/dotcmd/out/subshell_continue_func.out
 --- nonexistant/sh/dotcmd/out/subshell_continue_func.out       1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_continue_func.out 2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +before function
 +before continue
 +after continue
 +after function
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_continue_subshell.out 
tests/bin/sh/dotcmd/out/subshell_continue_subshell.out
 --- nonexistant/sh/dotcmd/out/subshell_continue_subshell.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_continue_subshell.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +subshell start
 +before continue
 +after continue, return value: 0
 +subshell end
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_continue_until.out 
tests/bin/sh/dotcmd/out/subshell_continue_until.out
 --- nonexistant/sh/dotcmd/out/subshell_continue_until.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_continue_until.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_continue_while.out 
tests/bin/sh/dotcmd/out/subshell_continue_while.out
 --- nonexistant/sh/dotcmd/out/subshell_continue_while.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_continue_while.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +subshell start
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_return_case.out 
tests/bin/sh/dotcmd/out/subshell_return_case.out
 --- nonexistant/sh/dotcmd/out/subshell_return_case.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_return_case.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +subshell start
 +before dotcmd
 +before case
 +before return
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_return_compound.out 
tests/bin/sh/dotcmd/out/subshell_return_compound.out
 --- nonexistant/sh/dotcmd/out/subshell_return_compound.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_return_compound.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +subshell start
 +before dotcmd
 +compound start
 +before return
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_return_file.out 
tests/bin/sh/dotcmd/out/subshell_return_file.out
 --- nonexistant/sh/dotcmd/out/subshell_return_file.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_return_file.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,5 @@
 +subshell start
 +before dotcmd
 +before return
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_return_for.out 
tests/bin/sh/dotcmd/out/subshell_return_for.out
 --- nonexistant/sh/dotcmd/out/subshell_return_for.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_return_for.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +subshell start
 +before dotcmd
 +before for
 +before return
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_return_func.out 
tests/bin/sh/dotcmd/out/subshell_return_func.out
 --- nonexistant/sh/dotcmd/out/subshell_return_func.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_return_func.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,7 @@
 +subshell start
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_return_subshell.out 
tests/bin/sh/dotcmd/out/subshell_return_subshell.out
 --- nonexistant/sh/dotcmd/out/subshell_return_subshell.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_return_subshell.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +subshell start
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_return_until.out 
tests/bin/sh/dotcmd/out/subshell_return_until.out
 --- nonexistant/sh/dotcmd/out/subshell_return_until.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_return_until.out  2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +subshell start
 +before dotcmd
 +before until
 +before return
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/subshell_return_while.out 
tests/bin/sh/dotcmd/out/subshell_return_while.out
 --- nonexistant/sh/dotcmd/out/subshell_return_while.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/subshell_return_while.out  2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +subshell start
 +before dotcmd
 +before while
 +before return
 +after dotcmd, return value: 0
 +subshell end
 diff -urN nonexistant/sh/dotcmd/out/until_break_case.out 
tests/bin/sh/dotcmd/out/until_break_case.out
 --- nonexistant/sh/dotcmd/out/until_break_case.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_break_case.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,5 @@
 +before until
 +before dotcmd
 +before case
 +before break
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_break_compound.out 
tests/bin/sh/dotcmd/out/until_break_compound.out
 --- nonexistant/sh/dotcmd/out/until_break_compound.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_break_compound.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,5 @@
 +before until
 +before dotcmd
 +compound start
 +before break
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_break_file.out 
tests/bin/sh/dotcmd/out/until_break_file.out
 --- nonexistant/sh/dotcmd/out/until_break_file.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_break_file.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,4 @@
 +before until
 +before dotcmd
 +before break
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_break_for.out 
tests/bin/sh/dotcmd/out/until_break_for.out
 --- nonexistant/sh/dotcmd/out/until_break_for.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_break_for.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,12 @@
 +before until
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd, return value: 0
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_break_func.out 
tests/bin/sh/dotcmd/out/until_break_func.out
 --- nonexistant/sh/dotcmd/out/until_break_func.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_break_func.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,5 @@
 +before until
 +before dotcmd
 +before function
 +before break
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_break_subshell.out 
tests/bin/sh/dotcmd/out/until_break_subshell.out
 --- nonexistant/sh/dotcmd/out/until_break_subshell.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_break_subshell.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before until
 +before dotcmd
 +subshell start
 +before break
 +after dotcmd, return value: 0
 +before dotcmd
 +subshell start
 +before break
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_break_until.out 
tests/bin/sh/dotcmd/out/until_break_until.out
 --- nonexistant/sh/dotcmd/out/until_break_until.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_break_until.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,12 @@
 +before until
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd, return value: 0
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_break_while.out 
tests/bin/sh/dotcmd/out/until_break_while.out
 --- nonexistant/sh/dotcmd/out/until_break_while.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_break_while.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,12 @@
 +before until
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd, return value: 0
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_continue_case.out 
tests/bin/sh/dotcmd/out/until_continue_case.out
 --- nonexistant/sh/dotcmd/out/until_continue_case.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_continue_case.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before until
 +before dotcmd
 +before case
 +before continue
 +before dotcmd
 +before case
 +before continue
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_continue_compound.out 
tests/bin/sh/dotcmd/out/until_continue_compound.out
 --- nonexistant/sh/dotcmd/out/until_continue_compound.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_continue_compound.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before until
 +before dotcmd
 +compound start
 +before continue
 +before dotcmd
 +compound start
 +before continue
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_continue_file.out 
tests/bin/sh/dotcmd/out/until_continue_file.out
 --- nonexistant/sh/dotcmd/out/until_continue_file.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_continue_file.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +before until
 +before dotcmd
 +before continue
 +before dotcmd
 +before continue
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_continue_for.out 
tests/bin/sh/dotcmd/out/until_continue_for.out
 --- nonexistant/sh/dotcmd/out/until_continue_for.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_continue_for.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,14 @@
 +before until
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd, return value: 0
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_continue_func.out 
tests/bin/sh/dotcmd/out/until_continue_func.out
 --- nonexistant/sh/dotcmd/out/until_continue_func.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_continue_func.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before until
 +before dotcmd
 +before function
 +before continue
 +before dotcmd
 +before function
 +before continue
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_continue_subshell.out 
tests/bin/sh/dotcmd/out/until_continue_subshell.out
 --- nonexistant/sh/dotcmd/out/until_continue_subshell.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_continue_subshell.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before until
 +before dotcmd
 +subshell start
 +before continue
 +after dotcmd, return value: 0
 +before dotcmd
 +subshell start
 +before continue
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_continue_until.out 
tests/bin/sh/dotcmd/out/until_continue_until.out
 --- nonexistant/sh/dotcmd/out/until_continue_until.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_continue_until.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,14 @@
 +before until
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd, return value: 0
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_continue_while.out 
tests/bin/sh/dotcmd/out/until_continue_while.out
 --- nonexistant/sh/dotcmd/out/until_continue_while.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_continue_while.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,14 @@
 +before until
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd, return value: 0
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_return_case.out 
tests/bin/sh/dotcmd/out/until_return_case.out
 --- nonexistant/sh/dotcmd/out/until_return_case.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_return_case.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before until
 +before dotcmd
 +before case
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before case
 +before return
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_return_compound.out 
tests/bin/sh/dotcmd/out/until_return_compound.out
 --- nonexistant/sh/dotcmd/out/until_return_compound.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_return_compound.out  2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before until
 +before dotcmd
 +compound start
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +compound start
 +before return
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_return_file.out 
tests/bin/sh/dotcmd/out/until_return_file.out
 --- nonexistant/sh/dotcmd/out/until_return_file.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_return_file.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before until
 +before dotcmd
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before return
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_return_for.out 
tests/bin/sh/dotcmd/out/until_return_for.out
 --- nonexistant/sh/dotcmd/out/until_return_for.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_return_for.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before until
 +before dotcmd
 +before for
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before for
 +before return
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_return_func.out 
tests/bin/sh/dotcmd/out/until_return_func.out
 --- nonexistant/sh/dotcmd/out/until_return_func.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_return_func.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,12 @@
 +before until
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd, return value: 0
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_return_subshell.out 
tests/bin/sh/dotcmd/out/until_return_subshell.out
 --- nonexistant/sh/dotcmd/out/until_return_subshell.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_return_subshell.out  2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before until
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_return_until.out 
tests/bin/sh/dotcmd/out/until_return_until.out
 --- nonexistant/sh/dotcmd/out/until_return_until.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_return_until.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before until
 +before dotcmd
 +before until
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before until
 +before return
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/until_return_while.out 
tests/bin/sh/dotcmd/out/until_return_while.out
 --- nonexistant/sh/dotcmd/out/until_return_while.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/until_return_while.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before until
 +before dotcmd
 +before while
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before while
 +before return
 +after dotcmd, return value: 0
 +after until
 diff -urN nonexistant/sh/dotcmd/out/while_break_case.out 
tests/bin/sh/dotcmd/out/while_break_case.out
 --- nonexistant/sh/dotcmd/out/while_break_case.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_break_case.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,5 @@
 +before while
 +before dotcmd
 +before case
 +before break
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_break_compound.out 
tests/bin/sh/dotcmd/out/while_break_compound.out
 --- nonexistant/sh/dotcmd/out/while_break_compound.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_break_compound.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,5 @@
 +before while
 +before dotcmd
 +compound start
 +before break
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_break_file.out 
tests/bin/sh/dotcmd/out/while_break_file.out
 --- nonexistant/sh/dotcmd/out/while_break_file.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_break_file.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,4 @@
 +before while
 +before dotcmd
 +before break
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_break_for.out 
tests/bin/sh/dotcmd/out/while_break_for.out
 --- nonexistant/sh/dotcmd/out/while_break_for.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_break_for.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,12 @@
 +before while
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd, return value: 0
 +before dotcmd
 +before for
 +before break
 +after for
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_break_func.out 
tests/bin/sh/dotcmd/out/while_break_func.out
 --- nonexistant/sh/dotcmd/out/while_break_func.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_break_func.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,5 @@
 +before while
 +before dotcmd
 +before function
 +before break
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_break_subshell.out 
tests/bin/sh/dotcmd/out/while_break_subshell.out
 --- nonexistant/sh/dotcmd/out/while_break_subshell.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_break_subshell.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before while
 +before dotcmd
 +subshell start
 +before break
 +after dotcmd, return value: 0
 +before dotcmd
 +subshell start
 +before break
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_break_until.out 
tests/bin/sh/dotcmd/out/while_break_until.out
 --- nonexistant/sh/dotcmd/out/while_break_until.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_break_until.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,12 @@
 +before while
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd, return value: 0
 +before dotcmd
 +before until
 +before break
 +after until
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_break_while.out 
tests/bin/sh/dotcmd/out/while_break_while.out
 --- nonexistant/sh/dotcmd/out/while_break_while.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_break_while.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,12 @@
 +before while
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd, return value: 0
 +before dotcmd
 +before while
 +before break
 +after while
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_continue_case.out 
tests/bin/sh/dotcmd/out/while_continue_case.out
 --- nonexistant/sh/dotcmd/out/while_continue_case.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_continue_case.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before while
 +before dotcmd
 +before case
 +before continue
 +before dotcmd
 +before case
 +before continue
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_continue_compound.out 
tests/bin/sh/dotcmd/out/while_continue_compound.out
 --- nonexistant/sh/dotcmd/out/while_continue_compound.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_continue_compound.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before while
 +before dotcmd
 +compound start
 +before continue
 +before dotcmd
 +compound start
 +before continue
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_continue_file.out 
tests/bin/sh/dotcmd/out/while_continue_file.out
 --- nonexistant/sh/dotcmd/out/while_continue_file.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_continue_file.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,6 @@
 +before while
 +before dotcmd
 +before continue
 +before dotcmd
 +before continue
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_continue_for.out 
tests/bin/sh/dotcmd/out/while_continue_for.out
 --- nonexistant/sh/dotcmd/out/while_continue_for.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_continue_for.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,14 @@
 +before while
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd, return value: 0
 +before dotcmd
 +before for
 +before continue
 +before continue
 +after for
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_continue_func.out 
tests/bin/sh/dotcmd/out/while_continue_func.out
 --- nonexistant/sh/dotcmd/out/while_continue_func.out  1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_continue_func.out    2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before while
 +before dotcmd
 +before function
 +before continue
 +before dotcmd
 +before function
 +before continue
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_continue_subshell.out 
tests/bin/sh/dotcmd/out/while_continue_subshell.out
 --- nonexistant/sh/dotcmd/out/while_continue_subshell.out      1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_continue_subshell.out        2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before while
 +before dotcmd
 +subshell start
 +before continue
 +after dotcmd, return value: 0
 +before dotcmd
 +subshell start
 +before continue
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_continue_until.out 
tests/bin/sh/dotcmd/out/while_continue_until.out
 --- nonexistant/sh/dotcmd/out/while_continue_until.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_continue_until.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,14 @@
 +before while
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd, return value: 0
 +before dotcmd
 +before until
 +before continue
 +before continue
 +after until
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_continue_while.out 
tests/bin/sh/dotcmd/out/while_continue_while.out
 --- nonexistant/sh/dotcmd/out/while_continue_while.out 1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_continue_while.out   2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,14 @@
 +before while
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd, return value: 0
 +before dotcmd
 +before while
 +before continue
 +before continue
 +after while
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_return_case.out 
tests/bin/sh/dotcmd/out/while_return_case.out
 --- nonexistant/sh/dotcmd/out/while_return_case.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_return_case.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before while
 +before dotcmd
 +before case
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before case
 +before return
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_return_compound.out 
tests/bin/sh/dotcmd/out/while_return_compound.out
 --- nonexistant/sh/dotcmd/out/while_return_compound.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_return_compound.out  2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before while
 +before dotcmd
 +compound start
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +compound start
 +before return
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_return_file.out 
tests/bin/sh/dotcmd/out/while_return_file.out
 --- nonexistant/sh/dotcmd/out/while_return_file.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_return_file.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,8 @@
 +before while
 +before dotcmd
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before return
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_return_for.out 
tests/bin/sh/dotcmd/out/while_return_for.out
 --- nonexistant/sh/dotcmd/out/while_return_for.out     1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_return_for.out       2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before while
 +before dotcmd
 +before for
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before for
 +before return
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_return_func.out 
tests/bin/sh/dotcmd/out/while_return_func.out
 --- nonexistant/sh/dotcmd/out/while_return_func.out    1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_return_func.out      2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,12 @@
 +before while
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd, return value: 0
 +before dotcmd
 +before function
 +before return
 +after function
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_return_subshell.out 
tests/bin/sh/dotcmd/out/while_return_subshell.out
 --- nonexistant/sh/dotcmd/out/while_return_subshell.out        1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_return_subshell.out  2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before while
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +subshell start
 +before return
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_return_until.out 
tests/bin/sh/dotcmd/out/while_return_until.out
 --- nonexistant/sh/dotcmd/out/while_return_until.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_return_until.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before while
 +before dotcmd
 +before until
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before until
 +before return
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/out/while_return_while.out 
tests/bin/sh/dotcmd/out/while_return_while.out
 --- nonexistant/sh/dotcmd/out/while_return_while.out   1970-01-01 
02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/out/while_return_while.out     2014-05-28 
16:45:08.000000000 +0300
 @@ -0,0 +1,10 @@
 +before while
 +before dotcmd
 +before while
 +before return
 +after dotcmd, return value: 0
 +before dotcmd
 +before while
 +before return
 +after dotcmd, return value: 0
 +after while
 diff -urN nonexistant/sh/dotcmd/scoped_command 
tests/bin/sh/dotcmd/scoped_command
 --- nonexistant/sh/dotcmd/scoped_command       1970-01-01 02:00:00.000000000 
+0200
 +++ tests/bin/sh/dotcmd/scoped_command 2014-05-28 13:44:29.000000000 +0300
 @@ -0,0 +1,129 @@
 +#!/bin/sh
 +#
 +# $NetBSD$
 +#
 +# Copyright (c) 2014 The NetBSD Foundation, Inc.
 +# All rights reserved.
 +#
 +# This code is derived from software contributed to The NetBSD Foundation
 +# by Jarmo Jaakkola.
 +#
 +# Redistribution and use in source and binary forms, with or without
 +# modification, are permitted provided that the following conditions
 +# are met:
 +# 1. Redistributions of source code must retain the above copyright
 +#    notice, this list of conditions and the following disclaimer.
 +# 2. Redistributions in binary form must reproduce the above copyright
 +#    notice, this list of conditions and the following disclaimer in the
 +#    documentation and/or other materials provided with the distribution.
 +#
 +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 +# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 +# POSSIBILITY OF SUCH DAMAGE.
 +#
 +
 +set -e
 +
 +# USAGE:
 +#   scoped_command scope cmd msg var_suffix
 +#
 +# Write to stdout a piece of Bourne Shell script with _cmd_ in specific
 +# _scope_.  The execution of _cmd_ is bracketed by prints of "before _msg_"
 +# and "after _msg_, return value ${?}".  If the generated script uses
 +# variables, __var_suffix_ is appended to their names to allow nesting of
 +# scripts generated this way.
 +#
 +# _scope_ should be one of: case, compound, file, for, func, subshell,
 +# until, while.
 +# _cmd_ is the command line to execute.  Remember proper quoting!
 +# _msg_ is text that will be used inside single quotes.
 +# _var_suffix_ is a syntactically valid identifier name.
 +
 +# don't rely on command lists (';')
 +cmd="echo 'before ${3}'
 +${2}
 +echo 'after ${3}, return value:' ${?}"
 +
 +echo "#!/bin/sh"
 +
 +[ 'func' = "${1}" ] && cat <<EOF
 +func()
 +{
 +    echo 'before ${3}'
 +    \${1}
 +    echo 'after ${3}'
 +}
 +
 +echo 'before function'
 +func "${2}" "${3}"  # don't rely on 'shift'
 +echo 'after function'
 +EOF
 +
 +[ 'case' = "${1}" ] && cat <<EOF
 +echo 'before case'
 +case 'a' in
 +    a)  ${cmd};;
 +esac
 +echo 'after case'
 +EOF
 +
 +[ 'file' = "${1}" ] && cat <<EOF
 +${cmd}
 +EOF
 +
 +[ 'while' = "${1}" ] && cat <<EOF
 +echo 'before while'
 +cond_${4}='true true false'
 +while \${cond_${4}}
 +do
 +    cond_${4}="\${cond_${4}#* }"
 +    ${cmd}
 +done
 +echo 'after while'
 +EOF
 +
 +[ 'until' = "${1}" ] && cat <<EOF
 +echo 'before until'
 +cond_${4}='false false true'
 +until \${cond_${4}}
 +do
 +    cond_${4}="\${cond_${4}#* }"
 +    ${cmd}
 +done
 +echo 'after until'
 +EOF
 +
 +[ 'for' = "${1}" ] && cat <<EOF
 +echo 'before for'
 +for i_${4} in 1 2
 +do
 +    ${cmd}
 +done
 +echo 'after for'
 +EOF
 +
 +[ 'subshell' = "${1}" ] && cat <<EOF
 +(
 +    echo 'subshell start'
 +    ${cmd}
 +    echo 'subshell end'
 +)
 +EOF
 +
 +[ 'compound' = "${1}" ] && cat <<EOF
 +{
 +    echo 'compound start'
 +    ${cmd};
 +    echo 'compound end'
 +}
 +EOF
 +
 +exit 0
 diff -urN nonexistant/sh/dotcmd/t_dotcmd.sh tests/bin/sh/dotcmd/t_dotcmd.sh
 --- nonexistant/sh/dotcmd/t_dotcmd.sh  1970-01-01 02:00:00.000000000 +0200
 +++ tests/bin/sh/dotcmd/t_dotcmd.sh    2014-05-28 13:23:27.000000000 +0300
 @@ -0,0 +1,76 @@
 +# $NetBSD$
 +#
 +# Copyright (c) 2014 The NetBSD Foundation, Inc.
 +# All rights reserved.
 +#
 +# This code is derived from software contributed to The NetBSD Foundation
 +# by Jarmo Jaakkola.
 +#
 +# Redistribution and use in source and binary forms, with or without
 +# modification, are permitted provided that the following conditions
 +# are met:
 +# 1. Redistributions of source code must retain the above copyright
 +#    notice, this list of conditions and the following disclaimer.
 +# 2. Redistributions in binary form must reproduce the above copyright
 +#    notice, this list of conditions and the following disclaimer in the
 +#    documentation and/or other materials provided with the distribution.
 +#
 +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 +# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 +# POSSIBILITY OF SUCH DAMAGE.
 +#
 +
 +# Test loop and function flow control statements in various scopes in a file
 +# sourced by a dotcmd in various scopes.  Basically, dotcmd is like #include
 +# in C/C++ so, for example, if the dotcmd is in a loop's body, a break in
 +# the sourced file can be used to break out of that loop.
 +
 +cmds='return break continue'
 +scopes='case compound file for func subshell until while'
 +
 +case_ids=''
 +
 +for dot_scope in ${scopes}
 +do
 +    for cmd in ${cmds}
 +    do
 +        for cmd_scope in ${scopes}
 +        do
 +            case_id="${dot_scope}_${cmd}_${cmd_scope}"
 +          case_ids="${case_ids} ${case_id}"
 +            atf_test_case "${case_id}"
 +            eval "
 +${case_id}_head()
 +{
 +    atf_set 'descr' \\
 +        'dotcmd in ${dot_scope}, file contains ${cmd} in ${cmd_scope}'
 +}
 +
 +${case_id}_body()
 +{
 +    srcdir=\$(atf_get_srcdir)
 +    # for dotcmd to find the sourced files
 +    PATH=\"\${PATH}:\${srcdir}\"
 +    atf_check -o file:\"\${srcdir}/out/${case_id}.out\" \\
 +            \"\${srcdir}/${case_id}\"
 +}
 +" # end eval
 +        done
 +    done
 +done
 +
 +atf_init_test_cases()
 +{
 +    for case_id in ${case_ids}
 +    do
 +        atf_add_test_case "${case_id}"
 +    done
 +}
 



Home | Main Index | Thread Index | Old Index