(CommandList
  children: [
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {($ VSub_Number "$0")}
                      right: 
                        {
                          (BracedVarSub
                            token: <VSub_Name BASH_SOURCE>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                            spids: [63 68]
                          )
                        }
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dirname)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name BASH_SOURCE>
                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                        suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ("*")})
                        spids: [78 86]
                      )
                    }
                  spids: [77]
                )
              ]
              spids: [77]
            )
            (AndOr
              children: [
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {($ VSub_Name "$dirname")}
                      right: {($ VSub_Number "$0")}
                    )
                )
                (AndOr
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:top_dir)
                          op: Equal
                          rhs: {(SQ <..>)}
                          spids: [101]
                        )
                      ]
                      spids: [101]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:top_dir)
                          op: Equal
                          rhs: {(${ VSub_Name dirname) (/..)}
                          spids: [108]
                        )
                      ]
                      spids: [108]
                    )
                  ]
                  op_id: Op_DPipe
                )
              ]
              op_id: Op_DAmp
            )
            (ForEach
              iter_name: lib_file
              iter_words: [{(help)} {(alias)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Sentence
                      child: 
                        (C {(source)} {($ VSub_Name "$top_dir") (/lib/) (${ VSub_Name lib_file) (.sh)})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  spids: [127 139]
                )
              spids: [120 125]
            )
          ]
          spids: [-1 74]
        )
      ]
      spids: [-1 141]
    )
    (C {(_Dbg_help_add)} {(complete)} 
      {
        (SQ <"**complete** *prefix-str*...\n"> <"\n"> <"\n"> 
          <"Show command completion strings for *prefix-str*\n">
        )
      }
    )
    (FuncDef
      name: _Dbg_do_complete
      body: 
        (BraceGroup
          children: [
            (Sentence child:(C {(typeset)} {(-a)} {(args)}) terminator:<Op_Semi ";">)
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:args)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{($ VSub_At "$@")}])}
                  spids: [171]
                )
              ]
              spids: [171]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_Dbg_matches)
                  op: Equal
                  rhs: {(ArrayLiteralPart)}
                  spids: [177]
                )
              ]
              spids: [177]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DParen
                          child: 
                            (ArithBinary
                              op_id: Arith_DEqual
                              left: 
                                (ArithWord
                                  w: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name args>
                                        prefix_op: VSub_Pound
                                        bracket_op: (WholeArray op_id:Lit_At)
                                        spids: [186 192]
                                      )
                                    }
                                )
                              right: (ArithWord w:{(Lit_Digits 2)})
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(_Dbg_subcmd_complete)} 
                      {
                        (BracedVarSub
                          token: <VSub_Name args>
                          bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                          spids: [208 213]
                        )
                      } 
                      {
                        (BracedVarSub
                          token: <VSub_Name args>
                          bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)}))
                          spids: [215 220]
                        )
                      }
                    )
                  ]
                  spids: [-1 203]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DParen
                          child: 
                            (ArithBinary
                              op_id: Arith_DEqual
                              left: 
                                (ArithWord
                                  w: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name args>
                                        prefix_op: VSub_Pound
                                        bracket_op: (WholeArray op_id:Lit_At)
                                        spids: [227 233]
                                      )
                                    }
                                )
                              right: (ArithWord w:{(Lit_Digits 1)})
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(eval)} 
                      {
                        (DQ ("builtin compgen -W ") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                          (BracedVarSub
                            token: <VSub_Name _Dbg_debugger_commands>
                            prefix_op: VSub_Bang
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [256 262]
                          ) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) (" -- ") 
                          (BracedVarSub
                            token: <VSub_Name args>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                            spids: [265 270]
                          )
                        )
                      }
                    )
                  ]
                  spids: [223 244]
                )
              ]
              spids: [-1 274]
            )
            (C {(typeset)} {(-i)} {(i)})
            (ForExpr
              init: 
                (BinaryAssign
                  op_id: Arith_Equal
                  left: (LhsName name:i)
                  right: (ArithWord w:{(Lit_Digits 0)})
                )
              cond: 
                (ArithBinary
                  op_id: Arith_Less
                  left: (ArithVarRef name:i)
                  right: 
                    (ArithWord
                      w: 
                        {
                          (BracedVarSub
                            token: <VSub_Name _Dbg_matches>
                            prefix_op: VSub_Pound
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [297 303]
                          )
                        }
                    )
                )
              update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i))
              body: 
                (DoGroup
                  children: [
                    (C {(_Dbg_msg)} 
                      {
                        (BracedVarSub
                          token: <VSub_Name _Dbg_matches>
                          bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")}))
                          spids: [320 325]
                        )
                      }
                    )
                  ]
                  spids: [315 328]
                )
            )
          ]
          spids: [161]
        )
      spids: [157 160]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {($ VSub_Number "$0")}
                      right: 
                        {
                          (BracedVarSub
                            token: <VSub_Name BASH_SOURCE>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                            spids: [344 349]
                          )
                        }
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(source)} {(${ VSub_Name top_dir) (/lib/msg.sh)})
            (ForEach
              iter_name: _Dbg_file
              iter_words: [
                (BracedWordTree
                  parts: [
                    (${ VSub_Name top_dir)
                    (/command/)
                    (BracedAltPart words:[{(c) (Lit_Other "*")}{(help)}])
                    (.sh)
                  ]
                )
              ]
              do_arg_iter: False
              body: (DoGroup children:[(C {(source)} {($ VSub_Name "$_Dbg_file")})] spids:[386394])
              spids: [371 384]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_Dbg_args)
                  op: Equal
                  rhs: {(SQ <complete>)}
                  spids: [398]
                )
              ]
              spids: [398]
            )
            (C {(_Dbg_do_help)} {(complete)})
            (C {(_Dbg_do_complete)} {(c)})
          ]
          spids: [-1 355]
        )
      ]
      spids: [-1 413]
    )
  ]
)