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