(command.CommandList
  children: [
    (C {(typeset)} {(Lit_VarLike '_Dbg_RESTART_COMMAND=') (SQ )})
    (C {(typeset)} {(-i)} {(Lit_VarLike '_Dbg_set_debug=') (0)})
    (C {(typeset)} {(Lit_VarLike '_Dbg_stop_reason=') (SQ )})
    (C {(typeset)} {(-i)} {(Lit_VarLike '_Dbg_restore_debug_trap=') (1)})
    (C {(typeset)} {(-i)} {(Lit_VarLike '_Dbg_inside_skip=') (0)})
    (C {(typeset)} {(-i)} {(Lit_VarLike '_Dbg_continue_rc=') (-1)})
    (command.ShFunction
      name: _Dbg_debug_trap_handler
      body: 
        (command.BraceGroup
          children: [
            (C {(typeset)} {(-i)} {(Lit_VarLike '_Dbg_debugged_exit_code=') ($ VSub_QMark '$?')})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_Dbg_old_set_opts)
                  op: Equal
                  rhs: {($ VSub_Hyphen '$-')}
                )
              ]
            )
            (command.Simple
              words: [{(shopt)} {(nullglob)}]
              redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})]
            )
            (C {(typeset)} {(-i)} {(Lit_VarLike '_Dbg_old_set_nullglob=') ($ VSub_QMark '$?')})
            (C {(shopt)} {(-u)} {(nullglob)})
            (C {(shopt)} {(-s)} {(extdebug)})
            (command.AndOr
              ops: [Op_DAmp]
              children: [
                (command.DParen
                  child: 
                    (arith_expr.Unary
                      op_id: Arith_Bang
                      child: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_set_debug>)
                    )
                )
                (C {(KW_Set set)} {(Lit_Other '+') (x)} {(Lit_Other '+') (v)} {(Lit_Other '+') (u)})
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Op_DAmp]
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: BoolBinary_GlobDEqual
                                  left: 
                                    {
                                      (braced_var_sub
                                        token: <VSub_Name FUNCNAME>
                                        bracket_op: 
                                          (bracket_op.ArrayIndex
                                            expr: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                                          )
                                      )
                                    }
                                  right: {(_Dbg_) (Lit_Other '*')}
                                )
                            )
                            (command.DParen
                              child: 
                                (arith_expr.Unary
                                  op_id: Arith_Bang
                                  child: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_set_debug>)
                                )
                            )
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(_Dbg_set_to_return_from_debugger)} {(0)})
                    (command.ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {(0)}
                    )
                  ]
                )
              ]
            )
            (C {(_Dbg_set_debugger_entry)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_Dbg_continue_rc)
                  op: Equal
                  rhs: {(_Dbg_inside_skip)}
                )
              ]
            )
            (C {(shift)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_Dbg_bash_command)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                )
              ]
            )
            (C {(shift)})
            (C {(_Dbg_save_args)} {(DQ ($ VSub_At '$@'))})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DParen
                          child: 
                            (arith_expr.Binary
                              op_id: Arith_Great
                              left: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_step_ignore>)
                              right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.DParen
                      child: 
                        (arith_expr.UnaryAssign
                          op_id: Node_PostDMinus
                          child: (sh_lhs_expr.Name name:_Dbg_step_ignore)
                        )
                    )
                    (C {(_Dbg_write_journal)} 
                      {(DQ ('_Dbg_step_ignore=') ($ VSub_DollarName '$_Dbg_step_ignore'))}
                    )
                  ]
                )
              ]
            )
            (C {(typeset)} {(-i)} {(_Dbg_i)})
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Arith_Equal
                  left: (sh_lhs_expr.Name name:_Dbg_i)
                  right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                )
              cond: 
                (arith_expr.Binary
                  op_id: Arith_Less
                  left: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_i>)
                  right: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_watch_max>)
                )
              update: 
                (arith_expr.UnaryAssign
                  op_id: Node_PostDPlus
                  child: (sh_lhs_expr.Name name:_Dbg_i)
                )
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.AndOr
                                  ops: [Op_DAmp]
                                  children: [
                                    (C {(Lit_LBracket '[')} {(-n)} 
                                      {
                                        (DQ 
                                          (braced_var_sub
                                            token: <VSub_Name _Dbg_watch_exp>
                                            bracket_op: 
                                              (bracket_op.ArrayIndex
                                                expr: 
                                                  (arith_expr.ArithWord
                                                    w: {($ VSub_DollarName '$_Dbg_i')}
                                                  )
                                              )
                                          )
                                        )
                                      } {(Lit_RBracket ']')}
                                    )
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: BoolBinary_GlobNEqual
                                          left: 
                                            {
                                              (braced_var_sub
                                                token: <VSub_Name _Dbg_watch_enable>
                                                bracket_op: 
                                                  (bracket_op.ArrayIndex
                                                    expr: 
                                                      (arith_expr.VarRef
                                                        token: <Lit_ArithVarLike _Dbg_i>
                                                      )
                                                  )
                                              )
                                            }
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(typeset)} 
                              {(Lit_VarLike 'new_val=') 
                                (command_sub
                                  left_token: <Left_DollarParen '$('>
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (C {(_Dbg_get_watch_exp_eval)} {($ VSub_DollarName '$_Dbg_i')})
                                      ]
                                    )
                                )
                              }
                            )
                            (C {(typeset)} 
                              {(Lit_VarLike 'old_val=') 
                                (braced_var_sub
                                  token: <VSub_Name _Dbg_watch_val>
                                  bracket_op: 
                                    (bracket_op.ArrayIndex
                                      expr: (arith_expr.ArithWord w:{($ VSub_DollarName '$_Dbg_i')})
                                    )
                                )
                              }
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.DBracket
                                          expr: 
                                            (bool_expr.Binary
                                              op_id: BoolBinary_GlobNEqual
                                              left: {($ VSub_DollarName '$old_val')}
                                              right: {($ VSub_DollarName '$new_val')}
                                            )
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (command.DParen
                                      child: 
                                        (arith_expr.UnaryAssign
                                          op_id: Node_PostDPlus
                                          child: 
                                            (sh_lhs_expr.IndexedName
                                              name: _Dbg_watch_count
                                              index: 
                                                (arith_expr.VarRef
                                                  token: <Lit_ArithVarLike _Dbg_i>
                                                )
                                            )
                                        )
                                    )
                                    (C {(_Dbg_msg)} 
                                      {
                                        (DQ ('Watchpoint ') ($ VSub_DollarName '$_Dbg_i') (': ') 
                                          (braced_var_sub
                                            token: <VSub_Name _Dbg_watch_exp>
                                            bracket_op: 
                                              (bracket_op.ArrayIndex
                                                expr: 
                                                  (arith_expr.ArithWord
                                                    w: {($ VSub_DollarName '$_Dbg_i')}
                                                  )
                                              )
                                          ) (' changed:')
                                        )
                                      }
                                    )
                                    (C {(_Dbg_msg)} 
                                      {(DQ ("  old value: '") ($ VSub_DollarName '$old_val') ("'"))}
                                    )
                                    (C {(_Dbg_msg)} 
                                      {(DQ ("  new value: '") ($ VSub_DollarName '$new_val') ("'"))}
                                    )
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: 
                                            (sh_lhs_expr.IndexedName
                                              name: _Dbg_watch_val
                                              index: 
                                                (arith_expr.ArithWord
                                                  w: {($ VSub_DollarName '$_Dbg_i')}
                                                )
                                            )
                                          op: Equal
                                          rhs: {($ VSub_DollarName '$new_val')}
                                        )
                                      ]
                                    )
                                    (C {(_Dbg_hook_enter_debugger)} {(SQ <'on a watch trigger'>)})
                                    (command.ControlFlow
                                      token: <ControlFlow_Return return>
                                      arg_word: {($ VSub_DollarName '$_Dbg_continue_rc')}
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                )
            )
            (C {(typeset)} {(full_filename)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:full_filename)
                  op: Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Left_DollarParen '$('>
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(_Dbg_is_file)} {(DQ ($ VSub_DollarName '$_Dbg_frame_last_filename'))})
                            ]
                          )
                      )
                    }
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: BoolUnary_r
                              child: {($ VSub_DollarName '$full_filename')}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.IndexedName
                              name: _Dbg_file2canonic
                              index: 
                                (arith_expr.ArithWord
                                  w: {($ VSub_DollarName '$_Dbg_frame_last_filename')}
                                )
                            )
                          op: Equal
                          rhs: {(DQ ($ VSub_DollarName '$full_filename'))}
                        )
                      ]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DParen
                          child: 
                            (arith_expr.Binary
                              op_id: Arith_Great
                              left: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_action_count>)
                              right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(_Dbg_hook_action_hit)} {(DQ ($ VSub_DollarName '$full_filename'))})]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DParen
                          child: 
                            (arith_expr.Binary
                              op_id: Arith_Great
                              left: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_brkpt_count>)
                              right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(_Dbg_hook_breakpoint_hit)} 
                                  {(DQ ($ VSub_DollarName '$full_filename'))}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.DParen
                                          child: 
                                            (arith_expr.VarRef
                                              token: <Lit_ArithVarLike _Dbg_step_force>
                                            )
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (C {(typeset)} 
                                      {(Lit_VarLike '_Dbg_frame_previous_file=') 
                                        (DQ ($ VSub_DollarName '$_Dbg_frame_last_filename'))
                                      }
                                    )
                                    (C {(typeset)} {(-i)} 
                                      {(Lit_VarLike '_Dbg_frame_previous_lineno=') 
                                        (DQ ($ VSub_DollarName '$_Dbg_frame_last_lineno'))
                                      }
                                    )
                                  ]
                                )
                              ]
                            )
                            (command.DParen
                              child: 
                                (arith_expr.UnaryAssign
                                  op_id: Node_PostDPlus
                                  child: 
                                    (sh_lhs_expr.IndexedName
                                      name: _Dbg_brkpt_counts
                                      index: 
                                        (arith_expr.VarRef
                                          token: <Lit_ArithVarLike _Dbg_brkpt_num>
                                        )
                                    )
                                )
                            )
                            (C {(_Dbg_write_journal)} 
                              {
                                (DQ ('_Dbg_brkpt_counts[') ($ VSub_DollarName '$_Dbg_brkpt_num') (']=') 
                                  (braced_var_sub
                                    token: <VSub_Name _Dbg_brkpt_counts>
                                    bracket_op: 
                                      (bracket_op.ArrayIndex
                                        expr: 
                                          (arith_expr.VarRef
                                            token: <Lit_ArithVarLike _Dbg_brkpt_num>
                                          )
                                      )
                                  )
                                )
                              }
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.DParen
                                          child: 
                                            (arith_expr.Binary
                                              op_id: Arith_DEqual
                                              left: 
                                                (arith_expr.Binary
                                                  op_id: Arith_LBracket
                                                  left: 
                                                    (arith_expr.VarRef
                                                      token: <Lit_ArithVarLike _Dbg_brkpt_onetime>
                                                    )
                                                  right: 
                                                    (arith_expr.VarRef
                                                      token: <Lit_ArithVarLike _Dbg_brkpt_num>
                                                    )
                                                )
                                              right: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                                            )
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (command.ShAssignment
                                      pairs: [
                                        (assign_pair
                                          lhs: (sh_lhs_expr.Name name:_Dbg_stop_reason)
                                          op: Equal
                                          rhs: {(SQ <'at a breakpoint that has since been deleted'>)}
                                        )
                                      ]
                                    )
                                    (C {(_Dbg_delete_brkpt_entry)} 
                                      {($ VSub_DollarName '$_Dbg_brkpt_num')}
                                    )
                                  ]
                                )
                              ]
                              else_action: [
                                (C {(_Dbg_msg)} 
                                  {
                                    (DQ ('Breakpoint ') ($ VSub_DollarName '$_Dbg_brkpt_num') 
                                      (' hit (') 
                                      (braced_var_sub
                                        token: <VSub_Name _Dbg_brkpt_counts>
                                        bracket_op: 
                                          (bracket_op.ArrayIndex
                                            expr: 
                                              (arith_expr.VarRef
                                                token: <Lit_ArithVarLike _Dbg_brkpt_num>
                                              )
                                          )
                                      ) (' times).')
                                    )
                                  }
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:_Dbg_stop_reason)
                                      op: Equal
                                      rhs: 
                                        {
                                          (DQ ('at breakpoint ') ($ VSub_DollarName '$_Dbg_brkpt_num'))
                                        }
                                    )
                                  ]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.DParen
                                          child: 
                                            (arith_expr.Binary
                                              op_id: Arith_LBracket
                                              left: 
                                                (arith_expr.VarRef
                                                  token: <Lit_ArithVarLike _Dbg_brkpt_commands_end>
                                                )
                                              right: 
                                                (arith_expr.ArithWord
                                                  w: {($ VSub_DollarName '$_Dbg_brkpt_num')}
                                                )
                                            )
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (C {(_Dbg_bp_commands)} {($ VSub_DollarName '$_Dbg_brkpt_num')})
                                  ]
                                )
                              ]
                            )
                            (C {(_Dbg_hook_enter_debugger)} 
                              {(DQ ($ VSub_DollarName '$_Dbg_stop_reason'))}
                            )
                            (C {(_Dbg_set_to_return_from_debugger)} {(1)})
                            (command.ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {($ VSub_DollarName '$_Dbg_continue_rc')}
                            )
                          ]
                        )
                      ]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DParen
                          child: 
                            (arith_expr.Binary
                              op_id: Arith_DEqual
                              left: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_step_ignore>)
                              right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DParen
                                  child: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_step_force>)
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.AndOr
                                          ops: [Op_DAmp]
                                          children: [
                                            (command.DParen
                                              child: 
                                                (arith_expr.Binary
                                                  op_id: Arith_DEqual
                                                  left: 
                                                    (arith_expr.VarRef
                                                      token: <Lit_ArithVarLike _Dbg_last_lineno>
                                                    )
                                                  right: 
                                                    (arith_expr.VarRef
                                                      token: 
                                                        <Lit_ArithVarLike _Dbg_frame_last_lineno>
                                                    )
                                                )
                                            )
                                            (command.DBracket
                                              expr: 
                                                (bool_expr.Binary
                                                  op_id: BoolBinary_GlobDEqual
                                                  left: {($ VSub_DollarName '$_Dbg_last_source_file')}
                                                  right: 
                                                    {($ VSub_DollarName '$_Dbg_frame_last_filename')}
                                                )
                                            )
                                          ]
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (C {(_Dbg_set_to_return_from_debugger)} {(1)})
                                    (command.ControlFlow
                                      token: <ControlFlow_Return return>
                                      arg_word: {($ VSub_DollarName '$_Dbg_continue_rc')}
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                        )
                      ]
                    )
                    (C {(_Dbg_hook_enter_debugger)} {(SQ <'after being stepped'>)})
                    (command.ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {($ VSub_DollarName '$_Dbg_continue_rc')}
                    )
                  ]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DParen
                          child: 
                            (arith_expr.Binary
                              op_id: Arith_DEqual
                              left: 
                                (arith_expr.ArithWord
                                  w: 
                                    {
                                      (braced_var_sub
                                        token: <VSub_Name FUNCNAME>
                                        prefix_op: VSub_Pound
                                        bracket_op: (bracket_op.WholeArray op_id:Lit_At)
                                      )
                                    }
                                )
                              right: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_return_level>)
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_Dbg_return_level)
                          op: Equal
                          rhs: {(0)}
                        )
                      ]
                    )
                    (C {(_Dbg_hook_enter_debugger)} {(SQ <'on a return'>)})
                    (command.ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {($ VSub_DollarName '$_Dbg_continue_rc')}
                    )
                  ]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DParen
                          child: 
                            (arith_expr.Binary
                              op_id: Arith_DEqual
                              left: 
                                (arith_expr.Unary
                                  op_id: Node_UnaryMinus
                                  child: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                                )
                              right: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_return_level>)
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(_Dbg_hook_enter_debugger)} {(SQ <'on fielding signal'>)})
                    (command.ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {($ VSub_DollarName '$_Dbg_continue_rc')}
                    )
                  ]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DParen
                          child: 
                            (arith_expr.Binary
                              op_id: Arith_DEqual
                              left: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_set_linetrace>)
                              right: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DParen
                                  child: 
                                    (arith_expr.VarRef
                                      token: <Lit_ArithVarLike _Dbg_set_linetrace_delay>
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(C {(sleep)} {($ VSub_DollarName '$_Dbg_linetrace_delay')})]
                        )
                      ]
                    )
                    (C {(_Dbg_print_linetrace)})
                    (C {(_Dbg_set_to_return_from_debugger)} {(1)})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_Dbg_last_lineno)
                          op: Equal
                          rhs: 
                            {
                              (braced_var_sub
                                token: <VSub_Name BASH_LINENO>
                                bracket_op: 
                                  (bracket_op.ArrayIndex
                                    expr: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                                  )
                              )
                            }
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {($ VSub_DollarName '$_Dbg_continue_rc')}
                    )
                  ]
                )
              ]
            )
            (C {(_Dbg_set_to_return_from_debugger)} {(1)})
            (command.ControlFlow
              token: <ControlFlow_Return return>
              arg_word: {($ VSub_DollarName '$_Dbg_continue_rc')}
            )
          ]
        )
    )
    (command.ShFunction
      name: _Dbg_hook_action_hit
      body: 
        (command.BraceGroup
          children: [
            (C {(typeset)} {(Lit_VarLike 'full_filename=') (DQ ($ VSub_Number '$1'))})
            (C {(typeset)} {(Lit_VarLike 'lineno=') ($ VSub_DollarName '$_Dbg_frame_last_lineno')})
            (C {(typeset)} {(-a)} {(linenos)})
            (command.AndOr
              ops: [Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.Unary
                      op_id: BoolUnary_z
                      child: {($ VSub_DollarName '$full_filename')}
                    )
                )
                (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
              ]
            )
            (C {(eval)} 
              {
                (DQ ('linenos=(') 
                  (braced_var_sub
                    token: <VSub_Name _Dbg_action_file2linenos>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.ArithWord w:{($ VSub_DollarName '$full_filename')})
                      )
                  ) (')')
                )
              }
            )
            (C {(typeset)} {(-a)} {(action_nos)})
            (C {(eval)} 
              {
                (DQ ('action_nos=(') 
                  (braced_var_sub
                    token: <VSub_Name _Dbg_action_file2action>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.ArithWord w:{($ VSub_DollarName '$full_filename')})
                      )
                  ) (')')
                )
              }
            )
            (C {(typeset)} {(-i)} {(_Dbg_i)})
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Arith_Equal
                  left: (sh_lhs_expr.Name name:_Dbg_i)
                  right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                )
              cond: 
                (arith_expr.Binary
                  op_id: Arith_Less
                  left: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_i>)
                  right: 
                    (arith_expr.ArithWord
                      w: 
                        {
                          (braced_var_sub
                            token: <VSub_Name linenos>
                            prefix_op: VSub_Pound
                            bracket_op: (bracket_op.WholeArray op_id:Lit_At)
                          )
                        }
                    )
                )
              update: 
                (arith_expr.UnaryAssign
                  op_id: Node_PostDPlus
                  child: (sh_lhs_expr.Name name:_Dbg_i)
                )
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DParen
                                  child: 
                                    (arith_expr.Binary
                                      op_id: Arith_DEqual
                                      left: 
                                        (arith_expr.Binary
                                          op_id: Arith_LBracket
                                          left: (arith_expr.VarRef token:<Lit_ArithVarLike linenos>)
                                          right: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_i>)
                                        )
                                      right: (arith_expr.VarRef token:<Lit_ArithVarLike lineno>)
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (command.DParen
                              child: 
                                (arith_expr.BinaryAssign
                                  op_id: Arith_Equal
                                  left: (sh_lhs_expr.Name name:_Dbg_action_num)
                                  right: 
                                    (arith_expr.Binary
                                      op_id: Arith_LBracket
                                      left: (arith_expr.VarRef token:<Lit_ArithVarLike action_nos>)
                                      right: (arith_expr.VarRef token:<Lit_ArithVarLike _Dbg_i>)
                                    )
                                )
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:stmt)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (braced_var_sub
                                          token: <VSub_Name _Dbg_action_stmt>
                                          bracket_op: 
                                            (bracket_op.ArrayIndex
                                              expr: 
                                                (arith_expr.ArithWord
                                                  w: {($ VSub_DollarName '$_Dbg_action_num')}
                                                )
                                            )
                                        )
                                      )
                                    }
                                )
                              ]
                            )
                            (C {(.)} {(${ VSub_Name _Dbg_libdir) (/dbg-set-d-vars.inc)})
                            (C {(eval)} {(DQ ($ VSub_DollarName '$stmt'))})
                            (C {(_Dbg_set_debugger_internal)})
                            (command.ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(0)}
                            )
                          ]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
        )
    )
    (command.ShFunction
      name: _Dbg_hook_breakpoint_hit
      body: 
        (command.BraceGroup
          children: [
            (C {(typeset)} {(Lit_VarLike 'full_filename=') (DQ ($ VSub_Number '$1'))})
            (C {(typeset)} {(Lit_VarLike 'lineno=') ($ VSub_DollarName '$_Dbg_frame_last_lineno')})
            (C {(typeset)} {(-a)} {(linenos)})
            (command.AndOr
              ops: [Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.Unary
                      op_id: BoolUnary_z
                      child: {($ VSub_DollarName '$full_filename')}
                    )
                )
                (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
              ]
            )
            (command.AndOr
              ops: [Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.Unary
                      op_id: BoolUnary_z
                      child: 
                        {
                          (braced_var_sub
                            token: <VSub_Name _Dbg_brkpt_file2linenos>
                            bracket_op: 
                              (bracket_op.ArrayIndex
                                expr: (arith_expr.ArithWord w:{($ VSub_DollarName '$full_filename')})
                              )
                          )
                        }
                    )
                )
                (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
              ]
            )
            (C {(eval)} 
              {
                (DQ ('linenos=(') 
                  (braced_var_sub
                    token: <VSub_Name _Dbg_brkpt_file2linenos>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.ArithWord w:{($ VSub_DollarName '$full_filename')})
                      )
                  ) (')')
                )
              }
            )
            (C {(typeset)} {(-a)} {(brkpt_nos)})
            (C {(eval)} 
              {
                (DQ ('brkpt_nos=(') 
                  (braced_var_sub
                    token: <VSub_Name _Dbg_brkpt_file2brkpt>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.ArithWord w:{($ VSub_DollarName '$full_filename')})
                      )
                  ) (')')
                )
              }
            )
            (C {(typeset)} {(-i)} {(i)})
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Arith_Equal
                  left: (sh_lhs_expr.Name name:i)
                  right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                )
              cond: 
                (arith_expr.Binary
                  op_id: Arith_Less
                  left: (arith_expr.VarRef token:<Lit_ArithVarLike i>)
                  right: 
                    (arith_expr.ArithWord
                      w: 
                        {
                          (braced_var_sub
                            token: <VSub_Name linenos>
                            prefix_op: VSub_Pound
                            bracket_op: (bracket_op.WholeArray op_id:Lit_At)
                          )
                        }
                    )
                )
              update: (arith_expr.UnaryAssign op_id:Node_PostDPlus child:(sh_lhs_expr.Name name:i))
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DParen
                                  child: 
                                    (arith_expr.Binary
                                      op_id: Arith_DEqual
                                      left: 
                                        (arith_expr.Binary
                                          op_id: Arith_LBracket
                                          left: (arith_expr.VarRef token:<Lit_ArithVarLike linenos>)
                                          right: (arith_expr.VarRef token:<Lit_ArithVarLike i>)
                                        )
                                      right: (arith_expr.VarRef token:<Lit_ArithVarLike lineno>)
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (command.DParen
                              child: 
                                (arith_expr.BinaryAssign
                                  op_id: Arith_Equal
                                  left: (sh_lhs_expr.Name name:_Dbg_brkpt_num)
                                  right: 
                                    (arith_expr.Binary
                                      op_id: Arith_LBracket
                                      left: (arith_expr.VarRef token:<Lit_ArithVarLike brkpt_nos>)
                                      right: (arith_expr.VarRef token:<Lit_ArithVarLike i>)
                                    )
                                )
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.DParen
                                          child: 
                                            (arith_expr.Binary
                                              op_id: Arith_LBracket
                                              left: 
                                                (arith_expr.VarRef
                                                  token: <Lit_ArithVarLike _Dbg_brkpt_enable>
                                                )
                                              right: 
                                                (arith_expr.VarRef
                                                  token: <Lit_ArithVarLike _Dbg_brkpt_num>
                                                )
                                            )
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (command.ControlFlow
                                      token: <ControlFlow_Return return>
                                      arg_word: {(0)}
                                    )
                                  ]
                                )
                              ]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
        )
    )
    (command.ShFunction
      name: _Dbg_hook_enter_debugger
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_Dbg_stop_reason)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                )
              ]
            )
            (command.AndOr
              ops: [Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.Binary
                      op_id: BoolBinary_GlobNEqual
                      left: {(SQ <noprint>)}
                      right: {($ VSub_Number '$2')}
                    )
                )
                (C {(_Dbg_print_location_and_command)})
              ]
            )
            (C {(_Dbg_process_commands)})
            (C {(_Dbg_set_to_return_from_debugger)} {(1)})
            (command.ControlFlow
              token: <ControlFlow_Return return>
              arg_word: {($ VSub_DollarName '$_Dbg_continue_rc')}
            )
          ]
        )
    )
    (command.ShFunction
      name: _Dbg_cleanup
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.Unary
                      op_id: BoolUnary_f
                      child: {($ VSub_DollarName '$_Dbg_evalfile')}
                    )
                )
                (command.Simple
                  words: [{(rm)} {(-f)} {($ VSub_DollarName '$_Dbg_evalfile')}]
                  redirects: [(redir.Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
                )
              ]
            )
            (C {(KW_Set set)} {(Lit_Other '+') (u)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Op_DAmp]
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: BoolUnary_n
                                  child: {($ VSub_DollarName '$_Dbg_EXECUTION_STRING')}
                                )
                            )
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: BoolUnary_r
                                  child: {($ VSub_DollarName '$_Dbg_script_file')}
                                )
                            )
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(rm)} {($ VSub_DollarName '$_Dbg_script_file')})]
                )
              ]
            )
            (C {(_Dbg_erase_journals)})
            (C {(_Dbg_restore_user_vars)})
          ]
        )
    )
    (command.ShFunction
      name: _Dbg_cleanup2
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Op_DAmp]
              children: [
                (command.DBracket
                  expr: 
                    (bool_expr.Unary
                      op_id: BoolUnary_f
                      child: {($ VSub_DollarName '$_Dbg_evalfile')}
                    )
                )
                (command.Simple
                  words: [{(rm)} {(-f)} {($ VSub_DollarName '$_Dbg_evalfile')}]
                  redirects: [(redir.Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
                )
              ]
            )
            (C {(_Dbg_erase_journals)})
            (C {(trap)} {(-)} {(EXIT)})
          ]
        )
    )
  ]
)