(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: [-1 37]
        )
      ]
      spids: [-1 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: [-1 70]
        )
      ]
      spids: [-1 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_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[111])]
            )
            (C {(exit)} {(1)})
          ]
          spids: [-1 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_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[145])]
            )
            (C {(exit)} {(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: [-1 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
              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_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[273])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [262]
                )
              ]
              op_id: Op_DPipe
            )
            (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
              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]
                )
              ]
              op_id: Op_DPipe
            )
            (AndOr
              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]
                )
              ]
              op_id: Op_DPipe
            )
            (AndOr
              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]
                )
              ]
              op_id: Op_DPipe
            )
            (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_id: Redir_GreatAnd
                                      fd: 2
                                      arg_word: {(1)}
                                      spids: [400]
                                    )
                                  ]
                                )
                              ]
                            )
                          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: {(SQ <Lit_EscapedChar "\\n">)}
                  spids: [416]
                )
                (assign_pair
                  lhs: (LhsName name:lines)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{($ VSub_Name "$output")}])}
                  spids: [421]
                )
              ]
              spids: [416]
            )
            (AndOr
              children: [
                (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$e"))} {(Lit_Other "]")})
                (C {(set)} {(-e)})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$E"))} {(Lit_Other "]")})
                (C {(set)} {(-E)})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$T"))} {(Lit_Other "]")})
                (C {(set)} {(-T)})
              ]
              op_id: Op_DPipe
            )
            (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:[484487])
    (FuncDef name:teardown body:(BraceGroup children:[(C {(true)})] spids:[500]) spids:[496499])
    (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]
            )
            (C {(exit)} {(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_id:Redir_GreatAnd fd:-1 arg_word:{(3)} spids:[572])]
                    )
                  ]
                  spids: [-1 560]
                )
              ]
              spids: [-1 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]
            )
            (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: [-1 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:[852855]))}
                  spids: [850]
                )
              ]
              spids: [848]
            )
            (ForEach
              iter_name: frame
              iter_words: [{(DQ ($ VSub_At "$@"))}]
              do_arg_iter: False
              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: [-1 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: [-1 982]
                        )
                      ]
                      spids: [-1 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: [-1 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: [-1 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: [-1 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/^[ ")) (SQ <Lit_EscapedChar "\\t">) (DQ ("]*//"))} {(-e)} 
                  {(DQ ("s/[ ")) (SQ <Lit_EscapedChar "\\t">) (DQ ("]*") (Lit_Other "$") (//))}
                )
              ]
              negated: False
            )
          ]
          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: [-1 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: [-1 1571]
                )
              ]
              spids: [-1 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))} {(exit)})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:status) op:Equal rhs:{(0)} spids:[1637])]
              spids: [1635]
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(teardown)}]
                  redirects: [
                    (Redir
                      op_id: Redir_DGreat
                      fd: -1
                      arg_word: {(DQ ($ VSub_Name "$BATS_OUT"))}
                      spids: [1643]
                    )
                    (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[1648])
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:status)
                      op: Equal
                      rhs: {(DQ ($ VSub_QMark "$?"))}
                      spids: [1653]
                    )
                  ]
                  spids: [1653]
                )
              ]
              op_id: Op_DPipe
            )
            (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: [-1 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: [-1 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)} {(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: [-1 1798]
                        )
                      ]
                      spids: [-1 1809]
                    )
                  ]
                  spids: [-1 1771]
                )
              ]
              spids: [-1 1812]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (AndOr
                          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 "]")}
                            )
                          ]
                          op_id: Op_DPipe
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ("not ok ") ($ VSub_Name "$BATS_TEST_NUMBER") (" ") 
                            ($ VSub_Name "$BATS_TEST_DESCRIPTION")
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(3)} spids:[1853])]
                    )
                    (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_id:Redir_GreatAnd fd:-1 arg_word:{(3)} spids:[1868])]
                    )
                    (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_id:Redir_GreatAnd fd:-1 arg_word:{(3)} spids:[1895])]
                    )
                    (SimpleCommand
                      words: [{(sed)} {(-e)} {(DQ ("s/^/# /"))}]
                      redirects: [
                        (Redir
                          op_id: Redir_Less
                          fd: -1
                          arg_word: {(DQ ($ VSub_Name "$BATS_OUT"))}
                          spids: [1907]
                        )
                        (Redir
                          op_id: Redir_GreatAnd
                          fd: -1
                          arg_word: {(3)}
                          spids: [1913]
                        )
                      ]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:status) op:Equal rhs:{(1)} spids:[1917])]
                      spids: [1917]
                    )
                  ]
                  spids: [-1 1841]
                )
              ]
              else_action: [
                (SimpleCommand
                  words: [
                    {(echo)}
                    {
                      (DQ ("ok ") (${ VSub_Name BATS_TEST_NUMBER) (${ VSub_Name skipped) (" ") 
                        (${ VSub_Name BATS_TEST_DESCRIPTION)
                      )
                    }
                  ]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(3)} spids:[1940])]
                )
                (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"))})
            (C {(exit)} {(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: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      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]
                        )
                      ]
                      op_id: Op_DPipe
                    )
                    (C {(let)} {(Lit_VarLike "test_number+=") (1)})
                  ]
                  spids: [2004 2037]
                )
              spids: [1998 2002]
            )
            (C {(exit)} {(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
                                        children: [
                                          (C {(type)} {(-t)} {(DQ ($ VSub_Name "$BATS_TEST_NAME"))})
                                          (C {(true)})
                                        ]
                                        op_id: Op_DPipe
                                      )
                                    ]
                                  )
                                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: [-1 2113]
                        )
                      ]
                      spids: [-1 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))} {(exit)})
                    (SimpleCommand
                      words: [{(DQ ($ VSub_Name "$BATS_TEST_NAME"))}]
                      redirects: [
                        (Redir
                          op_id: Redir_DGreat
                          fd: -1
                          arg_word: {(DQ ($ VSub_Name "$BATS_OUT"))}
                          spids: [2178]
                        )
                        (Redir
                          op_id: Redir_GreatAnd
                          fd: 2
                          arg_word: {(1)}
                          spids: [2183]
                        )
                      ]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BATS_TEST_COMPLETED)
                          op: Equal
                          rhs: {(1)}
                          spids: [2187]
                        )
                      ]
                      spids: [2187]
                    )
                  ]
                  spids: [-1 2091]
                )
              ]
              else_action: [
                (SimpleCommand
                  words: [
                    {(echo)}
                    {
                      (DQ ("bats: unknown test name ") 
                        (EscapedLiteralPart token:<Lit_EscapedChar "\\`">) ($ VSub_Name "$BATS_TEST_NAME") ("'")
                      )
                    }
                  ]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[2204])]
                )
                (C {(exit)} {(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: [-1 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_id: Redir_Less
                              fd: -1
                              arg_word: {(DQ ($ VSub_Name "$BATS_TEST_FILENAME"))}
                              spids: [2303]
                            )
                          ]
                        )
                      terminator: <Op_Semi ";">
                    )
                    (Sentence child:(C {(echo)}) terminator:<Op_Semi ";">)
                  ]
                  spids: [2293]
                )
                (SimpleCommand
                  words: [{(bats-preprocess)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(DQ ($ VSub_Name "$BATS_TEST_SOURCE"))}
                      spids: [2319]
                    )
                  ]
                )
              ]
              negated: False
            )
            (C {(trap)} {(DQ (bats_cleanup_preprocessed_source))} {(err)} {(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: [-1 2386]
                )
              ]
              spids: [-1 2398]
            )
            (C {(source)} {(DQ ($ VSub_Name "$BATS_TEST_SOURCE"))})
          ]
          spids: [2370]
        )
      spids: [2366 2369]
    )
    (SimpleCommand
      words: [{(exec)}]
      redirects: [(Redir op_id:Redir_LessAnd fd:3 arg_word:{(1)} spids:[2412])]
    )
    (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: [-1 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: [-1 2431]
        )
      ]
      else_action: [
        (C {(bats_evaluate_preprocessed_source)})
        (C {(bats_perform_test)} {(DQ ($ VSub_At "$@"))})
      ]
      spids: [2487 2499]
    )
  ]
)