xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/cli/cli-script.c (revision 7330f729ccf0bd976a06f95fad452fe774fc7fd1)
1 /* GDB CLI command scripting.
2 
3    Copyright (C) 1986-2017 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "value.h"
22 #include "language.h"		/* For value_true */
23 #include <ctype.h>
24 
25 #include "ui-out.h"
26 #include "top.h"
27 #include "breakpoint.h"
28 #include "cli/cli-cmds.h"
29 #include "cli/cli-decode.h"
30 #include "cli/cli-script.h"
31 
32 #include "extension.h"
33 #include "interps.h"
34 #include "compile/compile.h"
35 
36 #include <vector>
37 
38 /* Prototypes for local functions.  */
39 
40 static enum command_control_type
41 recurse_read_control_structure (char * (*read_next_line_func) (void),
42 				struct command_line *current_cmd,
43 				void (*validator)(char *, void *),
44 				void *closure);
45 
46 static char *read_next_line (void);
47 
48 /* Level of control structure when reading.  */
49 static int control_level;
50 
51 /* Level of control structure when executing.  */
52 static int command_nest_depth = 1;
53 
54 /* This is to prevent certain commands being printed twice.  */
55 static int suppress_next_print_command_trace = 0;
56 
57 /* A non-owning slice of a string.  */
58 
59 struct string_view
60 {
61   string_view (const char *str_, size_t len_)
62     : str (str_), len (len_)
63   {}
64 
65   const char *str;
66   size_t len;
67 };
68 
69 /* Structure for arguments to user defined functions.  */
70 
71 class user_args
72 {
73 public:
74   /* Save the command line and store the locations of arguments passed
75      to the user defined function.  */
76   explicit user_args (const char *line);
77 
78   /* Insert the stored user defined arguments into the $arg arguments
79      found in LINE.  */
80   std::string insert_args (const char *line) const;
81 
82 private:
83   /* Disable copy/assignment.  (Since the elements of A point inside
84      COMMAND, copying would need to reconstruct the A vector in the
85      new copy.)  */
86   user_args (const user_args &) =delete;
87   user_args &operator= (const user_args &) =delete;
88 
89   /* It is necessary to store a copy of the command line to ensure
90      that the arguments are not overwritten before they are used.  */
91   std::string m_command_line;
92 
93   /* The arguments.  Each element points inside M_COMMAND_LINE.  */
94   std::vector<string_view> m_args;
95 };
96 
97 /* The stack of arguments passed to user defined functions.  We need a
98    stack because user-defined functions can call other user-defined
99    functions.  */
100 static std::vector<std::unique_ptr<user_args>> user_args_stack;
101 
102 /* An RAII-base class used to push/pop args on the user args
103    stack.  */
104 struct scoped_user_args_level
105 {
106   /* Parse the command line and push the arguments in the user args
107      stack.  */
108   explicit scoped_user_args_level (const char *line)
109   {
110     user_args_stack.emplace_back (new user_args (line));
111   }
112 
113   /* Pop the current user arguments from the stack.  */
114   ~scoped_user_args_level ()
115   {
116     user_args_stack.pop_back ();
117   }
118 };
119 
120 
121 /* Return non-zero if TYPE is a multi-line command (i.e., is terminated
122    by "end").  */
123 
124 static int
125 multi_line_command_p (enum command_control_type type)
126 {
127   switch (type)
128     {
129     case if_control:
130     case while_control:
131     case while_stepping_control:
132     case commands_control:
133     case compile_control:
134     case python_control:
135     case guile_control:
136       return 1;
137     default:
138       return 0;
139     }
140 }
141 
142 /* Allocate, initialize a new command line structure for one of the
143    control commands (if/while).  */
144 
145 static struct command_line *
146 build_command_line (enum command_control_type type, const char *args)
147 {
148   struct command_line *cmd;
149 
150   if (args == NULL && (type == if_control || type == while_control))
151     error (_("if/while commands require arguments."));
152   gdb_assert (args != NULL);
153 
154   cmd = XNEW (struct command_line);
155   cmd->next = NULL;
156   cmd->control_type = type;
157 
158   cmd->body_count = 1;
159   cmd->body_list = XCNEWVEC (struct command_line *, cmd->body_count);
160   cmd->line = xstrdup (args);
161 
162   return cmd;
163 }
164 
165 /* Build and return a new command structure for the control commands
166    such as "if" and "while".  */
167 
168 command_line_up
169 get_command_line (enum command_control_type type, const char *arg)
170 {
171   /* Allocate and build a new command line structure.  */
172   command_line_up cmd (build_command_line (type, arg));
173 
174   /* Read in the body of this command.  */
175   if (recurse_read_control_structure (read_next_line, cmd.get (), 0, 0)
176       == invalid_control)
177     {
178       warning (_("Error reading in canned sequence of commands."));
179       return NULL;
180     }
181 
182   return cmd;
183 }
184 
185 /* Recursively print a command (including full control structures).  */
186 
187 void
188 print_command_lines (struct ui_out *uiout, struct command_line *cmd,
189 		     unsigned int depth)
190 {
191   struct command_line *list;
192 
193   list = cmd;
194   while (list)
195     {
196       if (depth)
197 	uiout->spaces (2 * depth);
198 
199       /* A simple command, print it and continue.  */
200       if (list->control_type == simple_control)
201 	{
202 	  uiout->field_string (NULL, list->line);
203 	  uiout->text ("\n");
204 	  list = list->next;
205 	  continue;
206 	}
207 
208       /* loop_continue to jump to the start of a while loop, print it
209          and continue. */
210       if (list->control_type == continue_control)
211 	{
212 	  uiout->field_string (NULL, "loop_continue");
213 	  uiout->text ("\n");
214 	  list = list->next;
215 	  continue;
216 	}
217 
218       /* loop_break to break out of a while loop, print it and
219 	 continue.  */
220       if (list->control_type == break_control)
221 	{
222 	  uiout->field_string (NULL, "loop_break");
223 	  uiout->text ("\n");
224 	  list = list->next;
225 	  continue;
226 	}
227 
228       /* A while command.  Recursively print its subcommands and
229 	 continue.  */
230       if (list->control_type == while_control
231 	  || list->control_type == while_stepping_control)
232 	{
233 	  /* For while-stepping, the line includes the 'while-stepping'
234 	     token.  See comment in process_next_line for explanation.
235 	     Here, take care not print 'while-stepping' twice.  */
236 	  if (list->control_type == while_control)
237 	    uiout->field_fmt (NULL, "while %s", list->line);
238 	  else
239 	    uiout->field_string (NULL, list->line);
240 	  uiout->text ("\n");
241 	  print_command_lines (uiout, *list->body_list, depth + 1);
242 	  if (depth)
243 	    uiout->spaces (2 * depth);
244 	  uiout->field_string (NULL, "end");
245 	  uiout->text ("\n");
246 	  list = list->next;
247 	  continue;
248 	}
249 
250       /* An if command.  Recursively print both arms before
251 	 continueing.  */
252       if (list->control_type == if_control)
253 	{
254 	  uiout->field_fmt (NULL, "if %s", list->line);
255 	  uiout->text ("\n");
256 	  /* The true arm.  */
257 	  print_command_lines (uiout, list->body_list[0], depth + 1);
258 
259 	  /* Show the false arm if it exists.  */
260 	  if (list->body_count == 2)
261 	    {
262 	      if (depth)
263 		uiout->spaces (2 * depth);
264 	      uiout->field_string (NULL, "else");
265 	      uiout->text ("\n");
266 	      print_command_lines (uiout, list->body_list[1], depth + 1);
267 	    }
268 
269 	  if (depth)
270 	    uiout->spaces (2 * depth);
271 	  uiout->field_string (NULL, "end");
272 	  uiout->text ("\n");
273 	  list = list->next;
274 	  continue;
275 	}
276 
277       /* A commands command.  Print the breakpoint commands and
278 	 continue.  */
279       if (list->control_type == commands_control)
280 	{
281 	  if (*(list->line))
282 	    uiout->field_fmt (NULL, "commands %s", list->line);
283 	  else
284 	    uiout->field_string (NULL, "commands");
285 	  uiout->text ("\n");
286 	  print_command_lines (uiout, *list->body_list, depth + 1);
287 	  if (depth)
288 	    uiout->spaces (2 * depth);
289 	  uiout->field_string (NULL, "end");
290 	  uiout->text ("\n");
291 	  list = list->next;
292 	  continue;
293 	}
294 
295       if (list->control_type == python_control)
296 	{
297 	  uiout->field_string (NULL, "python");
298 	  uiout->text ("\n");
299 	  /* Don't indent python code at all.  */
300 	  print_command_lines (uiout, *list->body_list, 0);
301 	  if (depth)
302 	    uiout->spaces (2 * depth);
303 	  uiout->field_string (NULL, "end");
304 	  uiout->text ("\n");
305 	  list = list->next;
306 	  continue;
307 	}
308 
309       if (list->control_type == compile_control)
310 	{
311 	  uiout->field_string (NULL, "compile expression");
312 	  uiout->text ("\n");
313 	  print_command_lines (uiout, *list->body_list, 0);
314 	  if (depth)
315 	    uiout->spaces (2 * depth);
316 	  uiout->field_string (NULL, "end");
317 	  uiout->text ("\n");
318 	  list = list->next;
319 	  continue;
320 	}
321 
322       if (list->control_type == guile_control)
323 	{
324 	  uiout->field_string (NULL, "guile");
325 	  uiout->text ("\n");
326 	  print_command_lines (uiout, *list->body_list, depth + 1);
327 	  if (depth)
328 	    uiout->spaces (2 * depth);
329 	  uiout->field_string (NULL, "end");
330 	  uiout->text ("\n");
331 	  list = list->next;
332 	  continue;
333 	}
334 
335       /* Ignore illegal command type and try next.  */
336       list = list->next;
337     }				/* while (list) */
338 }
339 
340 /* Handle pre-post hooks.  */
341 
342 static void
343 clear_hook_in_cleanup (void *data)
344 {
345   struct cmd_list_element *c = (struct cmd_list_element *) data;
346 
347   c->hook_in = 0; /* Allow hook to work again once it is complete.  */
348 }
349 
350 void
351 execute_cmd_pre_hook (struct cmd_list_element *c)
352 {
353   if ((c->hook_pre) && (!c->hook_in))
354     {
355       struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);
356       c->hook_in = 1; /* Prevent recursive hooking.  */
357       execute_user_command (c->hook_pre, (char *) 0);
358       do_cleanups (cleanups);
359     }
360 }
361 
362 void
363 execute_cmd_post_hook (struct cmd_list_element *c)
364 {
365   if ((c->hook_post) && (!c->hook_in))
366     {
367       struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);
368 
369       c->hook_in = 1; /* Prevent recursive hooking.  */
370       execute_user_command (c->hook_post, (char *) 0);
371       do_cleanups (cleanups);
372     }
373 }
374 
375 /* Execute the command in CMD.  */
376 static void
377 do_restore_user_call_depth (void * call_depth)
378 {
379   int *depth = (int *) call_depth;
380 
381   (*depth)--;
382   if ((*depth) == 0)
383     in_user_command = 0;
384 }
385 
386 
387 void
388 execute_user_command (struct cmd_list_element *c, char *args)
389 {
390   struct ui *ui = current_ui;
391   struct command_line *cmdlines;
392   struct cleanup *old_chain;
393   enum command_control_type ret;
394   static int user_call_depth = 0;
395   extern unsigned int max_user_call_depth;
396 
397   cmdlines = c->user_commands;
398   if (cmdlines == 0)
399     /* Null command */
400     return;
401 
402   scoped_user_args_level push_user_args (args);
403 
404   if (++user_call_depth > max_user_call_depth)
405     error (_("Max user call depth exceeded -- command aborted."));
406 
407   old_chain = make_cleanup (do_restore_user_call_depth, &user_call_depth);
408 
409   /* Set the instream to 0, indicating execution of a
410      user-defined function.  */
411   make_cleanup (do_restore_instream_cleanup, ui->instream);
412   ui->instream = NULL;
413 
414   /* Also set the global in_user_command, so that NULL instream is
415      not confused with Insight.  */
416   in_user_command = 1;
417 
418   scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
419 
420   command_nest_depth++;
421   while (cmdlines)
422     {
423       ret = execute_control_command (cmdlines);
424       if (ret != simple_control && ret != break_control)
425 	{
426 	  warning (_("Error executing canned sequence of commands."));
427 	  break;
428 	}
429       cmdlines = cmdlines->next;
430     }
431   command_nest_depth--;
432   do_cleanups (old_chain);
433 }
434 
435 /* This function is called every time GDB prints a prompt.  It ensures
436    that errors and the like do not confuse the command tracing.  */
437 
438 void
439 reset_command_nest_depth (void)
440 {
441   command_nest_depth = 1;
442 
443   /* Just in case.  */
444   suppress_next_print_command_trace = 0;
445 }
446 
447 /* Print the command, prefixed with '+' to represent the call depth.
448    This is slightly complicated because this function may be called
449    from execute_command and execute_control_command.  Unfortunately
450    execute_command also prints the top level control commands.
451    In these cases execute_command will call execute_control_command
452    via while_command or if_command.  Inner levels of 'if' and 'while'
453    are dealt with directly.  Therefore we can use these functions
454    to determine whether the command has been printed already or not.  */
455 void
456 print_command_trace (const char *cmd)
457 {
458   int i;
459 
460   if (suppress_next_print_command_trace)
461     {
462       suppress_next_print_command_trace = 0;
463       return;
464     }
465 
466   if (!source_verbose && !trace_commands)
467     return;
468 
469   for (i=0; i < command_nest_depth; i++)
470     printf_filtered ("+");
471 
472   printf_filtered ("%s\n", cmd);
473 }
474 
475 enum command_control_type
476 execute_control_command (struct command_line *cmd)
477 {
478   struct command_line *current;
479   struct value *val;
480   struct value *val_mark;
481   int loop;
482   enum command_control_type ret;
483 
484   /* Start by assuming failure, if a problem is detected, the code
485      below will simply "break" out of the switch.  */
486   ret = invalid_control;
487 
488   switch (cmd->control_type)
489     {
490     case simple_control:
491       {
492 	/* A simple command, execute it and return.  */
493 	std::string new_line = insert_user_defined_cmd_args (cmd->line);
494 	execute_command (&new_line[0], 0);
495 	ret = cmd->control_type;
496 	break;
497       }
498 
499     case continue_control:
500       print_command_trace ("loop_continue");
501 
502       /* Return for "continue", and "break" so we can either
503          continue the loop at the top, or break out.  */
504       ret = cmd->control_type;
505       break;
506 
507     case break_control:
508       print_command_trace ("loop_break");
509 
510       /* Return for "continue", and "break" so we can either
511          continue the loop at the top, or break out.  */
512       ret = cmd->control_type;
513       break;
514 
515     case while_control:
516       {
517 	int len = strlen (cmd->line) + 7;
518 	char *buffer = (char *) alloca (len);
519 
520 	xsnprintf (buffer, len, "while %s", cmd->line);
521 	print_command_trace (buffer);
522 
523 	/* Parse the loop control expression for the while statement.  */
524 	std::string new_line = insert_user_defined_cmd_args (cmd->line);
525 	expression_up expr = parse_expression (new_line.c_str ());
526 
527 	ret = simple_control;
528 	loop = 1;
529 
530 	/* Keep iterating so long as the expression is true.  */
531 	while (loop == 1)
532 	  {
533 	    int cond_result;
534 
535 	    QUIT;
536 
537 	    /* Evaluate the expression.  */
538 	    val_mark = value_mark ();
539 	    val = evaluate_expression (expr.get ());
540 	    cond_result = value_true (val);
541 	    value_free_to_mark (val_mark);
542 
543 	    /* If the value is false, then break out of the loop.  */
544 	    if (!cond_result)
545 	      break;
546 
547 	    /* Execute the body of the while statement.  */
548 	    current = *cmd->body_list;
549 	    while (current)
550 	      {
551 		command_nest_depth++;
552 		ret = execute_control_command (current);
553 		command_nest_depth--;
554 
555 		/* If we got an error, or a "break" command, then stop
556 		   looping.  */
557 		if (ret == invalid_control || ret == break_control)
558 		  {
559 		    loop = 0;
560 		    break;
561 		  }
562 
563 		/* If we got a "continue" command, then restart the loop
564 		   at this point.  */
565 		if (ret == continue_control)
566 		  break;
567 
568 		/* Get the next statement.  */
569 		current = current->next;
570 	      }
571 	  }
572 
573 	/* Reset RET so that we don't recurse the break all the way down.  */
574 	if (ret == break_control)
575 	  ret = simple_control;
576 
577 	break;
578       }
579 
580     case if_control:
581       {
582 	int len = strlen (cmd->line) + 4;
583 	char *buffer = (char *) alloca (len);
584 
585 	xsnprintf (buffer, len, "if %s", cmd->line);
586 	print_command_trace (buffer);
587 
588 	/* Parse the conditional for the if statement.  */
589 	std::string new_line = insert_user_defined_cmd_args (cmd->line);
590 	expression_up expr = parse_expression (new_line.c_str ());
591 
592 	current = NULL;
593 	ret = simple_control;
594 
595 	/* Evaluate the conditional.  */
596 	val_mark = value_mark ();
597 	val = evaluate_expression (expr.get ());
598 
599 	/* Choose which arm to take commands from based on the value
600 	   of the conditional expression.  */
601 	if (value_true (val))
602 	  current = *cmd->body_list;
603 	else if (cmd->body_count == 2)
604 	  current = *(cmd->body_list + 1);
605 	value_free_to_mark (val_mark);
606 
607 	/* Execute commands in the given arm.  */
608 	while (current)
609 	  {
610 	    command_nest_depth++;
611 	    ret = execute_control_command (current);
612 	    command_nest_depth--;
613 
614 	    /* If we got an error, get out.  */
615 	    if (ret != simple_control)
616 	      break;
617 
618 	    /* Get the next statement in the body.  */
619 	    current = current->next;
620 	  }
621 
622 	break;
623       }
624 
625     case commands_control:
626       {
627 	/* Breakpoint commands list, record the commands in the
628 	   breakpoint's command list and return.  */
629 	std::string new_line = insert_user_defined_cmd_args (cmd->line);
630 	ret = commands_from_control_command (new_line.c_str (), cmd);
631 	break;
632       }
633 
634     case compile_control:
635       eval_compile_command (cmd, NULL, cmd->control_u.compile.scope,
636 			    cmd->control_u.compile.scope_data);
637       ret = simple_control;
638       break;
639 
640     case python_control:
641     case guile_control:
642       {
643 	eval_ext_lang_from_control_command (cmd);
644 	ret = simple_control;
645 	break;
646       }
647 
648     default:
649       warning (_("Invalid control type in canned commands structure."));
650       break;
651     }
652 
653   return ret;
654 }
655 
656 /* Like execute_control_command, but first set
657    suppress_next_print_command_trace.  */
658 
659 enum command_control_type
660 execute_control_command_untraced (struct command_line *cmd)
661 {
662   suppress_next_print_command_trace = 1;
663   return execute_control_command (cmd);
664 }
665 
666 
667 /* "while" command support.  Executes a body of statements while the
668    loop condition is nonzero.  */
669 
670 static void
671 while_command (char *arg, int from_tty)
672 {
673   control_level = 1;
674   command_line_up command = get_command_line (while_control, arg);
675 
676   if (command == NULL)
677     return;
678 
679   scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
680 
681   execute_control_command_untraced (command.get ());
682 }
683 
684 /* "if" command support.  Execute either the true or false arm depending
685    on the value of the if conditional.  */
686 
687 static void
688 if_command (char *arg, int from_tty)
689 {
690   control_level = 1;
691   command_line_up command = get_command_line (if_control, arg);
692 
693   if (command == NULL)
694     return;
695 
696   scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
697 
698   execute_control_command_untraced (command.get ());
699 }
700 
701 /* Bind the incoming arguments for a user defined command to $arg0,
702    $arg1 ... $argN.  */
703 
704 user_args::user_args (const char *command_line)
705 {
706   const char *p;
707 
708   if (command_line == NULL)
709     return;
710 
711   m_command_line = command_line;
712   p = m_command_line.c_str ();
713 
714   while (*p)
715     {
716       const char *start_arg;
717       int squote = 0;
718       int dquote = 0;
719       int bsquote = 0;
720 
721       /* Strip whitespace.  */
722       while (*p == ' ' || *p == '\t')
723 	p++;
724 
725       /* P now points to an argument.  */
726       start_arg = p;
727 
728       /* Get to the end of this argument.  */
729       while (*p)
730 	{
731 	  if (((*p == ' ' || *p == '\t')) && !squote && !dquote && !bsquote)
732 	    break;
733 	  else
734 	    {
735 	      if (bsquote)
736 		bsquote = 0;
737 	      else if (*p == '\\')
738 		bsquote = 1;
739 	      else if (squote)
740 		{
741 		  if (*p == '\'')
742 		    squote = 0;
743 		}
744 	      else if (dquote)
745 		{
746 		  if (*p == '"')
747 		    dquote = 0;
748 		}
749 	      else
750 		{
751 		  if (*p == '\'')
752 		    squote = 1;
753 		  else if (*p == '"')
754 		    dquote = 1;
755 		}
756 	      p++;
757 	    }
758 	}
759 
760       m_args.emplace_back (start_arg, p - start_arg);
761     }
762 }
763 
764 /* Given character string P, return a point to the first argument
765    ($arg), or NULL if P contains no arguments.  */
766 
767 static const char *
768 locate_arg (const char *p)
769 {
770   while ((p = strchr (p, '$')))
771     {
772       if (startswith (p, "$arg")
773 	  && (isdigit (p[4]) || p[4] == 'c'))
774 	return p;
775       p++;
776     }
777   return NULL;
778 }
779 
780 /* See cli-script.h.  */
781 
782 std::string
783 insert_user_defined_cmd_args (const char *line)
784 {
785   /* If we are not in a user-defined command, treat $argc, $arg0, et
786      cetera as normal convenience variables.  */
787   if (user_args_stack.empty ())
788     return line;
789 
790   const std::unique_ptr<user_args> &args = user_args_stack.back ();
791   return args->insert_args (line);
792 }
793 
794 /* Insert the user defined arguments stored in user_args into the $arg
795    arguments found in line.  */
796 
797 std::string
798 user_args::insert_args (const char *line) const
799 {
800   std::string new_line;
801   const char *p;
802 
803   while ((p = locate_arg (line)))
804     {
805       new_line.append (line, p - line);
806 
807       if (p[4] == 'c')
808 	{
809 	  new_line += gdb::to_string (m_args.size ());
810 	  line = p + 5;
811 	}
812       else
813 	{
814 	  char *tmp;
815 	  unsigned long i;
816 
817 	  errno = 0;
818 	  i = strtoul (p + 4, &tmp, 10);
819 	  if ((i == 0 && tmp == p + 4) || errno != 0)
820 	    line = p + 4;
821 	  else if (i >= m_args.size ())
822 	    error (_("Missing argument %ld in user function."), i);
823 	  else
824 	    {
825 	      new_line.append (m_args[i].str, m_args[i].len);
826 	      line = tmp;
827 	    }
828 	}
829     }
830   /* Don't forget the tail.  */
831   new_line.append (line);
832 
833   return new_line;
834 }
835 
836 
837 /* Expand the body_list of COMMAND so that it can hold NEW_LENGTH
838    code bodies.  This is typically used when we encounter an "else"
839    clause for an "if" command.  */
840 
841 static void
842 realloc_body_list (struct command_line *command, int new_length)
843 {
844   int n;
845   struct command_line **body_list;
846 
847   n = command->body_count;
848 
849   /* Nothing to do?  */
850   if (new_length <= n)
851     return;
852 
853   body_list = XCNEWVEC (struct command_line *, new_length);
854 
855   memcpy (body_list, command->body_list, sizeof (struct command_line *) * n);
856 
857   xfree (command->body_list);
858   command->body_list = body_list;
859   command->body_count = new_length;
860 }
861 
862 /* Read next line from stdin.  Passed to read_command_line_1 and
863    recurse_read_control_structure whenever we need to read commands
864    from stdin.  */
865 
866 static char *
867 read_next_line (void)
868 {
869   struct ui *ui = current_ui;
870   char *prompt_ptr, control_prompt[256];
871   int i = 0;
872   int from_tty = ui->instream == ui->stdin_stream;
873 
874   if (control_level >= 254)
875     error (_("Control nesting too deep!"));
876 
877   /* Set a prompt based on the nesting of the control commands.  */
878   if (from_tty
879       || (ui->instream == 0 && deprecated_readline_hook != NULL))
880     {
881       for (i = 0; i < control_level; i++)
882 	control_prompt[i] = ' ';
883       control_prompt[i] = '>';
884       control_prompt[i + 1] = '\0';
885       prompt_ptr = (char *) &control_prompt[0];
886     }
887   else
888     prompt_ptr = NULL;
889 
890   return command_line_input (prompt_ptr, from_tty, "commands");
891 }
892 
893 /* Return true if CMD's name is NAME.  */
894 
895 static bool
896 command_name_equals (struct cmd_list_element *cmd, const char *name)
897 {
898   return (cmd != NULL
899 	  && cmd != CMD_LIST_AMBIGUOUS
900 	  && strcmp (cmd->name, name) == 0);
901 }
902 
903 /* Given an input line P, skip the command and return a pointer to the
904    first argument.  */
905 
906 static const char *
907 line_first_arg (const char *p)
908 {
909   const char *first_arg = p + find_command_name_length (p);
910 
911   return skip_spaces_const (first_arg);
912 }
913 
914 /* Process one input line.  If the command is an "end", return such an
915    indication to the caller.  If PARSE_COMMANDS is true, strip leading
916    whitespace (trailing whitespace is always stripped) in the line,
917    attempt to recognize GDB control commands, and also return an
918    indication if the command is an "else" or a nop.
919 
920    Otherwise, only "end" is recognized.  */
921 
922 static enum misc_command_type
923 process_next_line (char *p, struct command_line **command, int parse_commands,
924 		   void (*validator)(char *, void *), void *closure)
925 {
926   char *p_end;
927   char *p_start;
928   int not_handled = 0;
929 
930   /* Not sure what to do here.  */
931   if (p == NULL)
932     return end_command;
933 
934   /* Strip trailing whitespace.  */
935   p_end = p + strlen (p);
936   while (p_end > p && (p_end[-1] == ' ' || p_end[-1] == '\t'))
937     p_end--;
938 
939   p_start = p;
940   /* Strip leading whitespace.  */
941   while (p_start < p_end && (*p_start == ' ' || *p_start == '\t'))
942     p_start++;
943 
944   /* 'end' is always recognized, regardless of parse_commands value.
945      We also permit whitespace before end and after.  */
946   if (p_end - p_start == 3 && startswith (p_start, "end"))
947     return end_command;
948 
949   if (parse_commands)
950     {
951       /* Resolve command abbreviations (e.g. 'ws' for 'while-stepping').  */
952       const char *cmd_name = p;
953       struct cmd_list_element *cmd
954 	= lookup_cmd_1 (&cmd_name, cmdlist, NULL, 1);
955 
956       /* If commands are parsed, we skip initial spaces.  Otherwise,
957 	 which is the case for Python commands and documentation
958 	 (see the 'document' command), spaces are preserved.  */
959       p = p_start;
960 
961       /* Blanks and comments don't really do anything, but we need to
962 	 distinguish them from else, end and other commands which can
963 	 be executed.  */
964       if (p_end == p || p[0] == '#')
965 	return nop_command;
966 
967       /* Is the else clause of an if control structure?  */
968       if (p_end - p == 4 && startswith (p, "else"))
969 	return else_command;
970 
971       /* Check for while, if, break, continue, etc and build a new
972 	 command line structure for them.  */
973       if (command_name_equals (cmd, "while-stepping"))
974 	{
975 	  /* Because validate_actionline and encode_action lookup
976 	     command's line as command, we need the line to
977 	     include 'while-stepping'.
978 
979 	     For 'ws' alias, the command will have 'ws', not expanded
980 	     to 'while-stepping'.  This is intentional -- we don't
981 	     really want frontend to send a command list with 'ws',
982 	     and next break-info returning command line with
983 	     'while-stepping'.  This should work, but might cause the
984 	     breakpoint to be marked as changed while it's actually
985 	     not.  */
986 	  *command = build_command_line (while_stepping_control, p);
987 	}
988       else if (command_name_equals (cmd, "while"))
989 	{
990 	  *command = build_command_line (while_control, line_first_arg (p));
991 	}
992       else if (command_name_equals (cmd, "if"))
993 	{
994 	  *command = build_command_line (if_control, line_first_arg (p));
995 	}
996       else if (command_name_equals (cmd, "commands"))
997 	{
998 	  *command = build_command_line (commands_control, line_first_arg (p));
999 	}
1000       else if (command_name_equals (cmd, "python"))
1001 	{
1002 	  /* Note that we ignore the inline "python command" form
1003 	     here.  */
1004 	  *command = build_command_line (python_control, "");
1005 	}
1006       else if (command_name_equals (cmd, "compile"))
1007 	{
1008 	  /* Note that we ignore the inline "compile command" form
1009 	     here.  */
1010 	  *command = build_command_line (compile_control, "");
1011 	  (*command)->control_u.compile.scope = COMPILE_I_INVALID_SCOPE;
1012 	}
1013 
1014       else if (command_name_equals (cmd, "guile"))
1015 	{
1016 	  /* Note that we ignore the inline "guile command" form here.  */
1017 	  *command = build_command_line (guile_control, "");
1018 	}
1019       else if (p_end - p == 10 && startswith (p, "loop_break"))
1020 	{
1021 	  *command = XNEW (struct command_line);
1022 	  (*command)->next = NULL;
1023 	  (*command)->line = NULL;
1024 	  (*command)->control_type = break_control;
1025 	  (*command)->body_count = 0;
1026 	  (*command)->body_list = NULL;
1027 	}
1028       else if (p_end - p == 13 && startswith (p, "loop_continue"))
1029 	{
1030 	  *command = XNEW (struct command_line);
1031 	  (*command)->next = NULL;
1032 	  (*command)->line = NULL;
1033 	  (*command)->control_type = continue_control;
1034 	  (*command)->body_count = 0;
1035 	  (*command)->body_list = NULL;
1036 	}
1037       else
1038 	not_handled = 1;
1039     }
1040 
1041   if (!parse_commands || not_handled)
1042     {
1043       /* A normal command.  */
1044       *command = XNEW (struct command_line);
1045       (*command)->next = NULL;
1046       (*command)->line = savestring (p, p_end - p);
1047       (*command)->control_type = simple_control;
1048       (*command)->body_count = 0;
1049       (*command)->body_list = NULL;
1050     }
1051 
1052   if (validator)
1053     {
1054 
1055       TRY
1056 	{
1057 	  validator ((*command)->line, closure);
1058 	}
1059       CATCH (ex, RETURN_MASK_ALL)
1060 	{
1061 	  xfree (*command);
1062 	  throw_exception (ex);
1063 	}
1064       END_CATCH
1065     }
1066 
1067   /* Nothing special.  */
1068   return ok_command;
1069 }
1070 
1071 /* Recursively read in the control structures and create a
1072    command_line structure from them.  Use read_next_line_func to
1073    obtain lines of the command.  */
1074 
1075 static enum command_control_type
1076 recurse_read_control_structure (char * (*read_next_line_func) (void),
1077 				struct command_line *current_cmd,
1078 				void (*validator)(char *, void *),
1079 				void *closure)
1080 {
1081   int current_body, i;
1082   enum misc_command_type val;
1083   enum command_control_type ret;
1084   struct command_line **body_ptr, *child_tail, *next;
1085 
1086   child_tail = NULL;
1087   current_body = 1;
1088 
1089   /* Sanity checks.  */
1090   if (current_cmd->control_type == simple_control)
1091     error (_("Recursed on a simple control type."));
1092 
1093   if (current_body > current_cmd->body_count)
1094     error (_("Allocated body is smaller than this command type needs."));
1095 
1096   /* Read lines from the input stream and build control structures.  */
1097   while (1)
1098     {
1099       dont_repeat ();
1100 
1101       next = NULL;
1102       val = process_next_line (read_next_line_func (), &next,
1103 			       current_cmd->control_type != python_control
1104 			       && current_cmd->control_type != guile_control
1105 			       && current_cmd->control_type != compile_control,
1106 			       validator, closure);
1107 
1108       /* Just skip blanks and comments.  */
1109       if (val == nop_command)
1110 	continue;
1111 
1112       if (val == end_command)
1113 	{
1114 	  if (multi_line_command_p (current_cmd->control_type))
1115 	    {
1116 	      /* Success reading an entire canned sequence of commands.  */
1117 	      ret = simple_control;
1118 	      break;
1119 	    }
1120 	  else
1121 	    {
1122 	      ret = invalid_control;
1123 	      break;
1124 	    }
1125 	}
1126 
1127       /* Not the end of a control structure.  */
1128       if (val == else_command)
1129 	{
1130 	  if (current_cmd->control_type == if_control
1131 	      && current_body == 1)
1132 	    {
1133 	      realloc_body_list (current_cmd, 2);
1134 	      current_body = 2;
1135 	      child_tail = NULL;
1136 	      continue;
1137 	    }
1138 	  else
1139 	    {
1140 	      ret = invalid_control;
1141 	      break;
1142 	    }
1143 	}
1144 
1145       if (child_tail)
1146 	{
1147 	  child_tail->next = next;
1148 	}
1149       else
1150 	{
1151 	  body_ptr = current_cmd->body_list;
1152 	  for (i = 1; i < current_body; i++)
1153 	    body_ptr++;
1154 
1155 	  *body_ptr = next;
1156 
1157 	}
1158 
1159       child_tail = next;
1160 
1161       /* If the latest line is another control structure, then recurse
1162          on it.  */
1163       if (multi_line_command_p (next->control_type))
1164 	{
1165 	  control_level++;
1166 	  ret = recurse_read_control_structure (read_next_line_func, next,
1167 						validator, closure);
1168 	  control_level--;
1169 
1170 	  if (ret != simple_control)
1171 	    break;
1172 	}
1173     }
1174 
1175   dont_repeat ();
1176 
1177   return ret;
1178 }
1179 
1180 static void
1181 restore_interp (void *arg)
1182 {
1183   interp_set_temp (interp_name ((struct interp *)arg));
1184 }
1185 
1186 /* Read lines from the input stream and accumulate them in a chain of
1187    struct command_line's, which is then returned.  For input from a
1188    terminal, the special command "end" is used to mark the end of the
1189    input, and is not included in the returned chain of commands.
1190 
1191    If PARSE_COMMANDS is true, strip leading whitespace (trailing whitespace
1192    is always stripped) in the line and attempt to recognize GDB control
1193    commands.  Otherwise, only "end" is recognized.  */
1194 
1195 #define END_MESSAGE "End with a line saying just \"end\"."
1196 
1197 command_line_up
1198 read_command_lines (char *prompt_arg, int from_tty, int parse_commands,
1199 		    void (*validator)(char *, void *), void *closure)
1200 {
1201   if (from_tty && input_interactive_p (current_ui))
1202     {
1203       if (deprecated_readline_begin_hook)
1204 	{
1205 	  /* Note - intentional to merge messages with no newline.  */
1206 	  (*deprecated_readline_begin_hook) ("%s  %s\n", prompt_arg,
1207 					     END_MESSAGE);
1208 	}
1209       else
1210 	{
1211 	  printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
1212 	  gdb_flush (gdb_stdout);
1213 	}
1214     }
1215 
1216 
1217   /* Reading commands assumes the CLI behavior, so temporarily
1218      override the current interpreter with CLI.  */
1219   command_line_up head;
1220   if (current_interp_named_p (INTERP_CONSOLE))
1221     head = read_command_lines_1 (read_next_line, parse_commands,
1222 				 validator, closure);
1223   else
1224     {
1225       struct interp *old_interp = interp_set_temp (INTERP_CONSOLE);
1226       struct cleanup *old_chain = make_cleanup (restore_interp, old_interp);
1227 
1228       head = read_command_lines_1 (read_next_line, parse_commands,
1229 				   validator, closure);
1230       do_cleanups (old_chain);
1231     }
1232 
1233   if (from_tty && input_interactive_p (current_ui)
1234       && deprecated_readline_end_hook)
1235     {
1236       (*deprecated_readline_end_hook) ();
1237     }
1238   return (head);
1239 }
1240 
1241 /* Act the same way as read_command_lines, except that each new line is
1242    obtained using READ_NEXT_LINE_FUNC.  */
1243 
1244 command_line_up
1245 read_command_lines_1 (char * (*read_next_line_func) (void), int parse_commands,
1246 		      void (*validator)(char *, void *), void *closure)
1247 {
1248   struct command_line *tail, *next;
1249   command_line_up head;
1250   enum command_control_type ret;
1251   enum misc_command_type val;
1252 
1253   control_level = 0;
1254   tail = NULL;
1255 
1256   while (1)
1257     {
1258       dont_repeat ();
1259       val = process_next_line (read_next_line_func (), &next, parse_commands,
1260 			       validator, closure);
1261 
1262       /* Ignore blank lines or comments.  */
1263       if (val == nop_command)
1264 	continue;
1265 
1266       if (val == end_command)
1267 	{
1268 	  ret = simple_control;
1269 	  break;
1270 	}
1271 
1272       if (val != ok_command)
1273 	{
1274 	  ret = invalid_control;
1275 	  break;
1276 	}
1277 
1278       if (multi_line_command_p (next->control_type))
1279 	{
1280 	  control_level++;
1281 	  ret = recurse_read_control_structure (read_next_line_func, next,
1282 						validator, closure);
1283 	  control_level--;
1284 
1285 	  if (ret == invalid_control)
1286 	    break;
1287 	}
1288 
1289       if (tail)
1290 	{
1291 	  tail->next = next;
1292 	}
1293       else
1294 	{
1295 	  head.reset (next);
1296 	}
1297       tail = next;
1298     }
1299 
1300   dont_repeat ();
1301 
1302   if (ret == invalid_control)
1303     return NULL;
1304 
1305   return head;
1306 }
1307 
1308 /* Free a chain of struct command_line's.  */
1309 
1310 void
1311 free_command_lines (struct command_line **lptr)
1312 {
1313   struct command_line *l = *lptr;
1314   struct command_line *next;
1315   struct command_line **blist;
1316   int i;
1317 
1318   while (l)
1319     {
1320       if (l->body_count > 0)
1321 	{
1322 	  blist = l->body_list;
1323 	  for (i = 0; i < l->body_count; i++, blist++)
1324 	    free_command_lines (blist);
1325 	}
1326       next = l->next;
1327       xfree (l->line);
1328       xfree (l);
1329       l = next;
1330     }
1331   *lptr = NULL;
1332 }
1333 
1334 command_line_up
1335 copy_command_lines (struct command_line *cmds)
1336 {
1337   struct command_line *result = NULL;
1338 
1339   if (cmds)
1340     {
1341       result = XNEW (struct command_line);
1342 
1343       result->next = copy_command_lines (cmds->next).release ();
1344       result->line = xstrdup (cmds->line);
1345       result->control_type = cmds->control_type;
1346       result->body_count = cmds->body_count;
1347       if (cmds->body_count > 0)
1348         {
1349           int i;
1350 
1351           result->body_list = XNEWVEC (struct command_line *, cmds->body_count);
1352 
1353           for (i = 0; i < cmds->body_count; i++)
1354             result->body_list[i]
1355 	      = copy_command_lines (cmds->body_list[i]).release ();
1356         }
1357       else
1358         result->body_list = NULL;
1359     }
1360 
1361   return command_line_up (result);
1362 }
1363 
1364 /* Validate that *COMNAME is a valid name for a command.  Return the
1365    containing command list, in case it starts with a prefix command.
1366    The prefix must already exist.  *COMNAME is advanced to point after
1367    any prefix, and a NUL character overwrites the space after the
1368    prefix.  */
1369 
1370 static struct cmd_list_element **
1371 validate_comname (char **comname)
1372 {
1373   struct cmd_list_element **list = &cmdlist;
1374   char *p, *last_word;
1375 
1376   if (*comname == 0)
1377     error_no_arg (_("name of command to define"));
1378 
1379   /* Find the last word of the argument.  */
1380   p = *comname + strlen (*comname);
1381   while (p > *comname && isspace (p[-1]))
1382     p--;
1383   while (p > *comname && !isspace (p[-1]))
1384     p--;
1385   last_word = p;
1386 
1387   /* Find the corresponding command list.  */
1388   if (last_word != *comname)
1389     {
1390       struct cmd_list_element *c;
1391       char saved_char;
1392       const char *tem = *comname;
1393 
1394       /* Separate the prefix and the command.  */
1395       saved_char = last_word[-1];
1396       last_word[-1] = '\0';
1397 
1398       c = lookup_cmd (&tem, cmdlist, "", 0, 1);
1399       if (c->prefixlist == NULL)
1400 	error (_("\"%s\" is not a prefix command."), *comname);
1401 
1402       list = c->prefixlist;
1403       last_word[-1] = saved_char;
1404       *comname = last_word;
1405     }
1406 
1407   p = *comname;
1408   while (*p)
1409     {
1410       if (!isalnum (*p) && *p != '-' && *p != '_')
1411 	error (_("Junk in argument list: \"%s\""), p);
1412       p++;
1413     }
1414 
1415   return list;
1416 }
1417 
1418 /* This is just a placeholder in the command data structures.  */
1419 static void
1420 user_defined_command (char *ignore, int from_tty)
1421 {
1422 }
1423 
1424 static void
1425 define_command (char *comname, int from_tty)
1426 {
1427 #define MAX_TMPBUF 128
1428   enum cmd_hook_type
1429     {
1430       CMD_NO_HOOK = 0,
1431       CMD_PRE_HOOK,
1432       CMD_POST_HOOK
1433     };
1434   struct cmd_list_element *c, *newc, *hookc = 0, **list;
1435   char *tem, *comfull;
1436   const char *tem_c;
1437   char tmpbuf[MAX_TMPBUF];
1438   int  hook_type      = CMD_NO_HOOK;
1439   int  hook_name_size = 0;
1440 
1441 #define	HOOK_STRING	"hook-"
1442 #define	HOOK_LEN 5
1443 #define HOOK_POST_STRING "hookpost-"
1444 #define HOOK_POST_LEN    9
1445 
1446   comfull = comname;
1447   list = validate_comname (&comname);
1448 
1449   /* Look it up, and verify that we got an exact match.  */
1450   tem_c = comname;
1451   c = lookup_cmd (&tem_c, *list, "", -1, 1);
1452   if (c && strcmp (comname, c->name) != 0)
1453     c = 0;
1454 
1455   if (c)
1456     {
1457       int q;
1458 
1459       if (c->theclass == class_user || c->theclass == class_alias)
1460 	q = query (_("Redefine command \"%s\"? "), c->name);
1461       else
1462 	q = query (_("Really redefine built-in command \"%s\"? "), c->name);
1463       if (!q)
1464 	error (_("Command \"%s\" not redefined."), c->name);
1465     }
1466 
1467   /* If this new command is a hook, then mark the command which it
1468      is hooking.  Note that we allow hooking `help' commands, so that
1469      we can hook the `stop' pseudo-command.  */
1470 
1471   if (!strncmp (comname, HOOK_STRING, HOOK_LEN))
1472     {
1473        hook_type      = CMD_PRE_HOOK;
1474        hook_name_size = HOOK_LEN;
1475     }
1476   else if (!strncmp (comname, HOOK_POST_STRING, HOOK_POST_LEN))
1477     {
1478       hook_type      = CMD_POST_HOOK;
1479       hook_name_size = HOOK_POST_LEN;
1480     }
1481 
1482   if (hook_type != CMD_NO_HOOK)
1483     {
1484       /* Look up cmd it hooks, and verify that we got an exact match.  */
1485       tem_c = comname + hook_name_size;
1486       hookc = lookup_cmd (&tem_c, *list, "", -1, 0);
1487       if (hookc && strcmp (comname + hook_name_size, hookc->name) != 0)
1488 	hookc = 0;
1489       if (!hookc)
1490 	{
1491 	  warning (_("Your new `%s' command does not "
1492 		     "hook any existing command."),
1493 		   comfull);
1494 	  if (!query (_("Proceed? ")))
1495 	    error (_("Not confirmed."));
1496 	}
1497     }
1498 
1499   comname = xstrdup (comname);
1500 
1501   xsnprintf (tmpbuf, sizeof (tmpbuf),
1502 	     "Type commands for definition of \"%s\".", comfull);
1503   command_line_up cmds = read_command_lines (tmpbuf, from_tty, 1, 0, 0);
1504 
1505   if (c && c->theclass == class_user)
1506     free_command_lines (&c->user_commands);
1507 
1508   newc = add_cmd (comname, class_user, user_defined_command,
1509 		  (c && c->theclass == class_user)
1510 		  ? c->doc : xstrdup ("User-defined."), list);
1511   newc->user_commands = cmds.release ();
1512 
1513   /* If this new command is a hook, then mark both commands as being
1514      tied.  */
1515   if (hookc)
1516     {
1517       switch (hook_type)
1518         {
1519         case CMD_PRE_HOOK:
1520           hookc->hook_pre  = newc;  /* Target gets hooked.  */
1521           newc->hookee_pre = hookc; /* We are marked as hooking target cmd.  */
1522           break;
1523         case CMD_POST_HOOK:
1524           hookc->hook_post  = newc;  /* Target gets hooked.  */
1525           newc->hookee_post = hookc; /* We are marked as hooking
1526 					target cmd.  */
1527           break;
1528         default:
1529           /* Should never come here as hookc would be 0.  */
1530 	  internal_error (__FILE__, __LINE__, _("bad switch"));
1531         }
1532     }
1533 }
1534 
1535 static void
1536 document_command (char *comname, int from_tty)
1537 {
1538   struct cmd_list_element *c, **list;
1539   const char *tem;
1540   char *comfull;
1541   char tmpbuf[128];
1542 
1543   comfull = comname;
1544   list = validate_comname (&comname);
1545 
1546   tem = comname;
1547   c = lookup_cmd (&tem, *list, "", 0, 1);
1548 
1549   if (c->theclass != class_user)
1550     error (_("Command \"%s\" is built-in."), comfull);
1551 
1552   xsnprintf (tmpbuf, sizeof (tmpbuf), "Type documentation for \"%s\".",
1553 	     comfull);
1554   command_line_up doclines = read_command_lines (tmpbuf, from_tty, 0, 0, 0);
1555 
1556   if (c->doc)
1557     xfree ((char *) c->doc);
1558 
1559   {
1560     struct command_line *cl1;
1561     int len = 0;
1562     char *doc;
1563 
1564     for (cl1 = doclines.get (); cl1; cl1 = cl1->next)
1565       len += strlen (cl1->line) + 1;
1566 
1567     doc = (char *) xmalloc (len + 1);
1568     *doc = 0;
1569 
1570     for (cl1 = doclines.get (); cl1; cl1 = cl1->next)
1571       {
1572 	strcat (doc, cl1->line);
1573 	if (cl1->next)
1574 	  strcat (doc, "\n");
1575       }
1576 
1577     c->doc = doc;
1578   }
1579 }
1580 
1581 struct source_cleanup_lines_args
1582 {
1583   int old_line;
1584   const char *old_file;
1585 };
1586 
1587 static void
1588 source_cleanup_lines (void *args)
1589 {
1590   struct source_cleanup_lines_args *p =
1591     (struct source_cleanup_lines_args *) args;
1592 
1593   source_line_number = p->old_line;
1594   source_file_name = p->old_file;
1595 }
1596 
1597 /* Used to implement source_command.  */
1598 
1599 void
1600 script_from_file (FILE *stream, const char *file)
1601 {
1602   struct cleanup *old_cleanups;
1603   struct source_cleanup_lines_args old_lines;
1604 
1605   if (stream == NULL)
1606     internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
1607 
1608   old_lines.old_line = source_line_number;
1609   old_lines.old_file = source_file_name;
1610   old_cleanups = make_cleanup (source_cleanup_lines, &old_lines);
1611   source_line_number = 0;
1612   source_file_name = file;
1613 
1614   {
1615     scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
1616 
1617     TRY
1618       {
1619 	read_command_file (stream);
1620       }
1621     CATCH (e, RETURN_MASK_ERROR)
1622       {
1623 	/* Re-throw the error, but with the file name information
1624 	   prepended.  */
1625 	throw_error (e.error,
1626 		     _("%s:%d: Error in sourced command file:\n%s"),
1627 		     source_file_name, source_line_number, e.message);
1628       }
1629     END_CATCH
1630   }
1631 
1632   do_cleanups (old_cleanups);
1633 }
1634 
1635 /* Print the definition of user command C to STREAM.  Or, if C is a
1636    prefix command, show the definitions of all user commands under C
1637    (recursively).  PREFIX and NAME combined are the name of the
1638    current command.  */
1639 void
1640 show_user_1 (struct cmd_list_element *c, const char *prefix, const char *name,
1641 	     struct ui_file *stream)
1642 {
1643   struct command_line *cmdlines;
1644 
1645   if (c->prefixlist != NULL)
1646     {
1647       const char *prefixname = c->prefixname;
1648 
1649       for (c = *c->prefixlist; c != NULL; c = c->next)
1650 	if (c->theclass == class_user || c->prefixlist != NULL)
1651 	  show_user_1 (c, prefixname, c->name, gdb_stdout);
1652       return;
1653     }
1654 
1655   cmdlines = c->user_commands;
1656   fprintf_filtered (stream, "User command \"%s%s\":\n", prefix, name);
1657 
1658   if (!cmdlines)
1659     return;
1660   print_command_lines (current_uiout, cmdlines, 1);
1661   fputs_filtered ("\n", stream);
1662 }
1663 
1664 
1665 
1666 initialize_file_ftype _initialize_cli_script;
1667 
1668 void
1669 _initialize_cli_script (void)
1670 {
1671   add_com ("document", class_support, document_command, _("\
1672 Document a user-defined command.\n\
1673 Give command name as argument.  Give documentation on following lines.\n\
1674 End with a line of just \"end\"."));
1675   add_com ("define", class_support, define_command, _("\
1676 Define a new command name.  Command name is argument.\n\
1677 Definition appears on following lines, one command per line.\n\
1678 End with a line of just \"end\".\n\
1679 Use the \"document\" command to give documentation for the new command.\n\
1680 Commands defined in this way may have up to ten arguments."));
1681 
1682   add_com ("while", class_support, while_command, _("\
1683 Execute nested commands WHILE the conditional expression is non zero.\n\
1684 The conditional expression must follow the word `while' and must in turn be\n\
1685 followed by a new line.  The nested commands must be entered one per line,\n\
1686 and should be terminated by the word `end'."));
1687 
1688   add_com ("if", class_support, if_command, _("\
1689 Execute nested commands once IF the conditional expression is non zero.\n\
1690 The conditional expression must follow the word `if' and must in turn be\n\
1691 followed by a new line.  The nested commands must be entered one per line,\n\
1692 and should be terminated by the word 'else' or `end'.  If an else clause\n\
1693 is used, the same rules apply to its nested commands as to the first ones."));
1694 }
1695