(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
    )
  ]
)