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