(command.ShFunction
  name: _Dbg_debugger
  body: 
    (command.BraceGroup
      children: [
        (C {(KW_Set set)} {(-o)} {(functrace)})
        (command.If
          arms: [
            (if_arm
              cond: [
                (command.Sentence
                  child: 
                    (command.DParen
                      child: 
                        (arith_expr.Binary
                          op_id: Arith_Great
                          left: (arith_expr.ArithWord w:{($ VSub_Pound '$#')})
                          right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                        )
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:step_ignore)
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                    )
                  ]
                )
                (C {(shift)})
              ]
            )
          ]
          else_action: [
            (C {(typeset)} 
              {(Lit_VarLike 'step_ignore=') 
                (braced_var_sub
                  token: <VSub_Name _Dbg_step_ignore>
                  suffix_op: (suffix_op.Unary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                )
              }
            )
          ]
        )
        (command.WhileUntil
          keyword: <KW_While while>
          cond: [
            (command.Sentence
              child: 
                (command.DParen
                  child: 
                    (arith_expr.Binary
                      op_id: Arith_Great
                      left: (arith_expr.ArithWord w:{($ VSub_Pound '$#')})
                      right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          body: (command.DoGroup children:[(C {(eval)} {($ VSub_Number '$1')}) (C {(shift)})])
        )
        (command.If
          arms: [
            (if_arm
              cond: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: BoolUnary_z
                          child: {($ VSub_DollarName '$_Dbg_set_trace_init')}
                        )
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_Dbg_set_trace_init)
                      op: Equal
                      rhs: {(1)}
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:_Dbg_step_ignore)
                      op: Equal
                      rhs: 
                        {
                          (braced_var_sub
                            token: <VSub_Name step_ignore>
                            suffix_op: (suffix_op.Unary op_id:VTest_ColonHyphen arg_word:{(0)})
                          )
                        }
                    )
                  ]
                )
                (C {(_Dbg_write_journal)} {(DQ ('_Dbg_step_ignore=0'))})
              ]
            )
          ]
          else_action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_Dbg_step_ignore)
                  op: Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: <VSub_Number 1>
                        suffix_op: (suffix_op.Unary op_id:VTest_ColonHyphen arg_word:{(1)})
                      )
                    }
                )
              ]
            )
          ]
        )
        (C {(trap)} {(SQ <'_Dbg_debug_trap_handler 0 "$BASH_COMMAND" "$@"'>)} {(DEBUG)})
      ]
    )
)