(CommandList
  children: [
    (C {(set)} {(-e)})
    (C {(set)} {(-E)})
    (C {(set)} {(-T)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:BATS_COUNT_ONLY) op:Equal rhs:{(DQ )} spids:[16])]
      spids: [16]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$1'))} {(Lit_Other '=')} {(DQ (-c))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:BATS_COUNT_ONLY) op:Equal rhs:{(1)} spids:[40])]
              spids: [40]
            )
            (C {(shift)})
          ]
          spids: [16777215 37]
        )
      ]
      spids: [16777215 46]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:BATS_EXTENDED_SYNTAX) op:Equal rhs:{(DQ )} spids:[49])]
      spids: [49]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$1'))} {(Lit_Other '=')} {(DQ (-x))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_EXTENDED_SYNTAX)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [73]
                )
              ]
              spids: [73]
            )
            (C {(shift)})
          ]
          spids: [16777215 70]
        )
      ]
      spids: [16777215 81]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BATS_TEST_FILENAME)
          op: Equal
          rhs: {(DQ ($ VSub_Number '$1'))}
          spids: [84]
        )
      ]
      spids: [84]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$BATS_TEST_FILENAME'))} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (SimpleCommand
              words: [{(echo)} {(DQ ('usage: bats-exec <filename>'))}]
              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [16777215 102]
        )
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other '[')} {(KW_Bang '!')} {(-f)} {(DQ ($ VSub_Name '$BATS_TEST_FILENAME'))} 
                  {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (SimpleCommand
              words: [{(echo)} {(DQ ('bats: ') ($ VSub_Name '$BATS_TEST_FILENAME') (' does not exist'))}]
              redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [119 134]
        )
      ]
      else_action: [(C {(shift)})]
      spids: [153 158]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BATS_TEST_DIRNAME)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(dirname)} {(DQ ($ VSub_Name '$BATS_TEST_FILENAME'))})]
                    )
                  left_token: <Left_CommandSub '$('>
                  spids: [163 169]
                )
              )
            }
          spids: [161]
        )
      ]
      spids: [161]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BATS_TEST_NAMES)
          op: Equal
          rhs: {(ArrayLiteralPart)}
          spids: [172]
        )
      ]
      spids: [172]
    )
    (FuncDef
      name: load
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [186]
                )
              ]
              spids: [184]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:filename) op:Equal spids:[194])]
              spids: [192]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (DQ 
                              (BracedVarSub
                                token: <VSub_Name name>
                                suffix_op: 
                                  (Slice
                                    begin: (ArithWord w:{(Lit_Digits 0)})
                                    length: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [203 209]
                              )
                            )
                          } {(Lit_Other '=')} {(DQ (/))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:filename)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name name))}
                          spids: [224]
                        )
                      ]
                      spids: [224]
                    )
                  ]
                  spids: [16777215 221]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:filename)
                      op: Equal
                      rhs: {(DQ ($ VSub_Name '$BATS_TEST_DIRNAME') (/) (${ VSub_Name name) (.bash))}
                      spids: [235]
                    )
                  ]
                  spids: [235]
                )
              ]
              spids: [232 246]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-f)} {(DQ ($ VSub_Name '$filename'))} {(Lit_Other ']')})
                (BraceGroup
                  children: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ('bats: ') ($ VSub_Name '$filename') (' does not exist'))}]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                    )
                    (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
                  ]
                  spids: [262]
                )
              ]
            )
            (C {(source)} {(DQ (${ VSub_Name filename))})
          ]
          spids: [181]
        )
      spids: [177 180]
    )
    (FuncDef
      name: run
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair lhs:(LhsName name:e) op:Equal spids:[306])
                (assign_pair lhs:(LhsName name:E) op:Equal spids:[308])
                (assign_pair lhs:(LhsName name:T) op:Equal spids:[310])
                (assign_pair lhs:(LhsName name:oldIFS) op:Equal spids:[312])
              ]
              spids: [304]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (DBracket
                  expr: 
                    (LogicalNot
                      child: 
                        (BoolBinary
                          op_id: BoolBinary_EqualTilde
                          left: {(DQ ($ VSub_Hyphen '$-'))}
                          right: {(e)}
                        )
                    )
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:e) op:Equal rhs:{(1)} spids:[331])]
                  spids: [331]
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (DBracket
                  expr: 
                    (LogicalNot
                      child: 
                        (BoolBinary
                          op_id: BoolBinary_EqualTilde
                          left: {(DQ ($ VSub_Hyphen '$-'))}
                          right: {(E)}
                        )
                    )
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:E) op:Equal rhs:{(1)} spids:[351])]
                  spids: [351]
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (DBracket
                  expr: 
                    (LogicalNot
                      child: 
                        (BoolBinary
                          op_id: BoolBinary_EqualTilde
                          left: {(DQ ($ VSub_Hyphen '$-'))}
                          right: {(T)}
                        )
                    )
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:T) op:Equal rhs:{(1)} spids:[371])]
                  spids: [371]
                )
              ]
            )
            (C {(set)} {(Lit_Other '+') (e)})
            (C {(set)} {(Lit_Other '+') (E)})
            (C {(set)} {(Lit_Other '+') (T)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:output)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (SimpleCommand
                                  words: [{(DQ ($ VSub_At '$@'))}]
                                  redirects: [(Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})]
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [395 402]
                        )
                      )
                    }
                  spids: [393]
                )
              ]
              spids: [393]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:status)
                  op: Equal
                  rhs: {(DQ ($ VSub_QMark '$?'))}
                  spids: [406]
                )
              ]
              spids: [406]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:oldIFS)
                  op: Equal
                  rhs: {($ VSub_Name '$IFS')}
                  spids: [412]
                )
              ]
              spids: [412]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:IFS)
                  op: Equal
                  rhs: 
                    {
                      (SingleQuotedPart
                        left: <Left_DollarSingleQuote "$'">
                        tokens: [<Char_OneChar '\\n'>]
                        spids: [417 419]
                      )
                    }
                  spids: [416]
                )
                (assign_pair
                  lhs: (LhsName name:lines)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{($ VSub_Name '$output')}])}
                  spids: [421]
                )
              ]
              spids: [416]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$e'))} {(Lit_Other ']')})
                (C {(set)} {(-e)})
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$E'))} {(Lit_Other ']')})
                (C {(set)} {(-E)})
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$T'))} {(Lit_Other ']')})
                (C {(set)} {(-T)})
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:IFS)
                  op: Equal
                  rhs: {($ VSub_Name '$oldIFS')}
                  spids: [478]
                )
              ]
              spids: [478]
            )
          ]
          spids: [301]
        )
      spids: [297 300]
    )
    (FuncDef name:setup body:(BraceGroup children:[(C {(true)})] spids:[488]) spids:[484 487])
    (FuncDef name:teardown body:(BraceGroup children:[(C {(true)})] spids:[500]) spids:[496 499])
    (FuncDef
      name: skip
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_TEST_SKIPPED)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)})
                        spids: [516 520]
                      )
                    }
                  spids: [515]
                )
              ]
              spids: [515]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_TEST_COMPLETED)
                  op: Equal
                  rhs: {(1)}
                  spids: [523]
                )
              ]
              spids: [523]
            )
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)})
          ]
          spids: [512]
        )
      spids: [508 511]
    )
    (FuncDef
      name: bats_test_begin
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_TEST_DESCRIPTION)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [541]
                )
              ]
              spids: [541]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$BATS_EXTENDED_SYNTAX'))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ('begin ') ($ VSub_Name '$BATS_TEST_NUMBER') (' ') 
                            ($ VSub_Name '$BATS_TEST_DESCRIPTION')
                          )
                        }
                      ]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(3)})]
                    )
                  ]
                  spids: [16777215 560]
                )
              ]
              spids: [16777215 576]
            )
            (C {(setup)})
          ]
          spids: [538]
        )
      spids: [534 537]
    )
    (FuncDef
      name: bats_test_function
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_name)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [593]
                )
              ]
              spids: [591]
            )
            (C 
              {(BATS_TEST_NAMES) (Lit_Other '[') 
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name BATS_TEST_NAMES>
                    prefix_op: VSub_Pound
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [602 608]
                  )
                ) (Lit_Other ']') (Lit_Other '=') (DQ ($ VSub_Name '$test_name'))
              }
            )
          ]
          spids: [588]
        )
      spids: [584 587]
    )
    (FuncDef
      name: bats_capture_stack_trace
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_PREVIOUS_STACK_TRACE)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (DQ 
                              (BracedVarSub
                                token: <VSub_Name BATS_CURRENT_STACK_TRACE>
                                bracket_op: (WholeArray op_id:Lit_At)
                                spids: [630 635]
                              )
                            )
                          }
                        ]
                      )
                    }
                  spids: [626]
                )
              ]
              spids: [626]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_CURRENT_STACK_TRACE)
                  op: Equal
                  rhs: {(ArrayLiteralPart)}
                  spids: [641]
                )
              ]
              spids: [641]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_pattern)
                  op: Equal
                  rhs: 
                    {
                      (DQ (' ') ($ VSub_Name '$BATS_TEST_NAME') (' ') ($ VSub_Name '$BATS_TEST_SOURCE'))
                    }
                  spids: [649]
                )
              ]
              spids: [647]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:setup_pattern)
                  op: Equal
                  rhs: {(DQ (' setup ') ($ VSub_Name '$BATS_TEST_SOURCE'))}
                  spids: [660]
                )
              ]
              spids: [658]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:teardown_pattern)
                  op: Equal
                  rhs: {(DQ (' teardown ') ($ VSub_Name '$BATS_TEST_SOURCE'))}
                  spids: [669]
                )
              ]
              spids: [667]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:frame) op:Equal spids:[679])]
              spids: [677]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(1)} spids:[684])]
              spids: [682]
            )
            (WhileUntil
              keyword: <KW_While while>
              cond: [
                (Sentence
                  child: 
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:frame)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [(C {(caller)} {(DQ ($ VSub_Name '$index'))})]
                                    )
                                  left_token: <Left_CommandSub '$('>
                                  spids: [693 699]
                                )
                              )
                            }
                          spids: [691]
                        )
                      ]
                      spids: [691]
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (C 
                      {(BATS_CURRENT_STACK_TRACE) (Lit_Other '[') 
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name BATS_CURRENT_STACK_TRACE>
                            prefix_op: VSub_Pound
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [709 715]
                          )
                        ) (Lit_Other ']') (Lit_Other '=') (DQ ($ VSub_Name '$frame'))
                      }
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (LogicalOr
                                      left: 
                                        (BoolBinary
                                          op_id: BoolBinary_GlobEqual
                                          left: {(DQ ($ VSub_Name '$frame'))}
                                          right: {(Lit_Other '*') (DQ ($ VSub_Name '$test_pattern'))}
                                        )
                                      right: 
                                        (LogicalOr
                                          left: 
                                            (BoolBinary
                                              op_id: BoolBinary_GlobEqual
                                              left: {(DQ ($ VSub_Name '$frame'))}
                                              right: 
                                                {(Lit_Other '*') (DQ ($ VSub_Name '$setup_pattern'))}
                                            )
                                          right: 
                                            (BoolBinary
                                              op_id: BoolBinary_GlobEqual
                                              left: {(DQ ($ VSub_Name '$frame'))}
                                              right: 
                                                {(Lit_Other '*') 
                                                  (DQ ($ VSub_Name '$teardown_pattern'))
                                                }
                                            )
                                        )
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Break break>)]
                          spids: [16777215 772]
                        )
                      ]
                      else_action: [(C {(let)} {(Lit_VarLike 'index+=') (1)})]
                      spids: [778 787]
                    )
                  ]
                  spids: [703 790]
                )
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_SOURCE)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(bats_frame_filename)} 
                                  {
                                    (DQ 
                                      (BracedVarSub
                                        token: <VSub_Name BATS_CURRENT_STACK_TRACE>
                                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                                        spids: [800 805]
                                      )
                                    )
                                  }
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [796 807]
                        )
                      )
                    }
                  spids: [794]
                )
              ]
              spids: [794]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_LINENO)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(bats_frame_lineno)} 
                                  {
                                    (DQ 
                                      (BracedVarSub
                                        token: <VSub_Name BATS_CURRENT_STACK_TRACE>
                                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                                        spids: [817 822]
                                      )
                                    )
                                  }
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [813 824]
                        )
                      )
                    }
                  spids: [811]
                )
              ]
              spids: [811]
            )
          ]
          spids: [623]
        )
      spids: [619 622]
    )
    (FuncDef
      name: bats_print_stack_trace
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:frame) op:Equal spids:[839])]
              spids: [837]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(1)} spids:[844])]
              spids: [842]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:count)
                  op: Equal
                  rhs: {(DQ (BracedVarSub token:<VSub_At '@'> prefix_op:VSub_Pound spids:[852 855]))}
                  spids: [850]
                )
              ]
              spids: [848]
            )
            (ForEach
              iter_name: frame
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:filename)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (C {(bats_trim_filename)} 
                                          {
                                            (DQ 
                                              (CommandSubPart
                                                command_list: 
                                                  (CommandList
                                                    children: [
                                                      (C {(bats_frame_filename)} 
                                                        {(DQ ($ VSub_Name '$frame'))}
                                                      )
                                                    ]
                                                  )
                                                left_token: <Left_CommandSub '$('>
                                                spids: [882 888]
                                              )
                                            )
                                          }
                                        )
                                      ]
                                    )
                                  left_token: <Left_CommandSub '$('>
                                  spids: [878 890]
                                )
                              )
                            }
                          spids: [876]
                        )
                      ]
                      spids: [874]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:lineno)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [(C {(bats_frame_lineno)} {(DQ ($ VSub_Name '$frame'))})]
                                    )
                                  left_token: <Left_CommandSub '$('>
                                  spids: [898 904]
                                )
                              )
                            }
                          spids: [896]
                        )
                      ]
                      spids: [894]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {($ VSub_Name '$index')} {(-eq)} {(1)} 
                                  {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(C {(echo)} {(-n)} {(DQ ('# ('))})]
                          spids: [16777215 922]
                        )
                      ]
                      else_action: [(C {(echo)} {(-n)} {(DQ ('#  '))})]
                      spids: [934 946]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:fn)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (C {(bats_frame_function)} {(DQ ($ VSub_Name '$frame'))})
                                      ]
                                    )
                                  left_token: <Left_CommandSub '$('>
                                  spids: [954 960]
                                )
                              )
                            }
                          spids: [952]
                        )
                      ]
                      spids: [950]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$fn'))} 
                                  {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Name '$BATS_TEST_NAME'))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} {(-n)} 
                              {
                                (DQ ('from function ') 
                                  (EscapedLiteralPart
                                    token: <Lit_EscapedChar '\\`'>
                                  ) ($ VSub_Name '$fn') ("' ")
                                )
                              }
                            )
                          ]
                          spids: [16777215 982]
                        )
                      ]
                      spids: [16777215 997]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {($ VSub_Name '$index')} {(-eq)} 
                                  {($ VSub_Name '$count')} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} 
                              {
                                (DQ ('in test file ') ($ VSub_Name '$filename') (', line ') 
                                  ($ VSub_Name '$lineno') (')')
                                )
                              }
                            )
                          ]
                          spids: [16777215 1014]
                        )
                      ]
                      else_action: [
                        (C {(echo)} 
                          {
                            (DQ ('in file ') ($ VSub_Name '$filename') (', line ') 
                              ($ VSub_Name '$lineno') (',')
                            )
                          }
                        )
                      ]
                      spids: [1028 1042]
                    )
                    (C {(let)} {(Lit_VarLike 'index+=') (1)})
                  ]
                  spids: [871 1052]
                )
              spids: [865 869]
            )
          ]
          spids: [834]
        )
      spids: [830 833]
    )
    (FuncDef
      name: bats_print_failed_command
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:frame)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [1066]
                )
              ]
              spids: [1064]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:status)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [1074]
                )
              ]
              spids: [1072]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:filename)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(bats_frame_filename)} {(DQ ($ VSub_Name '$frame'))})]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [1084 1090]
                        )
                      )
                    }
                  spids: [1082]
                )
              ]
              spids: [1080]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lineno)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(bats_frame_lineno)} {(DQ ($ VSub_Name '$frame'))})]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [1098 1104]
                        )
                      )
                    }
                  spids: [1096]
                )
              ]
              spids: [1094]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:failed_line)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(bats_extract_line)} {(DQ ($ VSub_Name '$filename'))} 
                                  {(DQ ($ VSub_Name '$lineno'))}
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [1113 1123]
                        )
                      )
                    }
                  spids: [1111]
                )
              ]
              spids: [1109]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:failed_command)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(bats_strip_string)} {(DQ ($ VSub_Name '$failed_line'))})]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [1131 1137]
                        )
                      )
                    }
                  spids: [1129]
                )
              ]
              spids: [1127]
            )
            (C {(echo)} {(-n)} 
              {
                (DQ ('#   ') (EscapedLiteralPart token:<Lit_EscapedChar '\\`'>) 
                  (${ VSub_Name failed_command) ("' ")
                )
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_Name '$status')} {(-eq)} {(1)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(echo)} {(DQ (failed))})]
                  spids: [16777215 1169]
                )
              ]
              else_action: [(C {(echo)} {(DQ ('failed with status ') ($ VSub_Name '$status'))})]
              spids: [1179 1190]
            )
          ]
          spids: [1061]
        )
      spids: [1057 1060]
    )
    (FuncDef
      name: bats_frame_lineno
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:frame)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [1204]
                )
              ]
              spids: [1202]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lineno)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name frame>
                          suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{(' *')})
                          spids: [1214 1218]
                        )
                      )
                    }
                  spids: [1212]
                )
              ]
              spids: [1210]
            )
            (C {(echo)} {(DQ ($ VSub_Name '$lineno'))})
          ]
          spids: [1199]
        )
      spids: [1195 1198]
    )
    (FuncDef
      name: bats_frame_function
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:frame)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [1240]
                )
              ]
              spids: [1238]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:rest)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name frame>
                          suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('* ')})
                          spids: [1250 1254]
                        )
                      )
                    }
                  spids: [1248]
                )
              ]
              spids: [1246]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:fn)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name rest>
                          suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{(' *')})
                          spids: [1262 1266]
                        )
                      )
                    }
                  spids: [1260]
                )
              ]
              spids: [1258]
            )
            (C {(echo)} {(DQ ($ VSub_Name '$fn'))})
          ]
          spids: [1235]
        )
      spids: [1231 1234]
    )
    (FuncDef
      name: bats_frame_filename
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:frame)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [1288]
                )
              ]
              spids: [1286]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:rest)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name frame>
                          suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('* ')})
                          spids: [1298 1302]
                        )
                      )
                    }
                  spids: [1296]
                )
              ]
              spids: [1294]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:filename)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name rest>
                          suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('* ')})
                          spids: [1310 1314]
                        )
                      )
                    }
                  spids: [1308]
                )
              ]
              spids: [1306]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$filename'))} {(Lit_Other '=')} 
                          {(DQ ($ VSub_Name '$BATS_TEST_SOURCE'))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(echo)} {(DQ ($ VSub_Name '$BATS_TEST_FILENAME'))})]
                  spids: [16777215 1336]
                )
              ]
              else_action: [(C {(echo)} {(DQ ($ VSub_Name '$filename'))})]
              spids: [1346 1356]
            )
          ]
          spids: [1283]
        )
      spids: [1279 1282]
    )
    (FuncDef
      name: bats_extract_line
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:filename)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [1370]
                )
              ]
              spids: [1368]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lineno)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [1378]
                )
              ]
              spids: [1376]
            )
            (C {(sed)} {(-n)} {(DQ (${ VSub_Name lineno) (p))} {(DQ ($ VSub_Name '$filename'))})
          ]
          spids: [1365]
        )
      spids: [1361 1364]
    )
    (FuncDef
      name: bats_strip_string
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:string)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [1411]
                )
              ]
              spids: [1409]
            )
            (Pipeline
              children: [
                (C {(printf)} {(DQ ('%s'))} {(DQ ($ VSub_Name '$string'))})
                (C {(sed)} {(-e)} 
                  {(DQ ('s/^[ ')) 
                    (SingleQuotedPart
                      left: <Left_DollarSingleQuote "$'">
                      tokens: [<Char_OneChar '\\t'>]
                      spids: [1436 1438]
                    ) (DQ (']*//'))
                  } {(-e)} 
                  {(DQ ('s/[ ')) 
                    (SingleQuotedPart
                      left: <Left_DollarSingleQuote "$'">
                      tokens: [<Char_OneChar '\\t'>]
                      spids: [1448 1450]
                    ) (DQ (']*') (Lit_Other '$') (//))
                  }
                )
              ]
              negated: F
            )
          ]
          spids: [1406]
        )
      spids: [1402 1405]
    )
    (FuncDef
      name: bats_trim_filename
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:filename)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [1469]
                )
              ]
              spids: [1467]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:length)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name BATS_CWD>
                          prefix_op: VSub_Pound
                          spids: [1479 1482]
                        )
                      )
                    }
                  spids: [1477]
                )
              ]
              spids: [1475]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (DQ 
                              (BracedVarSub
                                token: <VSub_Name filename>
                                suffix_op: 
                                  (Slice
                                    begin: (ArithWord w:{(Lit_Digits 0)})
                                    length: 
                                      (ArithBinary
                                        op_id: Arith_Plus
                                        left: (ArithVarRef name:length)
                                        right: (ArithWord w:{(Lit_Digits 1)})
                                      )
                                  )
                                spids: [1492 1500]
                              )
                            )
                          } {(Lit_Other '=')} {(DQ (${ VSub_Name BATS_CWD) (/))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name filename>
                            suffix_op: 
                              (Slice
                                begin: 
                                  (ArithBinary
                                    op_id: Arith_Plus
                                    left: (ArithVarRef name:length)
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                              )
                            spids: [1521 1527]
                          )
                        )
                      }
                    )
                  ]
                  spids: [16777215 1515]
                )
              ]
              else_action: [(C {(echo)} {(DQ ($ VSub_Name '$filename'))})]
              spids: [1531 1541]
            )
          ]
          spids: [1464]
        )
      spids: [1460 1463]
    )
    (FuncDef
      name: bats_debug_trap
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$BASH_SOURCE'))} 
                          {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Number '$1'))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(bats_capture_stack_trace)})]
                  spids: [16777215 1571]
                )
              ]
              spids: [16777215 1577]
            )
          ]
          spids: [1550]
        )
      spids: [1546 1549]
    )
    (FuncDef
      name: bats_error_trap
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_ERROR_STATUS)
                  op: Equal
                  rhs: {(DQ ($ VSub_QMark '$?'))}
                  spids: [1589]
                )
              ]
              spids: [1589]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_ERROR_STACK_TRACE)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (DQ 
                              (BracedVarSub
                                token: <VSub_Name BATS_PREVIOUS_STACK_TRACE>
                                bracket_op: (WholeArray op_id:Lit_At)
                                spids: [1599 1604]
                              )
                            )
                          }
                        ]
                      )
                    }
                  spids: [1595]
                )
              ]
              spids: [1595]
            )
            (C {(trap)} {(-)} {(debug)})
          ]
          spids: [1586]
        )
      spids: [1582 1585]
    )
    (FuncDef
      name: bats_teardown_trap
      body: 
        (BraceGroup
          children: [
            (C {(trap)} {(DQ (bats_exit_trap))} {(ControlFlow_Exit exit)})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:status) op:Equal rhs:{(0)} spids:[1637])]
              spids: [1635]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (SimpleCommand
                  words: [{(teardown)}]
                  redirects: [
                    (Redir
                      op: <Redir_DGreat '>>'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Name '$BATS_OUT'))}
                    )
                    (Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:status)
                      op: Equal
                      rhs: {(DQ ($ VSub_QMark '$?'))}
                      spids: [1653]
                    )
                  ]
                  spids: [1653]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_Name '$status')} {(-eq)} {(0)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BATS_TEARDOWN_COMPLETED)
                          op: Equal
                          rhs: {(1)}
                          spids: [1676]
                        )
                      ]
                      spids: [1676]
                    )
                  ]
                  spids: [16777215 1673]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$BATS_TEST_COMPLETED'))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BATS_ERROR_STATUS)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$status'))}
                          spids: [1696]
                        )
                      ]
                      spids: [1696]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BATS_ERROR_STACK_TRACE)
                          op: Equal
                          rhs: 
                            {
                              (ArrayLiteralPart
                                words: [
                                  {
                                    (DQ 
                                      (BracedVarSub
                                        token: <VSub_Name BATS_CURRENT_STACK_TRACE>
                                        bracket_op: (WholeArray op_id:Lit_At)
                                        spids: [1706 1711]
                                      )
                                    )
                                  }
                                ]
                              )
                            }
                          spids: [1702]
                        )
                      ]
                      spids: [1702]
                    )
                  ]
                  spids: [1680 1693]
                )
              ]
              spids: [16777215 1717]
            )
            (C {(bats_exit_trap)})
          ]
          spids: [1623]
        )
      spids: [1619 1622]
    )
    (FuncDef
      name: bats_exit_trap
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:status) op:Equal spids:[1735])]
              spids: [1733]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:skipped) op:Equal spids:[1740])]
              spids: [1738]
            )
            (C {(trap)} {(-)} {(err)} {(ControlFlow_Exit exit)})
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:skipped) op:Equal rhs:{(DQ )} spids:[1753])]
              spids: [1753]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$BATS_TEST_SKIPPED'))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:skipped)
                          op: Equal
                          rhs: {(DQ (' # skip'))}
                          spids: [1774]
                        )
                      ]
                      spids: [1774]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ (1))} {(KW_Bang '!') (Lit_Other '=')} 
                                  {(DQ ($ VSub_Name '$BATS_TEST_SKIPPED'))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:skipped)
                                  op: PlusEqual
                                  rhs: {(DQ (' (') ($ VSub_Name '$BATS_TEST_SKIPPED') (')'))}
                                  spids: [1801]
                                )
                              ]
                              spids: [1801]
                            )
                          ]
                          spids: [16777215 1798]
                        )
                      ]
                      spids: [16777215 1809]
                    )
                  ]
                  spids: [16777215 1771]
                )
              ]
              spids: [16777215 1812]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (AndOr
                          ops: [Op_DPipe]
                          children: [
                            (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$BATS_TEST_COMPLETED'))} 
                              {(Lit_Other ']')}
                            )
                            (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$BATS_TEARDOWN_COMPLETED'))} 
                              {(Lit_Other ']')}
                            )
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ('not ok ') ($ VSub_Name '$BATS_TEST_NUMBER') (' ') 
                            ($ VSub_Name '$BATS_TEST_DESCRIPTION')
                          )
                        }
                      ]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(3)})]
                    )
                    (SimpleCommand
                      words: [
                        {(bats_print_stack_trace)}
                        {
                          (DQ 
                            (BracedVarSub
                              token: <VSub_Name BATS_ERROR_STACK_TRACE>
                              bracket_op: (WholeArray op_id:Lit_At)
                              spids: [1860 1865]
                            )
                          )
                        }
                      ]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(3)})]
                    )
                    (SimpleCommand
                      words: [
                        {(bats_print_failed_command)}
                        {
                          (DQ 
                            (BracedVarSub
                              token: <VSub_Name BATS_ERROR_STACK_TRACE>
                              bracket_op: 
                                (ArrayIndex
                                  expr: 
                                    (ArithBinary
                                      op_id: Arith_Minus
                                      left: 
                                        (ArithWord
                                          w: 
                                            {
                                              (BracedVarSub
                                                token: <VSub_Name BATS_ERROR_STACK_TRACE>
                                                prefix_op: VSub_Pound
                                                bracket_op: (WholeArray op_id:Lit_At)
                                                spids: [1878 1884]
                                              )
                                            }
                                        )
                                      right: (ArithWord w:{(Lit_Digits 1)})
                                    )
                                )
                              spids: [1875 1888]
                            )
                          )
                        }
                        {(DQ ($ VSub_Name '$BATS_ERROR_STATUS'))}
                      ]
                      redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(3)})]
                    )
                    (SimpleCommand
                      words: [{(sed)} {(-e)} {(DQ ('s/^/# /'))}]
                      redirects: [
                        (Redir
                          op: <Redir_Less '<'>
                          fd: 16777215
                          arg_word: {(DQ ($ VSub_Name '$BATS_OUT'))}
                        )
                        (Redir
                          op: <Redir_GreatAnd '>&'>
                          fd: 16777215
                          arg_word: {(3)}
                        )
                      ]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:status) op:Equal rhs:{(1)} spids:[1917])]
                      spids: [1917]
                    )
                  ]
                  spids: [16777215 1841]
                )
              ]
              else_action: [
                (SimpleCommand
                  words: [
                    {(echo)}
                    {
                      (DQ ('ok ') (${ VSub_Name BATS_TEST_NUMBER) (${ VSub_Name skipped) (' ') 
                        (${ VSub_Name BATS_TEST_DESCRIPTION)
                      )
                    }
                  ]
                  redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(3)})]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:status) op:Equal rhs:{(0)} spids:[1944])]
                  spids: [1944]
                )
              ]
              spids: [1921 1948]
            )
            (C {(rm)} {(-f)} {(DQ ($ VSub_Name '$BATS_OUT'))})
            (ControlFlow
              token: <ControlFlow_Exit exit>
              arg_word: {(DQ ($ VSub_Name '$status'))}
            )
          ]
          spids: [1730]
        )
      spids: [1726 1729]
    )
    (FuncDef
      name: bats_perform_tests
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ (1..) ($ VSub_Pound '$#'))})
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:test_number) op:Equal rhs:{(1)} spids:[1985])]
              spids: [1985]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:status) op:Equal rhs:{(0)} spids:[1989])]
              spids: [1989]
            )
            (ForEach
              iter_name: test_name
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      ops: [Op_DPipe]
                      children: [
                        (C {(DQ ($ VSub_Number '$0'))} {($ VSub_Name '$BATS_EXTENDED_SYNTAX')} 
                          {(DQ ($ VSub_Name '$BATS_TEST_FILENAME'))} {(DQ ($ VSub_Name '$test_name'))} {(DQ ($ VSub_Name '$test_number'))}
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:status)
                              op: Equal
                              rhs: {(1)}
                              spids: [2027]
                            )
                          ]
                          spids: [2027]
                        )
                      ]
                    )
                    (C {(let)} {(Lit_VarLike 'test_number+=') (1)})
                  ]
                  spids: [2004 2037]
                )
              spids: [1998 2002]
            )
            (ControlFlow
              token: <ControlFlow_Exit exit>
              arg_word: {(DQ ($ VSub_Name '$status'))}
            )
          ]
          spids: [1974]
        )
      spids: [1970 1973]
    )
    (FuncDef
      name: bats_perform_test
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_TEST_NAME)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [2056]
                )
              ]
              spids: [2056]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (DQ 
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (AndOr
                                        ops: [Op_DPipe]
                                        children: [
                                          (C {(type)} {(-t)} {(DQ ($ VSub_Name '$BATS_TEST_NAME'))})
                                          (C {(true)})
                                        ]
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [2067 2079]
                              )
                            )
                          } {(Lit_Other '=')} {(DQ (function))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BATS_TEST_NUMBER)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number '$2'))}
                          spids: [2094]
                        )
                      ]
                      spids: [2094]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$BATS_TEST_NUMBER'))} 
                                  {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} {(DQ (1..1))})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:BATS_TEST_NUMBER)
                                  op: Equal
                                  rhs: {(DQ (1))}
                                  spids: [2123]
                                )
                              ]
                              spids: [2123]
                            )
                          ]
                          spids: [16777215 2113]
                        )
                      ]
                      spids: [16777215 2129]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BATS_TEST_COMPLETED)
                          op: Equal
                          rhs: {(DQ )}
                          spids: [2133]
                        )
                      ]
                      spids: [2133]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BATS_TEARDOWN_COMPLETED)
                          op: Equal
                          rhs: {(DQ )}
                          spids: [2138]
                        )
                      ]
                      spids: [2138]
                    )
                    (C {(trap)} 
                      {
                        (DQ ('bats_debug_trap ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) (BASH_SOURCE) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                        )
                      } {(debug)}
                    )
                    (C {(trap)} {(DQ (bats_error_trap))} {(err)})
                    (C {(trap)} {(DQ (bats_teardown_trap))} {(ControlFlow_Exit exit)})
                    (SimpleCommand
                      words: [{(DQ ($ VSub_Name '$BATS_TEST_NAME'))}]
                      redirects: [
                        (Redir
                          op: <Redir_DGreat '>>'>
                          fd: 16777215
                          arg_word: {(DQ ($ VSub_Name '$BATS_OUT'))}
                        )
                        (Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})
                      ]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BATS_TEST_COMPLETED)
                          op: Equal
                          rhs: {(1)}
                          spids: [2187]
                        )
                      ]
                      spids: [2187]
                    )
                  ]
                  spids: [16777215 2091]
                )
              ]
              else_action: [
                (SimpleCommand
                  words: [
                    {(echo)}
                    {
                      (DQ ('bats: unknown test name ') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\`'>) ($ VSub_Name '$BATS_TEST_NAME') ("'")
                      )
                    }
                  ]
                  redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
                )
                (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
              ]
              spids: [2192 2213]
            )
          ]
          spids: [2053]
        )
      spids: [2049 2052]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$TMPDIR'))} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_TMPDIR)
                  op: Equal
                  rhs: {(DQ (/tmp))}
                  spids: [2234]
                )
              ]
              spids: [2234]
            )
          ]
          spids: [16777215 2231]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:BATS_TMPDIR)
              op: Equal
              rhs: 
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name TMPDIR>
                      suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /)})
                      spids: [2244 2248]
                    )
                  )
                }
              spids: [2242]
            )
          ]
          spids: [2242]
        )
      ]
      spids: [2239 2251]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BATS_TMPNAME)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$BATS_TMPDIR') (/bats.) ($ VSub_Dollar '$$'))}
          spids: [2254]
        )
      ]
      spids: [2254]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BATS_PARENT_TMPNAME)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$BATS_TMPDIR') (/bats.) ($ VSub_Name '$PPID'))}
          spids: [2261]
        )
      ]
      spids: [2261]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BATS_OUT)
          op: Equal
          rhs: {(DQ (${ VSub_Name BATS_TMPNAME) (.out))}
          spids: [2268]
        )
      ]
      spids: [2268]
    )
    (FuncDef
      name: bats_preprocess_source
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BATS_TEST_SOURCE)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name BATS_TMPNAME) (.src))}
                  spids: [2284]
                )
              ]
              spids: [2284]
            )
            (Pipeline
              children: [
                (BraceGroup
                  children: [
                    (Sentence
                      child: 
                        (SimpleCommand
                          words: [{(tr)} {(-d)} {(SQ <'\\r'>)}]
                          redirects: [
                            (Redir
                              op: <Redir_Less '<'>
                              fd: 16777215
                              arg_word: {(DQ ($ VSub_Name '$BATS_TEST_FILENAME'))}
                            )
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (Sentence child:(C {(echo)}) terminator:<Op_Semi ';'>)
                  ]
                  spids: [2293]
                )
                (SimpleCommand
                  words: [{(bats-preprocess)}]
                  redirects: [
                    (Redir
                      op: <Redir_Great '>'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Name '$BATS_TEST_SOURCE'))}
                    )
                  ]
                )
              ]
              negated: F
            )
            (C {(trap)} {(DQ (bats_cleanup_preprocessed_source))} {(err)} {(ControlFlow_Exit exit)})
            (C {(trap)} {(DQ ('bats_cleanup_preprocessed_source; exit 1'))} {(int)})
          ]
          spids: [2281]
        )
      spids: [2277 2280]
    )
    (FuncDef
      name: bats_cleanup_preprocessed_source
      body: 
        (BraceGroup
          children: [(C {(rm)} {(-f)} {(DQ ($ VSub_Name '$BATS_TEST_SOURCE'))})]
          spids: [2352]
        )
      spids: [2348 2351]
    )
    (FuncDef
      name: bats_evaluate_preprocessed_source
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$BATS_TEST_SOURCE'))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BATS_TEST_SOURCE)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name BATS_PARENT_TMPNAME) (.src))}
                          spids: [2389]
                        )
                      ]
                      spids: [2389]
                    )
                  ]
                  spids: [16777215 2386]
                )
              ]
              spids: [16777215 2398]
            )
            (C {(source)} {(DQ ($ VSub_Name '$BATS_TEST_SOURCE'))})
          ]
          spids: [2370]
        )
      spids: [2366 2369]
    )
    (SimpleCommand
      words: [{(exec)}]
      redirects: [(Redir op:<Redir_LessAnd '3<&'> fd:3 arg_word:{(1)})]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other '[')} {(DQ ($ VSub_Pound '$#'))} {(-eq)} {(0)} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(bats_preprocess_source)})
            (C {(bats_evaluate_preprocessed_source)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$BATS_COUNT_ONLY'))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name BATS_TEST_NAMES>
                            prefix_op: VSub_Pound
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [2460 2466]
                          )
                        )
                      }
                    )
                  ]
                  spids: [16777215 2454]
                )
              ]
              else_action: [
                (C {(bats_perform_tests)} 
                  {
                    (DQ 
                      (BracedVarSub
                        token: <VSub_Name BATS_TEST_NAMES>
                        bracket_op: (WholeArray op_id:Lit_At)
                        spids: [2476 2481]
                      )
                    )
                  }
                )
              ]
              spids: [2470 2485]
            )
          ]
          spids: [16777215 2431]
        )
      ]
      else_action: [
        (C {(bats_evaluate_preprocessed_source)})
        (C {(bats_perform_test)} {(DQ ($ VSub_At '$@'))})
      ]
      spids: [2487 2499]
    )
  ]
)