(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: <assert-deps>
      name: assert-deps
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Pipeline
                  children: [
                    (command.Simple
                      blame_tok: <'bin/oshc'>
                      more_env: []
                      words: [{<'bin/oshc'>} {<deps>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <diff>
                      more_env: []
                      words: [{<diff>} {<-u>} {<'/dev/fd/3'>} {<->}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  ops: [<Id.Op_Pipe _>]
                )
                (command.Simple
                  blame_tok: <fail>
                  more_env: []
                  words: [{<fail>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <usage>
      name: usage
      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/oshc'>
              more_env: []
              words: [{<'bin/oshc'>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {($ Id.VSub_QMark '?')} {<-eq>} {<2>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <fail>
                  more_env: []
                  words: [{<fail>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <'bin/oshc'>
              more_env: []
              words: [{<'bin/oshc'>} {<invalid>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {($ Id.VSub_QMark '?')} {<-eq>} {<2>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <fail>
                  more_env: []
                  words: [{<fail>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(SQ <'<'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <'bin/oshc'>
                  more_env: []
                  words: [{<'bin/oshc'>} {<deps>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {($ Id.VSub_QMark '?')} {<-eq>} {<2>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <fail>
                  more_env: []
                  words: [{<fail>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <'bin/oshc'>
              more_env: []
              words: [{<'bin/oshc'>} {<deps>} {<nonexistent.txt>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {($ Id.VSub_QMark '?')} {<-eq>} {<2>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <fail>
                  more_env: []
                  words: [{<fail>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {<-->}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <'bin/oshc'>
              more_env: []
              words: [{<'bin/oshc'>} {<--help>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {($ Id.VSub_QMark '?')} {<-eq>} {<0>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <fail>
                  more_env: []
                  words: [{<fail>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {<-o>} {<errexit>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <deps>
      name: deps
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <'bin/oshc'>
              more_env: []
              words: [{<'bin/oshc'>} {<deps>} {($ Id.VSub_Number 0)}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {($ Id.VSub_QMark '?')} {<-eq>} {<0>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <fail>
                  more_env: []
                  words: [{<fail>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <assert-deps>
              more_env: []
              words: [{<assert-deps>}]
              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: [<'if { grep foo bar; } then\n'> <'  cat hi\n'> <'fi\n'>]
                    )
                )
                (Redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<DEPS>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'grep\n'> <'cat\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <assert-deps>
              more_env: []
              words: [{<assert-deps>}]
              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: [
                        <'f() {\n'>
                        <'  g\n'>
                        <'}\n'>
                        <'g() {\n'>
                        <'  echo G\n'>
                        <'}\n'>
                        <'f\n'>
                        <'grep foo bar\n'>
                      ]
                    )
                )
                (Redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<DEPS>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'grep\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <assert-deps>
              more_env: []
              words: [{<assert-deps>}]
              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: [<'g\n'> <'g() {\n'> <'  echo G\n'> <'}\n'> <'grep foo bar\n'>]
                    )
                )
                (Redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<DEPS>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'g\n'> <'grep\n'>]
                    )
                )
              ]
              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: [{<usage>} {<deps>}]
            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
    )
  ]
)