(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:IFS)
          op: assign_op.Equal
          rhs: {(Id.Lit_Other ':')}
          spids: [109]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:read)
          op: assign_op.Equal
          rhs: {(DQ ('class returntype function formal actual attrib'))}
          spids: [113]
        )
      ]
    )
    (command.ShFunction
      name: function_list
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(cat)}]
                  redirects: [
                    (redir.HereDoc
                      op: (Token id:Id.Redir_DLess val:'<<' span_id:177)
                      fd: -1
                      here_begin: {(EOF)}
                      here_end_span_id: 230
                      stdin_parts: [
                        ('f:void:breakpoint_create:int b:b\n')
                        ('f:void:breakpoint_delete:int b:b\n')
                        ('f:void:breakpoint_modify:int b:b\n')
                        ('f:void:tracepoint_create:int number:number\n')
                        ('f:void:tracepoint_delete:int number:number\n')
                        ('f:void:tracepoint_modify:int number:number\n')
                        ('f:void:architecture_changed:void\n')
                        ('f:void:target_changed:void\n')
                        ('f:void:selected_frame_level_changed:int level:level\n')
                        ('f:void:selected_thread_changed:int thread_num:thread_num\n')
                        ('#*:void:annotate_starting_hook:void\n')
                        ('#*:void:annotate_stopped_hook:void\n')
                        ('#*:void:annotate_signalled_hook:void\n')
                        ('#*:void:annotate_signal_hook:void\n')
                        ('#*:void:annotate_exited_hook:void\n')
                        ('##*:void:print_register_hook:int\n')
                        ('##*:CORE_ADDR:find_toc_address_hook:CORE_ADDR\n')
                        ('##*:void:sparc_print_register_hook:int regno:regno\n')
                        ('#*:void:target_resume_hook:void\n')
                        ('#*:void:target_wait_loop_hook:void\n')
                        ('#*:void:init_gdb_hook:char *argv0:argv0\n')
                        ('#*:void:command_loop_hook:void\n')
                        (
'#*:void:fputs_unfiltered_hook:const char *linebuff,struct ui_file *stream:linebuff, stream\n'
                        )
                        (
'#*:void:print_frame_info_listing_hook:struct symtab *s, int line, int stopline, int noerror:s, line, stopline, noerror\n'
                        )
                        ('#*:int:query_hook:const char *query, va_list args:query, args\n')
                        ('#*:void:warning_hook:const char *string, va_list args:string, args\n')
                        ('#*:void:target_output_hook:char *b:b\n')
                        ('#*:void:interactive_hook:void\n')
                        ('#*:void:registers_changed_hook:void\n')
                        ('#*:void:readline_begin_hook:char *format, ...:format\n')
                        ('#*:char *:readline_hook:char *prompt:prompt\n')
                        ('#*:void:readline_end_hook:void\n')
                        (
'#*:int:target_wait_hook:int pid, struct target_waitstatus *status:pid, status\n'
                        )
                        (
'#*:void:call_command_hook:struct cmd_list_element *c, char *cmd, int from_tty:c, cmd, from_tty\n'
                        )
                        ('#*:NORETURN void:error_hook:void:: ATTR_NORETURN\n')
                        ('#*:void:error_begin_hook:void\n')
                        ('##*:int:target_architecture_hook:const struct bfd_arch_info *\n')
                        ('#*:void:exec_file_display_hook:char *filename:filename\n')
                        ('#*:void:file_changed_hook:char *filename:filename\n')
                        ('##*:void:specify_exec_file_hook:\n')
                        (
'#*:int:gdb_load_progress_hook:char *section, unsigned long num:section, num\n'
                        )
                        ('#*:void:pre_add_symbol_hook:char *name:name\n')
                        ('#*:void:post_add_symbol_hook:void\n')
                        ('#*:void:selected_frame_level_changed_hook:int level:level\n')
                        ('#*:int:gdb_loop_hook:int signo:signo\n')
                        ('##*:void:solib_create_inferior_hook:void\n')
                        ('##*:void:xcoff_relocate_symtab_hook:unsigned int\n')
                      ]
                    )
                  ]
                )
                (C {(grep)} {(-v)} {(SQ (Token id:Id.Lit_Chars val:'^#' span_id:237))})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: copyright
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:253)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 308
                  stdin_parts: [
                    ('/* User Interface Events.\n')
                    ('\n')
                    ('   Copyright 1999, 2001, 2002 Free Software Foundation, Inc.\n')
                    ('\n')
                    ('   Contributed by Cygnus Solutions.\n')
                    ('\n')
                    ('   This file is part of GDB.\n')
                    ('\n')
                    ('   This program is free software; you can redistribute it and/or modify\n')
                    ('   it under the terms of the GNU General Public License as published by\n')
                    ('   the Free Software Foundation; either version 2 of the License, or\n')
                    ('   (at your option) any later version.\n')
                    ('\n')
                    ('   This program is distributed in the hope that it will be useful,\n')
                    ('   but WITHOUT ANY WARRANTY; without even the implied warranty of\n')
                    ('   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n')
                    ('   GNU General Public License for more details.\n')
                    ('\n')
                    ('   You should have received a copy of the GNU General Public License\n')
                    ('   along with this program; if not, write to the Free Software\n')
                    (
'   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */\n'
                    )
                    ('\n')
                    ('/* Work in progress */\n')
                    ('\n')
                    ('/* This file was created with the aid of ')
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:281)
                    )
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:282)
                    )
                    ("gdb-events.sh''.\n")
                    ('\n')
                    ('   The bourn shell script ')
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:286)
                    )
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:287)
                    )
                    ("gdb-events.sh'' creates the files\n")
                    ('   ')
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:290)
                    )
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:291)
                    )
                    ("new-gdb-events.c'' and ")
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:293)
                    )
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:294)
                    )
                    ('new-gdb-events.h and then compares\n')
                    ('   them against the existing ')
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:297)
                    )
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:298)
                    )
                    ("gdb-events.[hc]''.  Any differences\n")
                    ('   found being reported.\n')
                    ('\n')
                    ('   If editing this file, please also run gdb-events.sh and merge any\n')
                    ('   changes into that script. Conversely, when making sweeping changes\n')
                    ('   to this file, modifying gdb-events.sh and using its output may\n')
                    ('   prove easier. */\n')
                    ('\n')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.Simple
      words: [{(exec)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:324)
          fd: -1
          arg_word: {(new-gdb-events.h)}
        )
      ]
    )
    (C {(copyright)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:332)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 343
          stdin_parts: [
            ('\n')
            ('#ifndef GDB_EVENTS_H\n')
            ('#define GDB_EVENTS_H\n')
            ('\n')
            ('#ifndef WITH_GDB_EVENTS\n')
            ('#define WITH_GDB_EVENTS 1\n')
            ('#endif\n')
          ]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:360)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 366
          stdin_parts: [
            ('/* COMPAT: pointer variables for old, unconverted events.\n')
            ('   A call to set_gdb_events() will automatically update these. */\n')
          ]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:376)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ ('*'))}]
                      action: [
                        (C {(echo)} 
                          {
                            (DQ ('extern ') (${ Id.VSub_Name returntype) (' (*') 
                              (${ Id.VSub_Name function) ('_event) (') (${ Id.VSub_Name formal) (')') (${ Id.VSub_Name attrib) (';')
                            )
                          }
                        )
                      ]
                      spids: [398 402 428 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (C {(echo)} {(DQ )})
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:451)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 458
          stdin_parts: [
            ('/* Type definition of all hook functions.\n')
            ('   Recommended pratice is to first declare each hook function using\n')
            ('   the below ftype and then define it. */\n')
          ]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:468)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (C {(echo)} 
                  {
                    (DQ ('typedef ') (${ Id.VSub_Name returntype) (' (gdb_events_') 
                      (${ Id.VSub_Name function) ('_ftype) (') (${ Id.VSub_Name formal) (');')
                    )
                  }
                )
              ]
            )
        )
      ]
      negated: F
    )
    (C {(echo)} {(DQ )})
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:515)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 520
          stdin_parts: [('/* gdb-events: object. */\n')]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (C {(echo)} {(DQ ('struct gdb_events'))})
    (C {(echo)} {(DQ ('  {'))})
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:542)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (C {(echo)} 
                  {
                    (DQ ('    gdb_events_') (${ Id.VSub_Name function) ('_ftype *') 
                      (${ Id.VSub_Name function) (${ Id.VSub_Name attrib) (';')
                    )
                  }
                )
              ]
            )
        )
      ]
      negated: F
    )
    (C {(echo)} {(DQ ('  };'))})
    (C {(echo)} {(DQ )})
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:594)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 601
          stdin_parts: [
            ('/* Interface into events functions.\n')
            ('   Where a *_p() predicate is present, it must be called before\n')
            ('   calling the hook proper. */\n')
          ]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:606)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ ('*'))}]
                      action: [
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Continue val:continue span_id:634)
                        )
                      ]
                      spids: [628 632 636 -1]
                    )
                    (case_arm
                      pat_list: [{(DQ ('?'))}]
                      action: [
                        (C {(echo)} {(DQ ('extern int ') (${ Id.VSub_Name function) ('_p (void);'))})
                        (C {(echo)} 
                          {
                            (DQ ('extern ') (${ Id.VSub_Name returntype) (' ') 
                              (${ Id.VSub_Name function) ('_event (') (${ Id.VSub_Name formal) (')') (${ Id.VSub_Name attrib) (';')
                            )
                          }
                        )
                      ]
                      spids: [639 643 680 -1]
                    )
                    (case_arm
                      pat_list: [{(DQ (f))}]
                      action: [
                        (C {(echo)} 
                          {
                            (DQ ('extern ') (${ Id.VSub_Name returntype) (' ') 
                              (${ Id.VSub_Name function) ('_event (') (${ Id.VSub_Name formal) (')') (${ Id.VSub_Name attrib) (';')
                            )
                          }
                        )
                      ]
                      spids: [683 687 713 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (C {(echo)} {(DQ )})
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:736)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 741
          stdin_parts: [('/* When GDB_EVENTS are not being used, completely disable them. */\n')]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (C {(echo)} {(DQ ('#if !WITH_GDB_EVENTS'))})
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:757)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ ('*'))}]
                      action: [
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Continue val:continue span_id:785)
                        )
                      ]
                      spids: [779 783 787 -1]
                    )
                    (case_arm
                      pat_list: [{(DQ ('?'))}]
                      action: [
                        (C {(echo)} {(DQ ('#define ') (${ Id.VSub_Name function) ('_event_p() 0'))})
                        (C {(echo)} 
                          {
                            (DQ ('#define ') (${ Id.VSub_Name function) ('_event(') 
                              (${ Id.VSub_Name actual) (') 0')
                            )
                          }
                        )
                      ]
                      spids: [790 794 823 -1]
                    )
                    (case_arm
                      pat_list: [{(DQ (f))}]
                      action: [
                        (C {(echo)} 
                          {
                            (DQ ('#define ') (${ Id.VSub_Name function) ('_event(') 
                              (${ Id.VSub_Name actual) (') 0')
                            )
                          }
                        )
                      ]
                      spids: [826 830 848 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (C {(echo)} {(DQ ('#endif'))})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:867)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 886
          stdin_parts: [
            ('\n')
            ('/* Install custom gdb-events hooks. */\n')
            ('extern struct gdb_events *set_gdb_event_hooks (struct gdb_events *vector);\n')
            ('\n')
            ('/* Deliver any pending events. */\n')
            ('extern void gdb_events_deliver (struct gdb_events *vector);\n')
            ('\n')
            ('/* Clear event handlers */\n')
            ('extern void clear_gdb_event_hooks (void);\n')
            ('\n')
            ('#if !WITH_GDB_EVENTS\n')
            ('#define set_gdb_events(x) 0\n')
            ('#define set_gdb_event_hooks(x) 0\n')
            ('#define gdb_events_deliver(x) 0\n')
            ('#endif\n')
          ]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (C {(echo)} {(DQ ('#endif'))})
    (command.Simple
      words: [{(exec)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'1>&' span_id:904) fd:1 arg_word:{(2)})
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test)} {(-r)} {(gdb-events.h)})]
          action: [
            (C {(diff)} {(-c)} {(gdb-events.h)} {(new-gdb-events.h)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(Id.Lit_Equals '=')} {(1)} 
                      {(Id.Lit_RBracket ']')}
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(echo)} {(DQ ('gdb-events.h changed? cp new-gdb-events.h gdb-events.h'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:952)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                  ]
                  spids: [930 943]
                )
              ]
            )
          ]
          spids: [910 918]
        )
      ]
      else_action: [
        (command.Simple
          words: [{(echo)} {(DQ ('File missing? mv new-gdb-events.h gdb-events.h'))}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:967)
              fd: 1
              arg_word: {(2)}
            )
          ]
        )
      ]
    )
    (command.Simple
      words: [{(exec)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:987)
          fd: -1
          arg_word: {(new-gdb-events.c)}
        )
      ]
    )
    (C {(copyright)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:995)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1023
          stdin_parts: [
            ('\n')
            ('#include ')
            (Id.Right_DoubleQuote '"')
            (defs.h)
            (Id.Right_DoubleQuote '"')
            ('\n')
            ('#include ')
            (Id.Right_DoubleQuote '"')
            (gdb-events.h)
            (Id.Right_DoubleQuote '"')
            ('\n')
            ('#include ')
            (Id.Right_DoubleQuote '"')
            (gdbcmd.h)
            (Id.Right_DoubleQuote '"')
            ('\n')
            ('\n')
            ('#if WITH_GDB_EVENTS\n')
            ('static struct gdb_events null_event_hooks;\n')
            ('static struct gdb_events queue_event_hooks;\n')
            ('static struct gdb_events *current_event_hooks = &null_event_hooks;\n')
            ('#endif\n')
            ('\n')
            ('int gdb_events_debug;\n')
          ]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (C {(echo)} {(DQ ('#if WITH_GDB_EVENTS'))})
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:1074)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ ('*'))}]
                      action: [
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Continue val:continue span_id:1102)
                        )
                      ]
                      spids: [1096 1100 1104 -1]
                    )
                    (case_arm
                      pat_list: [{(DQ ('?'))}]
                      action: [
                        (command.Simple
                          words: [{(cat)}]
                          redirects: [
                            (redir.HereDoc
                              op: (Token id:Id.Redir_DLess val:'<<' span_id:1115)
                              fd: -1
                              here_begin: {(EOF)}
                              here_end_span_id: 1160
                              stdin_parts: [
                                ('\n')
                                ('int\n')
                                (${ Id.VSub_Name function)
                                ('_event_p (')
                                (${ Id.VSub_Name formal)
                                (')\n')
                                ('{\n')
                                ('  return current_event_hooks->')
                                (${ Id.VSub_Name function)
                                (';\n')
                                ('}\n')
                                ('\n')
                                (${ Id.VSub_Name returntype)
                                ('\n')
                                (${ Id.VSub_Name function)
                                ('_event (')
                                (${ Id.VSub_Name formal)
                                (')\n')
                                ('{\n')
                                ('  return current_events->')
                                (${ Id.VSub_Name function)
                                (' (')
                                (${ Id.VSub_Name actual)
                                (');\n')
                                ('}\n')
                              ]
                            )
                          ]
                        )
                      ]
                      spids: [1107 1111 1162 -1]
                    )
                    (case_arm
                      pat_list: [{(DQ (f))}]
                      action: [
                        (command.Simple
                          words: [{(cat)}]
                          redirects: [
                            (redir.HereDoc
                              op: (Token id:Id.Redir_DLess val:'<<' span_id:1173)
                              fd: -1
                              here_begin: {(EOF)}
                              here_end_span_id: 1215
                              stdin_parts: [
                                ('\n')
                                ('void\n')
                                (${ Id.VSub_Name function)
                                ('_event (')
                                (${ Id.VSub_Name formal)
                                (')\n')
                                ('{\n')
                                ('  if (gdb_events_debug)\n')
                                ('    fprintf_unfiltered (gdb_stdlog, ')
                                (Id.Right_DoubleQuote '"')
                                (${ Id.VSub_Name function)
                                (_event)
                                (Id.Lit_Other '\\')
                                (n)
                                (Id.Right_DoubleQuote '"')
                                (');\n')
                                ('  if (!current_event_hooks->')
                                (${ Id.VSub_Name function)
                                (')\n')
                                ('    return;\n')
                                ('  current_event_hooks->')
                                (${ Id.VSub_Name function)
                                (' (')
                                (${ Id.VSub_Name actual)
                                (');\n')
                                ('}\n')
                              ]
                            )
                          ]
                        )
                      ]
                      spids: [1165 1169 1217 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (C {(echo)} {(DQ )})
    (C {(echo)} {(DQ ('#endif'))})
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1246)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1260
          stdin_parts: [
            ('#if WITH_GDB_EVENTS\n')
            ('struct gdb_events *\n')
            ('set_gdb_event_hooks (struct gdb_events *vector)\n')
            ('{\n')
            ('  struct gdb_events *old_events = current_event_hooks;\n')
            ('  if (vector == NULL)\n')
            ('    current_event_hooks = &queue_event_hooks;\n')
            ('  else\n')
            ('    current_event_hooks = vector;\n')
            ('  return old_events;\n')
          ]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:1265)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ ('*'))}]
                      action: [
                        (C {(echo)} 
                          {
                            (DQ ('  ') (${ Id.VSub_Name function) ('_event = hooks->') 
                              (${ Id.VSub_Name function) (';')
                            )
                          }
                        )
                      ]
                      spids: [1287 1291 1309 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1318)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1324
          stdin_parts: [('}\n') ('#endif\n')]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1336)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1347
          stdin_parts: [
            ('#if WITH_GDB_EVENTS\n')
            ('void\n')
            ('clear_gdb_event_hooks (void)\n')
            ('{\n')
            ('  set_gdb_event_hooks (&null_event_hooks);\n')
            ('}\n')
            ('#endif\n')
          ]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1359)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1365
          stdin_parts: [('enum gdb_event\n') ('{\n')]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:1370)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ (f))}]
                      action: [(C {(echo)} {(DQ ('  ') (${ Id.VSub_Name function) (','))})]
                      spids: [1392 1396 1410 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1419)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1425
          stdin_parts: [('  nr_gdb_events\n') ('};\n')]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:1439)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ (f))}]
                      action: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [(C {(test)} {(${ Id.VSub_Name actual)})]
                              action: [
                                (C {(echo)} {(DQ ('struct ') (${ Id.VSub_Name function))})
                                (C {(echo)} {(DQ ('  {'))})
                                (C {(echo)} 
                                  {
                                    (DQ ('    ') 
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1501)
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (command.Pipeline
                                                children: [
                                                  (C {(echo)} {(${ Id.VSub_Name formal)})
                                                  (C {(tr)} 
                                                    {
                                                      (SQ 
                                                        (Token
                                                          id: Id.Lit_Chars
                                                          val: '[,]'
                                                          span_id: 1515
                                                        )
                                                      )
                                                    } {(SQ (Token id:Id.Lit_Chars val:'[;]' span_id:1519))}
                                                  )
                                                ]
                                                negated: F
                                              )
                                            ]
                                          )
                                      ) (';')
                                    )
                                  }
                                )
                                (C {(echo)} {(DQ ('  };'))})
                                (C {(echo)} {(DQ )})
                              ]
                              spids: [1468 1477]
                            )
                          ]
                        )
                      ]
                      spids: [1461 1465 1542 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1555)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1565
          stdin_parts: [
            ('struct event\n')
            ('  {\n')
            ('    enum gdb_event type;\n')
            ('    struct event *next;\n')
            ('    union\n')
            ('      {\n')
          ]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:1570)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ (f))}]
                      action: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [(C {(test)} {(${ Id.VSub_Name actual)})]
                              action: [
                                (C {(echo)} 
                                  {
                                    (DQ ('        struct ') (${ Id.VSub_Name function) (' ') 
                                      (${ Id.VSub_Name function) (';')
                                    )
                                  }
                                )
                              ]
                              spids: [1599 1608]
                            )
                          ]
                        )
                      ]
                      spids: [1592 1596 1629 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1638)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1647
          stdin_parts: [
            ('      }\n')
            ('    data;\n')
            ('  };\n')
            ('struct event *pending_events;\n')
            ('struct event *delivering_events;\n')
          ]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1659)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1672
          stdin_parts: [
            ('static void\n')
            ('append (struct event *new_event)\n')
            ('{\n')
            ('  struct event **event = &pending_events;\n')
            ('  while ((*event) != NULL)\n')
            ('    event = &((*event)->next);\n')
            ('  (*event) = new_event;\n')
            ('  (*event)->next = NULL;\n')
            ('}\n')
          ]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:1681)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ (f))}]
                      action: [
                        (C {(echo)} {(DQ )})
                        (C {(echo)} {(DQ ('static void'))})
                        (C {(echo)} 
                          {
                            (DQ (queue_) (${ Id.VSub_Name function) (' (') (${ Id.VSub_Name formal) (')'))
                          }
                        )
                        (C {(echo)} {(DQ ('{'))})
                        (C {(echo)} {(DQ ('  struct event *event = XMALLOC (struct event);'))})
                        (C {(echo)} {(DQ ('  event->type = ') (${ Id.VSub_Name function) (';'))})
                        (command.ForEach
                          iter_name: arg
                          iter_words: [
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:1769)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(echo)} {(${ Id.VSub_Name actual)})
                                          (C {(tr)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'[,]' span_id:1783))} {(SQ (Token id:Id.Lit_Chars val:'[:]' span_id:1787))}
                                          )
                                          (C {(tr)} {(-d)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'[ ]' span_id:1797))}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          ]
                          do_arg_iter: F
                          body: 
                            (command.DoGroup
                              children: [
                                (C {(echo)} 
                                  {
                                    (DQ ('  event->data.') (${ Id.VSub_Name function) (.) 
                                      (${ Id.VSub_Name arg) (' = ') (${ Id.VSub_Name arg) (';')
                                    )
                                  }
                                )
                              ]
                            )
                        )
                        (C {(echo)} {(DQ ('  append (event);'))})
                        (C {(echo)} {(DQ ('}'))})
                      ]
                      spids: [1703 1707 1841 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1859)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1884
          stdin_parts: [
            ('void\n')
            ('gdb_events_deliver (struct gdb_events *vector)\n')
            ('{\n')
            ('  /* Just zap any events left around from last time. */\n')
            ('  while (delivering_events != NULL)\n')
            ('    {\n')
            ('      struct event *event = delivering_events;\n')
            ('      delivering_events = event->next;\n')
            ('      xfree (event);\n')
            ('    }\n')
            ('  /* Process any pending events.  Because one of the deliveries could\n')
            ('     bail out we move everything off of the pending queue onto an\n')
            ('     in-progress queue where it can, later, be cleaned up if\n')
            ('     necessary. */\n')
            ('  delivering_events = pending_events;\n')
            ('  pending_events = NULL;\n')
            ('  while (delivering_events != NULL)\n')
            ('    {\n')
            ('      struct event *event = delivering_events;\n')
            ('      switch (event->type)\n')
            ('        {\n')
          ]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:1889)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ (f))}]
                      action: [
                        (C {(echo)} {(DQ ('        case ') (${ Id.VSub_Name function) (':'))})
                        (command.If
                          arms: [
                            (if_arm
                              cond: [(C {(test)} {(${ Id.VSub_Name actual)})]
                              action: [
                                (C {(echo)} {(DQ ('          vector->') (${ Id.VSub_Name function))})
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:sep)
                                      op: assign_op.Equal
                                      rhs: {(DQ ('            ('))}
                                      spids: [1951]
                                    )
                                  ]
                                )
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:ass)
                                      op: assign_op.Equal
                                      rhs: {(DQ )}
                                      spids: [1957]
                                    )
                                  ]
                                )
                                (command.ForEach
                                  iter_name: arg
                                  iter_words: [
                                    {
                                      (command_sub
                                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1968)
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (command.Pipeline
                                                children: [
                                                  (C {(echo)} {(${ Id.VSub_Name actual)})
                                                  (C {(tr)} 
                                                    {
                                                      (SQ 
                                                        (Token
                                                          id: Id.Lit_Chars
                                                          val: '[,]'
                                                          span_id: 1982
                                                        )
                                                      )
                                                    } {(SQ (Token id:Id.Lit_Chars val:'[:]' span_id:1986))}
                                                  )
                                                  (C {(tr)} {(-d)} 
                                                    {
                                                      (SQ 
                                                        (Token
                                                          id: Id.Lit_Chars
                                                          val: '[ ]'
                                                          span_id: 1996
                                                        )
                                                      )
                                                    }
                                                  )
                                                ]
                                                negated: F
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  ]
                                  do_arg_iter: F
                                  body: 
                                    (command.DoGroup
                                      children: [
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:ass)
                                              op: assign_op.Equal
                                              rhs: 
                                                {
                                                  (DQ (${ Id.VSub_Name ass) (${ Id.VSub_Name sep) 
                                                    ('event->data.') (${ Id.VSub_Name function) (.) (${ Id.VSub_Name arg)
                                                  )
                                                }
                                              spids: [2004]
                                            )
                                          ]
                                        )
                                        (command.ShAssignment
                                          pairs: [
                                            (assign_pair
                                              lhs: (sh_lhs_expr.Name name:sep)
                                              op: assign_op.Equal
                                              rhs: {(DQ (',\n') ('               '))}
                                              spids: [2023]
                                            )
                                          ]
                                        )
                                      ]
                                    )
                                )
                                (C {(echo)} {(DQ (${ Id.VSub_Name ass) (');'))})
                              ]
                              spids: [1929 1938]
                            )
                          ]
                          else_action: [
                            (C {(echo)} 
                              {(DQ ('          vector->') (${ Id.VSub_Name function) (' ();'))}
                            )
                          ]
                        )
                        (C {(echo)} {(DQ ('          break;'))})
                      ]
                      spids: [1911 1915 2067 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2076)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2085
          stdin_parts: [
            ('        }\n')
            ('      delivering_events = event->next;\n')
            ('      xfree (event);\n')
            ('    }\n')
            ('}\n')
          ]
        )
      ]
    )
    (C {(echo)} {(DQ )})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2097)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2107
          stdin_parts: [
            ('void _initialize_gdb_events (void);\n')
            ('void\n')
            ('_initialize_gdb_events (void)\n')
            ('{\n')
            ('  struct cmd_list_element *c;\n')
            ('#if WITH_GDB_EVENTS\n')
          ]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(function_list)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:2112)
          cond: [(C {(eval)} {(read)} {($ Id.VSub_DollarName '$read')})]
          body: 
            (command.DoGroup
              children: [
                (command.Case
                  to_match: {(DQ (${ Id.VSub_Name class))}
                  arms: [
                    (case_arm
                      pat_list: [{(DQ (f))}]
                      action: [
                        (C {(echo)} 
                          {
                            (DQ ('  queue_event_hooks.') (${ Id.VSub_Name function) (' = queue_') 
                              (${ Id.VSub_Name function) (';')
                            )
                          }
                        )
                      ]
                      spids: [2134 2138 2156 -1]
                    )
                  ]
                )
              ]
            )
        )
      ]
      negated: F
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:2165)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 2217
          stdin_parts: [
            ('#endif\n')
            ('\n')
            ('  c = add_set_cmd (')
            (Id.Right_DoubleQuote '"')
            (eventdebug)
            (Id.Right_DoubleQuote '"')
            (', class_maintenance, var_zinteger,\n')
            ('\t\t   (char *) (&gdb_events_debug), ')
            (Id.Right_DoubleQuote '"')
            ('Set event debugging.')
            (Id.Lit_Other '\\')
            (n)
            (word_part.EscapedLiteral
              token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:2180)
            )
            ('\n')
            ('When non-zero, event/notify debugging is enabled.')
            (Id.Right_DoubleQuote '"')
            (', &setlist);\n')
            ('  deprecate_cmd (c, ')
            (Id.Right_DoubleQuote '"')
            ('set debug event')
            (Id.Right_DoubleQuote '"')
            (');\n')
            ('  deprecate_cmd (add_show_from_set (c, &showlist), ')
            (Id.Right_DoubleQuote '"')
            ('show debug event')
            (Id.Right_DoubleQuote '"')
            (');\n')
            ('\n')
            ('  add_show_from_set (add_set_cmd (')
            (Id.Right_DoubleQuote '"')
            (event)
            (Id.Right_DoubleQuote '"')
            (',\n')
            ('                                  class_maintenance,\n')
            ('                                  var_zinteger,\n')
            ('                                  (char *) (&gdb_events_debug),\n')
            ('                                  ')
            (Id.Right_DoubleQuote '"')
            ('Set event debugging.')
            (Id.Lit_Other '\\')
            (n)
            (word_part.EscapedLiteral
              token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:2209)
            )
            ('\n')
            ('When non-zero, event/notify debugging is enabled.')
            (Id.Right_DoubleQuote '"')
            (', &setdebuglist),\n')
            ('\t\t     &showdebuglist);\n')
            ('}\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(exec)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2224)
          fd: 1
          arg_word: {(2)}
        )
      ]
    )
    (command.Simple
      words: [
        {(sed)}
        {(-e)}
        {(SQ (Token id:Id.Lit_Chars val:'s/\\(\t\\)*        /\\1\t/g' span_id:2248))}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Less val:'<' span_id:2235)
          fd: -1
          arg_word: {(new-gdb-events.c)}
        )
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:2239)
          fd: -1
          arg_word: {(tmp-gdb-events.c)}
        )
      ]
    )
    (C {(mv)} {(tmp-gdb-events.c)} {(new-gdb-events.c)})
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test)} {(-r)} {(gdb-events.c)})]
          action: [
            (C {(diff)} {(-c)} {(gdb-events.c)} {(new-gdb-events.c)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(Id.Lit_Equals '=')} {(1)} 
                      {(Id.Lit_RBracket ']')}
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(echo)} {(DQ ('gdb-events.c changed? cp new-gdb-events.c gdb-events.c'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2302)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                  ]
                  spids: [2280 2293]
                )
              ]
            )
          ]
          spids: [2260 2268]
        )
      ]
      else_action: [
        (command.Simple
          words: [{(echo)} {(DQ ('File missing? mv new-gdb-events.c gdb-events.c'))}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2317)
              fd: 1
              arg_word: {(2)}
            )
          ]
        )
      ]
    )
  ]
)