(command.CommandList children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<nounset>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<pipefail>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<errexit>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <source> more_env: [] words: [{<source>} {<'test/common.sh'>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <ast> name: ast body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <'bin/osh'> more_env: [] words: [{<'bin/osh'>} {<-n>} {<-c>} {(SQ <'echo hi'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/osh'> more_env: [] words: [{<'bin/osh'>} {<-n>} {<--ast-format>} {<text>} {<-c>} {(SQ <'echo hi'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/osh'> more_env: [] words: [{<'bin/osh'>} {<-n>} {<--ast-format>} {<abbrev-html>} {<-c>} {(SQ <'echo hi'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/osh'> more_env: [] words: [{<'bin/osh'>} {<-n>} {<--ast-format>} {<html>} {<-c>} {(SQ <'echo hi'>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <'bin/osh'> more_env: [] words: [ {<'bin/osh'>} {<-n>} {<--ast-format>} {<oheap>} {<-c>} {(SQ <'echo hi'>)} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <die> more_env: [] words: [{<die>} {(DQ <'Should have failed'>)}] redirects: [] do_fork: T ) ] spids: [111 128] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'ast_bin='> <'_tmp/smoke-ast.bin'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/osh'> more_env: [] words: [{<'bin/osh'>} {<-n>} {<--ast-format>} {<oheap>} {<-c>} {(SQ <'echo hi'>)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName ast_bin)} ) ] do_fork: T ) (command.Simple blame_tok: <ls> more_env: [] words: [{<ls>} {<-l>} {($ Id.VSub_DollarName ast_bin)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <hexdump> more_env: [] words: [{<hexdump>} {<-C>} {($ Id.VSub_DollarName ast_bin)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <osh-file> name: osh-file body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> } {<Hello>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_tmp/hi.sh'>} ) (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'\n'> <'echo hi\n'> <'echo bye\n'> <'\n'> <'func() {\n'> <' echo '> <Id.Right_DoubleQuote '"'> <'inside func'> <Id.Right_DoubleQuote '"'> <'\n'> <'}\n'> <'func 1 2 3\n'> <'\n'> <'# TODO: Test vars don\'t persist.\n'> <'(echo '> <Id.Right_DoubleQuote '"'> <'in subshell'> <Id.Right_DoubleQuote '"'> <'; echo '> <Id.Right_DoubleQuote '"'> <another> <Id.Right_DoubleQuote '"'> <')\n'> <'\n'> <'echo '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'(echo ComSub)\n'> <'\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$OSH'> more_env: [] words: [{($ Id.VSub_DollarName OSH)} {<'_tmp/hi.sh'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> } {<EMPTY>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <touch> more_env: [] words: [{<touch>} {<'_tmp/empty.sh'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$OSH'> more_env: [] words: [{($ Id.VSub_DollarName OSH)} {<'_tmp/empty.sh'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> } {<NO>} {<TRAILING>} {<NEWLINE>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(SQ <'echo hi'>)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'_tmp/no-newline.sh'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$OSH'> more_env: [] words: [{($ Id.VSub_DollarName OSH)} {<'_tmp/no-newline.sh'>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <osh-stdin> name: osh-stdin body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <Id.VSub_DollarName '$OSH'> more_env: [] words: [{($ Id.VSub_DollarName OSH)}] redirects: [(Redir op:<Id.Redir_Less '<'> loc:(redir_loc.Fd fd:0) arg:{<'_tmp/hi.sh'>})] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> } {<EMPTY>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$OSH'> more_env: [] words: [{($ Id.VSub_DollarName OSH)}] redirects: [ (Redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {<'_tmp/empty.sh'>} ) ] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {<Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> <Id.Lit_Equals '='> } {<NO>} {<TRAILING>} {<NEWLINE>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$OSH'> more_env: [] words: [{($ Id.VSub_DollarName OSH)}] redirects: [ (Redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {<'_tmp/no-newline.sh'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$OSH'> more_env: [] words: [{($ Id.VSub_DollarName OSH)}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'echo '> <Id.Right_DoubleQuote '"'> <'\n'> <'hi\n'> <Id.Right_DoubleQuote '"'> <'\n'> <'echo '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'\n'> <'line continuation; echo two\n'> <'\n'> <'cat <<EOF_INNER\n'> <'here doc\n'> <'EOF_INNER\n'> <'\n'> <'echo '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'(\n'> <'echo command sub\n'> <')\n'> <'\n'> <'func() {\n'> <' echo hi\n'> <'}\n'> <'\n'> ] ) ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <osh-interactive> name: osh-interactive body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <'echo hi'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$OSH'> more_env: [] words: [{($ Id.VSub_DollarName OSH)} {<-i>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <exit>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$OSH'> more_env: [] words: [{($ Id.VSub_DollarName OSH)} {<-i>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <help> name: help body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<Id.Lit_Other '+'> <o>} {<errexit>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/oil.py'> more_env: [] words: [{<'bin/oil.py'>} {<--help>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <assert> more_env: [] words: [{<assert>} {($ Id.VSub_QMark '?')} {<-eq>} {<0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/oil.py'> more_env: [] words: [{<'bin/oil.py'>} {<osh>} {<--help>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <assert> more_env: [] words: [{<assert>} {($ Id.VSub_QMark '?')} {<-eq>} {<0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/oil.py'> more_env: [] words: [{<'bin/oil.py'>} {<oil>} {<--help>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <assert> more_env: [] words: [{<assert>} {($ Id.VSub_QMark '?')} {<-eq>} {<0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/osh'> more_env: [] words: [{<'bin/osh'>} {<--help>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <assert> more_env: [] words: [{<assert>} {($ Id.VSub_QMark '?')} {<-eq>} {<0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/oil'> more_env: [] words: [{<'bin/oil'>} {<--help>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <assert> more_env: [] words: [{<assert>} {($ Id.VSub_QMark '?')} {<-eq>} {<0>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <_error-case> name: _error-case body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/osh'> more_env: [] words: [{<'bin/osh'>} {<-c>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <parse-errors> name: parse-errors body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<Id.Lit_Other '+'> <o>} {<errexit>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <_error-case> more_env: [] words: [{<_error-case>} {(SQ <'echo < <<'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <_error-case> more_env: [] words: [{<_error-case>} {(SQ <'${foo:}'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <_error-case> more_env: [] words: [{<_error-case>} {(SQ <'$(( 1 + ))'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <_error-case> more_env: [] words: [{<_error-case>} {(SQ <'echo $( echo > >> )'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <exit-builtin-interactive> name: exit-builtin-interactive body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<Id.Lit_Other '+'> <o>} {<errexit>}] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <'echo one; exit 42; echo two'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'bin/osh'> more_env: [] words: [{<'bin/osh'>} {<-i>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Simple blame_tok: <assert> more_env: [] words: [{<assert>} {($ Id.VSub_QMark '?')} {<-eq>} {<42>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <readonly> more_env: [] words: [ {<readonly>} {<-a>} {<Id.Lit_VarLike 'PASSING='> (ShArrayLiteral left: <Id.Op_LParen _> words: [ {<ast>} {<osh-file>} {<osh-stdin>} {<osh-interactive>} {<exit-builtin-interactive>} {<help>} ] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.ShFunction name_tok: <all-passing> name: all-passing body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <run-all> more_env: [] words: [ {<run-all>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name PASSING> var_name: PASSING bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) right: <Id.Right_DollarBrace '}'> ) ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [{(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] )