(command.CommandList
  children: [
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobDEqual
                          left: {($ Id.VSub_Number '$0')}
                          right: 
                            {
                              (braced_var_sub
                                token: <Id.VSub_Name BASH_SOURCE>
                                bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                              )
                            }
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dirname)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: <Id.VSub_Name BASH_SOURCE>
                        bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                        suffix_op: 
                          (suffix_op.Unary
                            tok: <Id.VOp1_Percent '%'>
                            arg_word: {<Id.Lit_Slash '/'> <Id.Lit_Other '*'>}
                          )
                      )
                    }
                  spids: [83]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.Binary
                      op_id: Id.BoolBinary_GlobDEqual
                      left: {($ Id.VSub_DollarName '$dirname')}
                      right: {($ Id.VSub_Number '$0')}
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:top_dir)
                      op: assign_op.Equal
                      rhs: {(SQ <'../..'>)}
                      spids: [107]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:top_dir)
                      op: assign_op.Equal
                      rhs: {(${ Id.VSub_Name dirname) <'/../..'>}
                      spids: [114]
                    )
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.Unary
                      op_id: Id.BoolUnary_z
                      child: {($ Id.VSub_DollarName '$_Dbg_libdir')}
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_Dbg_libdir)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$top_dir')}
                      spids: [131]
                    )
                  ]
                )
              ]
            )
            (command.ForEach
              iter_name: file
              iter_words: [{<help>} {<alias>}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Sentence
                      child: 
                        (C {<source>} 
                          {($ Id.VSub_DollarName '$top_dir') <'/lib/'> (${ Id.VSub_Name file) <.sh>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
            )
          ]
          spids: [61 80]
        )
      ]
    )
    (C {<_Dbg_help_add_sub>} {<set>} {<highlight>} 
      {
        (SQ <'**set** **highlight** [**dark**|**light**|**off**|**reset**]\n'> <'\n'> 
          <'Set using terminal highlight.\n'> <'\n'> <'Use **reset** to set highlighting on and force a redo of syntax\n'> 
          <'highlighting of already cached files. This may be needed if the\n'> <'debugger was started without syntax highlighting initially.\n'> <'\n'> 
          <'**dark** sets sets for highlighting for a terminal with a dark background and\n'> <'**light** set for highlighting for a terminal with a light background.\n'> <'\n'> <'See also:\n'> 
          <'---------\n'> <'\n'> <'**show highlight**.\n'>
        )
      }
    )
    (C {<Id.Lit_ArrayLhsOpen '_Dbg_next_complete['> <set>} 
      {<highlight> <Id.Lit_ArrayLhsClose ']='> (SQ <_Dbg_complete_highlight>)}
    )
    (command.ShFunction
      name: _Dbg_complete_highlight
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:COMPREPLY)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: <Id.Op_LParen _>
                        words: [{<dark>} {<light>} {<off>} {<reset>}]
                      )
                    }
                  spids: [207]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: _Dbg_do_set_highlight
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DParen
                              child: 
                                (arith_expr.Unary
                                  op_id: Id.Arith_Bang
                                  child: <Id.Lit_ArithVarLike _Dbg_working_term_highlight>
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<_Dbg_errmsg>} {(DQ <'Can\'t run term-highlight. Setting forced off'>)})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [228 241]
                )
              ]
            )
            (C {<typeset>} 
              {<Id.Lit_VarLike 'onoff='> 
                (braced_var_sub
                  token: <Id.VSub_Number 1>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{(SQ <light>)})
                )
              }
            )
            (command.Case
              to_match: {($ Id.VSub_DollarName '$onoff')}
              arms: [
                (case_arm
                  pat_list: [{<on>} {<light>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_Dbg_set_highlight)
                          op: assign_op.Equal
                          rhs: {(SQ <light>)}
                          spids: [287]
                        )
                      ]
                    )
                    (C {<_Dbg_filecache_reset>})
                    (C {<_Dbg_readin>} {($ Id.VSub_DollarName '$_Dbg_frame_last_filename')})
                  ]
                  spids: [278 284 301 -1]
                )
                (case_arm
                  pat_list: [{<dark>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_Dbg_set_highlight)
                          op: assign_op.Equal
                          rhs: {(SQ <dark>)}
                          spids: [309]
                        )
                      ]
                    )
                    (C {<_Dbg_filecache_reset>})
                    (C {<_Dbg_readin>} {($ Id.VSub_DollarName '$_Dbg_frame_last_filename')})
                  ]
                  spids: [304 306 323 -1]
                )
                (case_arm
                  pat_list: [{<off>} {<0>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_Dbg_set_highlight)
                          op: assign_op.Equal
                          rhs: {(SQ )}
                          spids: [335]
                        )
                      ]
                    )
                    (C {<_Dbg_filecache_reset>})
                    (C {<_Dbg_readin>} {($ Id.VSub_DollarName '$_Dbg_frame_last_filename')})
                  ]
                  spids: [326 332 348 -1]
                )
                (case_arm
                  pat_list: [{<reset>}]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_z
                              child: {($ Id.VSub_DollarName '$_Dbg_set_highlight')}
                            )
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:_Dbg_set_highlight)
                              op: assign_op.Equal
                              rhs: {(SQ <light>)}
                              spids: [366]
                            )
                          ]
                        )
                      ]
                    )
                    (C {<_Dbg_filecache_reset>})
                    (C {<_Dbg_readin>} {($ Id.VSub_DollarName '$_Dbg_frame_last_filename')})
                  ]
                  spids: [351 353 380 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (C {<_Dbg_errmsg>} {(SQ <'"dark", "light", "off", or "reset" expected.'>)})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [383 385 -1 400]
                )
              ]
            )
            (C {<_Dbg_do_show>} {<highlight>})
            (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
        )
    )
  ]
)