(command.CommandList
  children: [
    (command.ShFunction
      name: test_breakpoint
      body: 
        (BraceGroup
          children: [
            (command.ShFunction
              name: _Dbg_errmsg
              body: 
                (BraceGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:errmsgs)
                          op: assign_op.PlusEqual
                          rhs: 
                            {
                              (sh_array_literal
                                left: <Id.Op_LParen _>
                                words: [{(DQ ($ Id.VSub_At '$@'))}]
                              )
                            }
                          spids: [27]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ShFunction
              name: _Dbg_msg
              body: 
                (BraceGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:msgs)
                          op: assign_op.PlusEqual
                          rhs: 
                            {
                              (sh_array_literal
                                left: <Id.Op_LParen _>
                                words: [{(DQ ($ Id.VSub_At '$@'))}]
                              )
                            }
                          spids: [45]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ShFunction
              name: _Dbg_adjust_filename
              body: (BraceGroup children:[(C {<echo>} {($ Id.VSub_Star '$*')})])
            )
            (command.ShFunction
              name: _Dbg_expand_filename
              body: (BraceGroup children:[(C {<echo>} {($ Id.VSub_Star '$*')})])
            )
            (C {<typeset>} {<-a>} {<msgs>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:msgs)
                  op: assign_op.Equal
                  rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                  spids: [94]
                )
              ]
            )
            (C {<_Dbg_set_brkpt>})
            (C {<assertNotEquals>} {(SQ <'set breakpoint no parameters'>)} {(SQ <0>)} 
              {(DQ ($ Id.VSub_QMark '$?'))}
            )
            (C {<_Dbg_set_brkpt>} {<1>} {<2>} {<3>} {<4>} {<5>})
            (C {<assertNotEquals>} {(SQ <'set breakpoint too many parameter'>)} {(SQ <0>)} 
              {(DQ ($ Id.VSub_QMark '$?'))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_Dbg_frame_last_lineno)
                  op: assign_op.Equal
                  rhs: {<5>}
                  spids: [156]
                )
              ]
            )
            (C {<_Dbg_set_brkpt>} {<test.sh>} {<5>} {<0>})
            (C {<assertEquals>} {(SQ <'simple set breakpoint'>)} 
              {(SQ <'Breakpoint 1 set in file test.sh, line 5.'>)} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name msgs>
                    bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                  )
                )
              }
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:msgs)
                  op: assign_op.Equal
                  rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                  spids: [192]
                )
              ]
            )
            (C {<_Dbg_unset_brkpt>})
            (C {<assertEquals>} {(SQ <'unset_brkpt no params invalid'>)} {(SQ <0>)} 
              {(DQ ($ Id.VSub_QMark '$?'))}
            )
            (C {<_Dbg_unset_brkpt>} {<1>} {<2>} {<3>})
            (C {<assertEquals>} {(SQ <0>)} {(DQ ($ Id.VSub_QMark '$?'))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:msgs)
                  op: assign_op.Equal
                  rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                  spids: [256]
                )
              ]
            )
            (C {<_Dbg_unset_brkpt>} {<test.sh>} {<5>})
            (C {<assertEquals>} {(SQ <'valid unset_brkpt'>)} {(SQ <1>)} {(DQ ($ Id.VSub_QMark '$?'))})
            (C {<assertEquals>} {(SQ <0>)} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name msgs>
                    prefix_op: (Id.VSub_Pound)
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                )
              }
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:msgs)
                      op: assign_op.Equal
                      rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                      spids: [321]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:errmsgs)
                  op: assign_op.Equal
                  rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                  spids: [326]
                )
              ]
            )
            (C {<_Dbg_enable_disable_brkpt>})
            (C {<assertEquals>} {(SQ <enable_disable_brkpt>)} {(SQ <1>)} {(DQ ($ Id.VSub_QMark '$?'))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:msgs)
                  op: assign_op.Equal
                  rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                  spids: [358]
                )
              ]
            )
            (C {<_Dbg_enable_disable_brkpt>} {<1>} {(SQ <enabled>)} {<1>})
            (C {<assertEquals>} {(DQ <'enable_disable_brkpt enabled'>)} 
              {(DQ <'Breakpoint entry 1 doesn\'t exist, so nothing done.'>)} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name errmsgs>
                    bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                  )
                )
              }
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:msgs)
                      op: assign_op.Equal
                      rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                      spids: [398]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:errmsgs)
                  op: assign_op.Equal
                  rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                  spids: [403]
                )
              ]
            )
            (C {<_Dbg_set_brkpt>} {<test.sh>} {<6>} {<1>})
            (C {<assertEquals>} {(SQ <'add 2nd breakpoint'>)} 
              {(SQ <'One-time breakpoint 2 set in file test.sh, line 6.'>)} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name msgs>
                    bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                  )
                )
              }
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:msgs)
                      op: assign_op.Equal
                      rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                      spids: [445]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:errmsgs)
                  op: assign_op.Equal
                  rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                  spids: [450]
                )
              ]
            )
            (C {<_Dbg_enable_disable_brkpt>} {<1>} {(SQ <enabled>)} {<2>})
            (C {<assertEquals>} {(SQ <'redundant 2nd breakpoint enable'>)} 
              {(SQ <'Breakpoint entry 2 already enabled, so nothing done.'>)} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name errmsgs>
                    bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                  )
                )
              }
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:msgs)
                      op: assign_op.Equal
                      rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                      spids: [490]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:errmsgs)
                  op: assign_op.Equal
                  rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                  spids: [495]
                )
              ]
            )
            (C {<_Dbg_enable_disable_brkpt>} {<0>} {(SQ <enabled>)} {<2>})
            (C {<assertEquals>} {(SQ <'Breakpoint entry 2 enabled.'>)} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name msgs>
                    bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                  )
                )
              }
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:msgs)
                      op: assign_op.Equal
                      rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                      spids: [529]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:errmsgs)
                  op: assign_op.Equal
                  rhs: {(sh_array_literal left:<Id.Op_LParen _>)}
                  spids: [534]
                )
              ]
            )
            (C {<_Dbg_enable_disable_brkpt>} {<1>} {(SQ <disabled>)} {<2>})
            (C {<assertEquals>} {(SQ <0>)} {(DQ ($ Id.VSub_QMark '$?'))})
            (C {<assertEquals>} {(SQ <'Breakpoint entry 2 disabled.'>)} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name msgs>
                    bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                  )
                )
              }
            )
            (C {<_Dbg_clear_all_brkpt>})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:abs_top_srcdir)
          op: assign_op.Equal
          rhs: {<'/src/external-vcs/sourceforge/bashdb'>}
          spids: [584]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:abs_top_srcdir)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name abs_top_srcdir>
                suffix_op: (suffix_op.Unary tok:<Id.VOp1_DPercent '%%'> arg_word:{<Id.Lit_Slash '/'>})
              ) <'/'>
            }
          spids: [590]
        )
      ]
    )
    (C {<.>} {(${ Id.VSub_Name abs_top_srcdir) <'test/unit/helper.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$abs_top_srcdir') <'/init/pre.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$abs_top_srcdir') <'/lib/file.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$abs_top_srcdir') <'/lib/fns.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$abs_top_srcdir') <'/lib/journal.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$abs_top_srcdir') <'/lib/break.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$abs_top_srcdir') <'/lib/validate.sh'>})
    (C {<set>} {<-->})
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.DBracket
          expr: 
            (bool_expr.Binary
              op_id: Id.BoolBinary_GlobDEqual
              left: {($ Id.VSub_Number '$0')}
              right: {(${ Id.VSub_Name BASH_SOURCE)}
            )
        )
        (C {<.>} {(${ Id.VSub_Name shunit_file)})
      ]
    )
  ]
)