(command.CommandList
  children: [
    (C {<Id.KW_Set set>} {<-e>})
    (C {<Id.KW_Set set>} {<-E>})
    (C {<Id.KW_Set set>} {<-T>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BATS_COUNT_ONLY)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [16]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} 
                  {(DQ <-c>)} {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_COUNT_ONLY)
                  op: assign_op.Equal
                  rhs: {<1>}
                  spids: [40]
                )
              ]
            )
            (C {<shift>})
          ]
          spids: [20 37]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BATS_EXTENDED_SYNTAX)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [49]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} 
                  {(DQ <-x>)} {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_EXTENDED_SYNTAX)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [73]
                )
              ]
            )
            (C {<shift>})
          ]
          spids: [53 70]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BATS_TEST_FILENAME)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$1'))}
          spids: [84]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Simple
              words: [{<echo>} {(DQ <'usage: bats-exec <filename>'>)}]
              redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [89 102]
        )
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} 
                  {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))} {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Simple
              words: [
                {<echo>}
                {(DQ <'bats: '> ($ Id.VSub_DollarName '$BATS_TEST_FILENAME') <' does not exist'>)}
              ]
              redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [119 134]
        )
      ]
      else_action: [(C {<shift>})]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BATS_TEST_DIRNAME)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: 
                    (command.CommandList
                      children: [(C {<dirname>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))})]
                    )
                )
              )
            }
          spids: [161]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BATS_TEST_NAMES)
          op: assign_op.Equal
          rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
          spids: [172]
        )
      ]
    )
    (command.ShFunction
      name: load
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'name='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<local>} {<filename>})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} 
                          {
                            (DQ 
                              (braced_var_sub
                                token: <Id.VSub_Name name>
                                suffix_op: 
                                  (suffix_op.Slice
                                    begin: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
                                    length: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>})
                                  )
                              )
                            )
                          } {<Id.Lit_Equals '='>} {(DQ </>)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:filename)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name name))}
                          spids: [224]
                        )
                      ]
                    )
                  ]
                  spids: [198 221]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:filename)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ ($ Id.VSub_DollarName '$BATS_TEST_DIRNAME') </> (${ Id.VSub_Name name) 
                            <.bash>
                          )
                        }
                      spids: [235]
                    )
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_DollarName '$filename'))} 
                  {<Id.Lit_RBracket ']'>}
                )
                (command.BraceGroup
                  children: [
                    (command.Simple
                      words: [
                        {<echo>}
                        {(DQ <'bats: '> ($ Id.VSub_DollarName '$filename') <' does not exist'>)}
                      ]
                      redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                )
              ]
            )
            (C {<source>} {(DQ (${ Id.VSub_Name filename))})
          ]
        )
    )
    (command.ShFunction
      name: run
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<e>} {<E>} {<T>} {<oldIFS>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.LogicalNot
                      child: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_EqualTilde
                          left: {(DQ ($ Id.VSub_Hyphen '$-'))}
                          right: {<e>}
                        )
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:e)
                      op: assign_op.Equal
                      rhs: {<1>}
                      spids: [331]
                    )
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.LogicalNot
                      child: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_EqualTilde
                          left: {(DQ ($ Id.VSub_Hyphen '$-'))}
                          right: {<E>}
                        )
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:E)
                      op: assign_op.Equal
                      rhs: {<1>}
                      spids: [351]
                    )
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.LogicalNot
                      child: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_EqualTilde
                          left: {(DQ ($ Id.VSub_Hyphen '$-'))}
                          right: {<T>}
                        )
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:T)
                      op: assign_op.Equal
                      rhs: {<1>}
                      spids: [371]
                    )
                  ]
                )
              ]
            )
            (C {<Id.KW_Set set>} {<Id.Lit_Other '+'> <e>})
            (C {<Id.KW_Set set>} {<Id.Lit_Other '+'> <E>})
            (C {<Id.KW_Set set>} {<Id.Lit_Other '+'> <T>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:output)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Simple
                                  words: [{(DQ ($ Id.VSub_At '$@'))}]
                                  redirects: [
                                    (redir.Redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      fd: 2
                                      arg_word: {<1>}
                                    )
                                  ]
                                )
                              ]
                            )
                        )
                      )
                    }
                  spids: [393]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:status)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_QMark '$?'))}
                  spids: [406]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:oldIFS)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$IFS')}
                  spids: [412]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:IFS)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (single_quoted
                        left: <Id.Left_SingleQuoteC "$'">
                        tokens: [<Id.Char_OneChar '\\n'>]
                      )
                    }
                  spids: [416]
                )
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:lines)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: <Id.Op_LParen _>
                        words: [{($ Id.VSub_DollarName '$output')}]
                      )
                    }
                  spids: [421]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$e'))} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<Id.KW_Set set>} {<-e>})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$E'))} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<Id.KW_Set set>} {<-E>})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$T'))} 
                  {<Id.Lit_RBracket ']'>}
                )
                (C {<Id.KW_Set set>} {<-T>})
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:IFS)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$oldIFS')}
                  spids: [478]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction name:setup body:(command.BraceGroup children:[(C {<true>})]))
    (command.ShFunction name:teardown body:(command.BraceGroup children:[(C {<true>})]))
    (command.ShFunction
      name: skip
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_TEST_SKIPPED)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: <Id.VSub_Number 1>
                        suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{<1>})
                      )
                    }
                  spids: [515]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_TEST_COMPLETED)
                  op: assign_op.Equal
                  rhs: {<1>}
                  spids: [523]
                )
              ]
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
        )
    )
    (command.ShFunction
      name: bats_test_begin
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_TEST_DESCRIPTION)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [541]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-n>} 
                          {(DQ ($ Id.VSub_DollarName '$BATS_EXTENDED_SYNTAX'))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [
                        {<echo>}
                        {
                          (DQ <'begin '> ($ Id.VSub_DollarName '$BATS_TEST_NUMBER') <' '> 
                            ($ Id.VSub_DollarName '$BATS_TEST_DESCRIPTION')
                          )
                        }
                      ]
                      redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<3>})]
                    )
                  ]
                  spids: [547 560]
                )
              ]
            )
            (C {<setup>})
          ]
        )
    )
    (command.ShFunction
      name: bats_test_function
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'test_name='> (DQ ($ Id.VSub_Number '$1'))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: 
                    (sh_lhs_expr.IndexedName
                      name: BATS_TEST_NAMES
                      index: 
                        (arith_expr.ArithWord
                          w: 
                            {
                              (DQ 
                                (braced_var_sub
                                  token: <Id.VSub_Name BATS_TEST_NAMES>
                                  prefix_op: (Id.VSub_Pound)
                                  bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                )
                              )
                            }
                        )
                    )
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$test_name'))}
                  spids: [599]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_capture_stack_trace
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_PREVIOUS_STACK_TRACE)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: <Id.Op_LParen _>
                        words: [
                          {
                            (DQ 
                              (braced_var_sub
                                token: <Id.VSub_Name BATS_CURRENT_STACK_TRACE>
                                bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                              )
                            )
                          }
                        ]
                      )
                    }
                  spids: [634]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_CURRENT_STACK_TRACE)
                  op: assign_op.Equal
                  rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                  spids: [649]
                )
              ]
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'test_pattern='> 
                (DQ <' '> ($ Id.VSub_DollarName '$BATS_TEST_NAME') <' '> 
                  ($ Id.VSub_DollarName '$BATS_TEST_SOURCE')
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'setup_pattern='> 
                (DQ <' setup '> ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'teardown_pattern='> 
                (DQ <' teardown '> ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))
              }
            )
            (C {<local>} {<frame>})
            (C {<local>} {<Id.Lit_VarLike 'index='> <1>})
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:frame)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  command_list: 
                                    (command.CommandList
                                      children: [(C {<caller>} {(DQ ($ Id.VSub_DollarName '$index'))})]
                                    )
                                )
                              )
                            }
                          spids: [699]
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.IndexedName
                              name: BATS_CURRENT_STACK_TRACE
                              index: 
                                (arith_expr.ArithWord
                                  w: 
                                    {
                                      (DQ 
                                        (braced_var_sub
                                          token: <Id.VSub_Name BATS_CURRENT_STACK_TRACE>
                                          prefix_op: (Id.VSub_Pound)
                                          bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                        )
                                      )
                                    }
                                )
                            )
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$frame'))}
                          spids: [714]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.LogicalOr
                                      left: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobEqual
                                          left: {(DQ ($ Id.VSub_DollarName '$frame'))}
                                          right: 
                                            {<Id.Lit_Other '*'> 
                                              (DQ ($ Id.VSub_DollarName '$test_pattern'))
                                            }
                                        )
                                      right: 
                                        (bool_expr.LogicalOr
                                          left: 
                                            (bool_expr.Binary
                                              op_id: Id.BoolBinary_GlobEqual
                                              left: {(DQ ($ Id.VSub_DollarName '$frame'))}
                                              right: 
                                                {<Id.Lit_Other '*'> 
                                                  (DQ ($ Id.VSub_DollarName '$setup_pattern'))
                                                }
                                            )
                                          right: 
                                            (bool_expr.Binary
                                              op_id: Id.BoolBinary_GlobEqual
                                              left: {(DQ ($ Id.VSub_DollarName '$frame'))}
                                              right: 
                                                {<Id.Lit_Other '*'> 
                                                  (DQ ($ Id.VSub_DollarName '$teardown_pattern'))
                                                }
                                            )
                                        )
                                    )
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)]
                          spids: [740 788]
                        )
                      ]
                      else_action: [(C {<let>} {<Id.Lit_VarLike 'index+='> <1>})]
                    )
                  ]
                )
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_SOURCE)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          command_list: 
                            (command.CommandList
                              children: [
                                (C {<bats_frame_filename>} 
                                  {
                                    (DQ 
                                      (braced_var_sub
                                        token: <Id.VSub_Name BATS_CURRENT_STACK_TRACE>
                                        bracket_op: 
                                          (bracket_op.ArrayIndex
                                            expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
                                          )
                                      )
                                    )
                                  }
                                )
                              ]
                            )
                        )
                      )
                    }
                  spids: [810]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_LINENO)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          command_list: 
                            (command.CommandList
                              children: [
                                (C {<bats_frame_lineno>} 
                                  {
                                    (DQ 
                                      (braced_var_sub
                                        token: <Id.VSub_Name BATS_CURRENT_STACK_TRACE>
                                        bracket_op: 
                                          (bracket_op.ArrayIndex
                                            expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
                                          )
                                      )
                                    )
                                  }
                                )
                              ]
                            )
                        )
                      )
                    }
                  spids: [827]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_print_stack_trace
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<frame>})
            (C {<local>} {<Id.Lit_VarLike 'index='> <1>})
            (C {<local>} 
              {<Id.Lit_VarLike 'count='> 
                (DQ (braced_var_sub token:<Id.VSub_At '@'> prefix_op:(Id.VSub_Pound)))
              }
            )
            (command.ForEach
              iter_name: frame
              iter_words: [{(DQ ($ Id.VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {<local>} 
                      {<Id.Lit_VarLike 'filename='> 
                        (DQ 
                          (command_sub
                            left_token: <Id.Left_DollarParen '$('>
                            command_list: 
                              (command.CommandList
                                children: [
                                  (C {<bats_trim_filename>} 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: <Id.Left_DollarParen '$('>
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {<bats_frame_filename>} 
                                                  {(DQ ($ Id.VSub_DollarName '$frame'))}
                                                )
                                              ]
                                            )
                                        )
                                      )
                                    }
                                  )
                                ]
                              )
                          )
                        )
                      }
                    )
                    (C {<local>} 
                      {<Id.Lit_VarLike 'lineno='> 
                        (DQ 
                          (command_sub
                            left_token: <Id.Left_DollarParen '$('>
                            command_list: 
                              (command.CommandList
                                children: [
                                  (C {<bats_frame_lineno>} {(DQ ($ Id.VSub_DollarName '$frame'))})
                                ]
                              )
                          )
                        )
                      }
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$index')} {<-eq>} 
                                  {<1>} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [(C {<echo>} {<-n>} {(DQ <'# ('>)})]
                          spids: [925 938]
                        )
                      ]
                      else_action: [(C {<echo>} {<-n>} {(DQ <'#  '>)})]
                    )
                    (C {<local>} 
                      {<Id.Lit_VarLike 'fn='> 
                        (DQ 
                          (command_sub
                            left_token: <Id.Left_DollarParen '$('>
                            command_list: 
                              (command.CommandList
                                children: [
                                  (C {<bats_frame_function>} {(DQ ($ Id.VSub_DollarName '$frame'))})
                                ]
                              )
                          )
                        )
                      }
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$fn'))} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_NAME'))} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (C {<echo>} {<-n>} 
                              {
                                (DQ <'from function '> 
                                  (word_part.EscapedLiteral
                                    token: <Id.Lit_EscapedChar '\\`'>
                                  ) ($ Id.VSub_DollarName '$fn') <"' ">
                                )
                              }
                            )
                          ]
                          spids: [980 998]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$index')} {<-eq>} 
                                  {($ Id.VSub_DollarName '$count')} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (C {<echo>} 
                              {
                                (DQ <'in test file '> ($ Id.VSub_DollarName '$filename') <', line '> 
                                  ($ Id.VSub_DollarName '$lineno') <')'>
                                )
                              }
                            )
                          ]
                          spids: [1017 1030]
                        )
                      ]
                      else_action: [
                        (C {<echo>} 
                          {
                            (DQ <'in file '> ($ Id.VSub_DollarName '$filename') <', line '> 
                              ($ Id.VSub_DollarName '$lineno') <','>
                            )
                          }
                        )
                      ]
                    )
                    (C {<let>} {<Id.Lit_VarLike 'index+='> <1>})
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_print_failed_command
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'frame='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<local>} {<Id.Lit_VarLike 'status='> (DQ ($ Id.VSub_Number '$2'))})
            (C {<local>} 
              {<Id.Lit_VarLike 'filename='> 
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    command_list: 
                      (command.CommandList
                        children: [(C {<bats_frame_filename>} {(DQ ($ Id.VSub_DollarName '$frame'))})]
                      )
                  )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'lineno='> 
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    command_list: 
                      (command.CommandList
                        children: [(C {<bats_frame_lineno>} {(DQ ($ Id.VSub_DollarName '$frame'))})]
                      )
                  )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'failed_line='> 
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    command_list: 
                      (command.CommandList
                        children: [
                          (C {<bats_extract_line>} {(DQ ($ Id.VSub_DollarName '$filename'))} 
                            {(DQ ($ Id.VSub_DollarName '$lineno'))}
                          )
                        ]
                      )
                  )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'failed_command='> 
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    command_list: 
                      (command.CommandList
                        children: [
                          (C {<bats_strip_string>} {(DQ ($ Id.VSub_DollarName '$failed_line'))})
                        ]
                      )
                  )
                )
              }
            )
            (C {<echo>} {<-n>} 
              {
                (DQ <'#   '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\`'>) 
                  (${ Id.VSub_Name failed_command) <"' ">
                )
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$status')} {<-eq>} {<1>} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<echo>} {(DQ <failed>)})]
                  spids: [1172 1185]
                )
              ]
              else_action: [(C {<echo>} {(DQ <'failed with status '> ($ Id.VSub_DollarName '$status'))})]
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_frame_lineno
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'frame='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<local>} 
              {<Id.Lit_VarLike 'lineno='> 
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name frame>
                    suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<' *'>})
                  )
                )
              }
            )
            (C {<echo>} {(DQ ($ Id.VSub_DollarName '$lineno'))})
          ]
        )
    )
    (command.ShFunction
      name: bats_frame_function
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'frame='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<local>} 
              {<Id.Lit_VarLike 'rest='> 
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name frame>
                    suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{<'* '>})
                  )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'fn='> 
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name rest>
                    suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<' *'>})
                  )
                )
              }
            )
            (C {<echo>} {(DQ ($ Id.VSub_DollarName '$fn'))})
          ]
        )
    )
    (command.ShFunction
      name: bats_frame_filename
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'frame='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<local>} 
              {<Id.Lit_VarLike 'rest='> 
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name frame>
                    suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{<'* '>})
                  )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'filename='> 
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name rest>
                    suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{<'* '>})
                  )
                )
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$filename'))} 
                          {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<echo>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))})]
                  spids: [1335 1352]
                )
              ]
              else_action: [(C {<echo>} {(DQ ($ Id.VSub_DollarName '$filename'))})]
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_extract_line
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'filename='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<local>} {<Id.Lit_VarLike 'lineno='> (DQ ($ Id.VSub_Number '$2'))})
            (C {<sed>} {<-n>} {(DQ (${ Id.VSub_Name lineno) <p>)} 
              {(DQ ($ Id.VSub_DollarName '$filename'))}
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_strip_string
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'string='> (DQ ($ Id.VSub_Number '$1'))})
            (command.Pipeline
              children: [
                (C {<printf>} {(DQ <'%s'>)} {(DQ ($ Id.VSub_DollarName '$string'))})
                (C {<sed>} {<-e>} 
                  {(DQ <'s/^[ '>) 
                    (single_quoted
                      left: <Id.Left_SingleQuoteC "$'">
                      tokens: [<Id.Char_OneChar '\\t'>]
                    ) (DQ <']*//'>)
                  } {<-e>} 
                  {(DQ <'s/[ '>) 
                    (single_quoted
                      left: <Id.Left_SingleQuoteC "$'">
                      tokens: [<Id.Char_OneChar '\\t'>]
                    ) (DQ <']*'> <Id.Lit_Other '$'> <//>)
                  }
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_trim_filename
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'filename='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<local>} 
              {<Id.Lit_VarLike 'length='> 
                (DQ (braced_var_sub token:<Id.VSub_Name BATS_CWD> prefix_op:(Id.VSub_Pound)))
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} 
                          {
                            (DQ 
                              (braced_var_sub
                                token: <Id.VSub_Name filename>
                                suffix_op: 
                                  (suffix_op.Slice
                                    begin: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
                                    length: 
                                      (arith_expr.Binary
                                        op_id: Id.Arith_Plus
                                        left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike length>)
                                        right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>})
                                      )
                                  )
                              )
                            )
                          } {<Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name BATS_CWD) </>)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<echo>} 
                      {
                        (DQ 
                          (braced_var_sub
                            token: <Id.VSub_Name filename>
                            suffix_op: 
                              (suffix_op.Slice
                                begin: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike length>)
                                    right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>})
                                  )
                              )
                          )
                        )
                      }
                    )
                  ]
                  spids: [1503 1531]
                )
              ]
              else_action: [(C {<echo>} {(DQ ($ Id.VSub_DollarName '$filename'))})]
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_debug_trap
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$BASH_SOURCE'))} 
                          {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<bats_capture_stack_trace>})]
                  spids: [1569 1587]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_error_trap
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_ERROR_STATUS)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_QMark '$?'))}
                  spids: [1605]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_ERROR_STACK_TRACE)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: <Id.Op_LParen _>
                        words: [
                          {
                            (DQ 
                              (braced_var_sub
                                token: <Id.VSub_Name BATS_PREVIOUS_STACK_TRACE>
                                bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                              )
                            )
                          }
                        ]
                      )
                    }
                  spids: [1611]
                )
              ]
            )
            (C {<trap>} {<->} {<debug>})
          ]
        )
    )
    (command.ShFunction
      name: bats_teardown_trap
      body: 
        (command.BraceGroup
          children: [
            (C {<trap>} {(DQ <bats_exit_trap>)} {<Id.ControlFlow_Exit exit>})
            (C {<local>} {<Id.Lit_VarLike 'status='> <0>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Simple
                  words: [{<teardown>}]
                  redirects: [
                    (redir.Redir
                      op: <Id.Redir_DGreat '>>'>
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$BATS_OUT'))}
                    )
                    (redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>})
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:status)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_QMark '$?'))}
                      spids: [1669]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$status')} {<-eq>} {<0>} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BATS_TEARDOWN_COMPLETED)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [1692]
                        )
                      ]
                    )
                  ]
                  spids: [1676 1689]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-n>} 
                          {(DQ ($ Id.VSub_DollarName '$BATS_TEST_COMPLETED'))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BATS_ERROR_STATUS)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$status'))}
                          spids: [1712]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BATS_ERROR_STACK_TRACE)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (sh_array_literal
                                left: <Id.Op_LParen _>
                                words: [
                                  {
                                    (DQ 
                                      (braced_var_sub
                                        token: <Id.VSub_Name BATS_CURRENT_STACK_TRACE>
                                        bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                      )
                                    )
                                  }
                                ]
                              )
                            }
                          spids: [1718]
                        )
                      ]
                    )
                  ]
                  spids: [1696 1709]
                )
              ]
            )
            (C {<bats_exit_trap>})
          ]
        )
    )
    (command.ShFunction
      name: bats_exit_trap
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<status>})
            (C {<local>} {<skipped>})
            (C {<trap>} {<->} {<err>} {<Id.ControlFlow_Exit exit>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skipped)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1769]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-n>} 
                          {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SKIPPED'))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:skipped)
                          op: assign_op.Equal
                          rhs: {(DQ <' # skip'>)}
                          spids: [1790]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {(DQ <1>)} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SKIPPED'))} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:skipped)
                                  op: assign_op.PlusEqual
                                  rhs: {(DQ <' ('> ($ Id.VSub_DollarName '$BATS_TEST_SKIPPED') <')'>)}
                                  spids: [1817]
                                )
                              ]
                            )
                          ]
                          spids: [1796 1814]
                        )
                      ]
                    )
                  ]
                  spids: [1774 1787]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {<Id.Lit_LBracket '['>} {<-z>} 
                              {(DQ ($ Id.VSub_DollarName '$BATS_TEST_COMPLETED'))} {<Id.Lit_RBracket ']'>}
                            )
                            (C {<Id.Lit_LBracket '['>} {<-z>} 
                              {(DQ ($ Id.VSub_DollarName '$BATS_TEARDOWN_COMPLETED'))} {<Id.Lit_RBracket ']'>}
                            )
                          ]
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [
                        {<echo>}
                        {
                          (DQ <'not ok '> ($ Id.VSub_DollarName '$BATS_TEST_NUMBER') <' '> 
                            ($ Id.VSub_DollarName '$BATS_TEST_DESCRIPTION')
                          )
                        }
                      ]
                      redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<3>})]
                    )
                    (command.Simple
                      words: [
                        {<bats_print_stack_trace>}
                        {
                          (DQ 
                            (braced_var_sub
                              token: <Id.VSub_Name BATS_ERROR_STACK_TRACE>
                              bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                            )
                          )
                        }
                      ]
                      redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<3>})]
                    )
                    (command.Simple
                      words: [
                        {<bats_print_failed_command>}
                        {
                          (DQ 
                            (braced_var_sub
                              token: <Id.VSub_Name BATS_ERROR_STACK_TRACE>
                              bracket_op: 
                                (bracket_op.ArrayIndex
                                  expr: 
                                    (arith_expr.Binary
                                      op_id: Id.Arith_Minus
                                      left: 
                                        (arith_expr.ArithWord
                                          w: 
                                            {
                                              (braced_var_sub
                                                token: <Id.VSub_Name BATS_ERROR_STACK_TRACE>
                                                prefix_op: (Id.VSub_Pound)
                                                bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                              )
                                            }
                                        )
                                      right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>})
                                    )
                                )
                            )
                          )
                        }
                        {(DQ ($ Id.VSub_DollarName '$BATS_ERROR_STATUS'))}
                      ]
                      redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<3>})]
                    )
                    (command.Simple
                      words: [{<sed>} {<-e>} {(DQ <'s/^/# /'>)}]
                      redirects: [
                        (redir.Redir
                          op: <Id.Redir_Less '<'>
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_DollarName '$BATS_OUT'))}
                        )
                        (redir.Redir
                          op: <Id.Redir_GreatAnd '>&'>
                          fd: -1
                          arg_word: {<3>}
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:status)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [1933]
                        )
                      ]
                    )
                  ]
                  spids: [1832 1857]
                )
              ]
              else_action: [
                (command.Simple
                  words: [
                    {<echo>}
                    {
                      (DQ <'ok '> (${ Id.VSub_Name BATS_TEST_NUMBER) (${ Id.VSub_Name skipped) <' '> 
                        (${ Id.VSub_Name BATS_TEST_DESCRIPTION)
                      )
                    }
                  ]
                  redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<3>})]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:status)
                      op: assign_op.Equal
                      rhs: {<0>}
                      spids: [1960]
                    )
                  ]
                )
              ]
            )
            (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$BATS_OUT'))})
            (command.ControlFlow
              token: <Id.ControlFlow_Exit exit>
              arg_word: {(DQ ($ Id.VSub_DollarName '$status'))}
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_perform_tests
      body: 
        (command.BraceGroup
          children: [
            (C {<echo>} {(DQ <1..> ($ Id.VSub_Pound '$#'))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:test_number)
                  op: assign_op.Equal
                  rhs: {<1>}
                  spids: [2001]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:status)
                  op: assign_op.Equal
                  rhs: {<0>}
                  spids: [2005]
                )
              ]
            )
            (command.ForEach
              iter_name: test_name
              iter_words: [{(DQ ($ Id.VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(DQ ($ Id.VSub_Number '$0'))} 
                          {($ Id.VSub_DollarName '$BATS_EXTENDED_SYNTAX')} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))} {(DQ ($ Id.VSub_DollarName '$test_name'))} 
                          {(DQ ($ Id.VSub_DollarName '$test_number'))}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:status)
                              op: assign_op.Equal
                              rhs: {<1>}
                              spids: [2043]
                            )
                          ]
                        )
                      ]
                    )
                    (C {<let>} {<Id.Lit_VarLike 'test_number+='> <1>})
                  ]
                )
            )
            (command.ControlFlow
              token: <Id.ControlFlow_Exit exit>
              arg_word: {(DQ ($ Id.VSub_DollarName '$status'))}
            )
          ]
        )
    )
    (command.ShFunction
      name: bats_perform_test
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_TEST_NAME)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [2072]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} 
                          {
                            (DQ 
                              (command_sub
                                left_token: <Id.Left_DollarParen '$('>
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.AndOr
                                        ops: [Id.Op_DPipe]
                                        children: [
                                          (C {<type>} {<-t>} 
                                            {(DQ ($ Id.VSub_DollarName '$BATS_TEST_NAME'))}
                                          )
                                          (C {<true>})
                                        ]
                                      )
                                    ]
                                  )
                              )
                            )
                          } {<Id.Lit_Equals '='>} {(DQ <function>)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BATS_TEST_NUMBER)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number '$2'))}
                          spids: [2110]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {<-z>} 
                                  {(DQ ($ Id.VSub_DollarName '$BATS_TEST_NUMBER'))} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (C {<echo>} {(DQ <1..1>)})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:BATS_TEST_NUMBER)
                                  op: assign_op.Equal
                                  rhs: {(DQ <1>)}
                                  spids: [2139]
                                )
                              ]
                            )
                          ]
                          spids: [2116 2129]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BATS_TEST_COMPLETED)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [2149]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BATS_TEARDOWN_COMPLETED)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                          spids: [2154]
                        )
                      ]
                    )
                    (C {<trap>} 
                      {
                        (DQ <'bats_debug_trap '> 
                          (word_part.EscapedLiteral
                            token: <Id.Lit_EscapedChar '\\"'>
                          ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <BASH_SOURCE> 
                          (word_part.EscapedLiteral
                            token: <Id.Lit_EscapedChar '\\"'>
                          )
                        )
                      } {<debug>}
                    )
                    (C {<trap>} {(DQ <bats_error_trap>)} {<err>})
                    (C {<trap>} {(DQ <bats_teardown_trap>)} {<Id.ControlFlow_Exit exit>})
                    (command.Simple
                      words: [{(DQ ($ Id.VSub_DollarName '$BATS_TEST_NAME'))}]
                      redirects: [
                        (redir.Redir
                          op: <Id.Redir_DGreat '>>'>
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_DollarName '$BATS_OUT'))}
                        )
                        (redir.Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          fd: 2
                          arg_word: {<1>}
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BATS_TEST_COMPLETED)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [2203]
                        )
                      ]
                    )
                  ]
                  spids: [2078 2107]
                )
              ]
              else_action: [
                (command.Simple
                  words: [
                    {<echo>}
                    {
                      (DQ <'bats: unknown test name '> 
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\`'>
                        ) ($ Id.VSub_DollarName '$BATS_TEST_NAME') <"'">
                      )
                    }
                  ]
                  redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
                )
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$TMPDIR'))} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_TMPDIR)
                  op: assign_op.Equal
                  rhs: {(DQ </tmp>)}
                  spids: [2250]
                )
              ]
            )
          ]
          spids: [2234 2247]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BATS_TMPDIR)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ 
                    (braced_var_sub
                      token: <Id.VSub_Name TMPDIR>
                      suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash />})
                    )
                  )
                }
              spids: [2258]
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BATS_TMPNAME)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$BATS_TMPDIR') </bats.> ($ Id.VSub_Dollar '$$'))}
          spids: [2270]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BATS_PARENT_TMPNAME)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$BATS_TMPDIR') </bats.> ($ Id.VSub_DollarName '$PPID'))}
          spids: [2277]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BATS_OUT)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name BATS_TMPNAME) <.out>)}
          spids: [2284]
        )
      ]
    )
    (command.ShFunction
      name: bats_preprocess_source
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BATS_TEST_SOURCE)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name BATS_TMPNAME) <.src>)}
                  spids: [2300]
                )
              ]
            )
            (command.Pipeline
              children: [
                (command.BraceGroup
                  children: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          words: [{<tr>} {<-d>} {(SQ <'\\r'>)}]
                          redirects: [
                            (redir.Redir
                              op: <Id.Redir_Less '<'>
                              fd: -1
                              arg_word: {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))}
                            )
                          ]
                        )
                      terminator: <Id.Op_Semi _>
                    )
                    (command.Sentence
                      child: (C {<echo>})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
                (command.Simple
                  words: [{<bats-preprocess>}]
                  redirects: [
                    (redir.Redir
                      op: <Id.Redir_Great '>'>
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {<trap>} {(DQ <bats_cleanup_preprocessed_source>)} {<err>} {<Id.ControlFlow_Exit exit>})
            (C {<trap>} {(DQ <'bats_cleanup_preprocessed_source; exit 1'>)} {<int>})
          ]
        )
    )
    (command.ShFunction
      name: bats_cleanup_preprocessed_source
      body: 
        (command.BraceGroup
          children: [(C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))})]
        )
    )
    (command.ShFunction
      name: bats_evaluate_preprocessed_source
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-z>} 
                          {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:BATS_TEST_SOURCE)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name BATS_PARENT_TMPNAME) <.src>)}
                          spids: [2405]
                        )
                      ]
                    )
                  ]
                  spids: [2389 2402]
                )
              ]
            )
            (C {<source>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))})
          ]
        )
    )
    (command.Simple
      words: [{<exec>}]
      redirects: [(redir.Redir op:<Id.Redir_LessAnd '3<&'> fd:3 arg_word:{<1>})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Pound '$#'))} {<-eq>} {<0>} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (C {<bats_preprocess_source>})
            (C {<bats_evaluate_preprocessed_source>})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-n>} 
                          {(DQ ($ Id.VSub_DollarName '$BATS_COUNT_ONLY'))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<echo>} 
                      {
                        (DQ 
                          (braced_var_sub
                            token: <Id.VSub_Name BATS_TEST_NAMES>
                            prefix_op: (Id.VSub_Pound)
                            bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          )
                        )
                      }
                    )
                  ]
                  spids: [2457 2470]
                )
              ]
              else_action: [
                (C {<bats_perform_tests>} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: <Id.VSub_Name BATS_TEST_NAMES>
                        bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                      )
                    )
                  }
                )
              ]
            )
          ]
          spids: [2432 2447]
        )
      ]
      else_action: [
        (C {<bats_evaluate_preprocessed_source>})
        (C {<bats_perform_test>} {(DQ ($ Id.VSub_At '$@'))})
      ]
    )
  ]
)