diff options
author | Tom Tromey <tom@tromey.com> | 2018-04-16 23:13:18 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-05-04 15:58:06 -0600 |
commit | 12973681f5d46a2407a8dc97c3352fa6c9971716 (patch) | |
tree | 855a0883362448d04b745b1d33af5ec1578e156b /gdb/breakpoint.c | |
parent | e2fc72e2c594968084b936bc5dc4702a2c0694f8 (diff) | |
download | gdb-12973681f5d46a2407a8dc97c3352fa6c9971716.zip gdb-12973681f5d46a2407a8dc97c3352fa6c9971716.tar.gz gdb-12973681f5d46a2407a8dc97c3352fa6c9971716.tar.bz2 |
Use counted_command_line everywhere
Currently command lines are reference counted using shared_ptr only
when attached to breakpoints. This patch changes gdb to use
shared_ptr in commands as well. This allows for the removal of
copy_command_lines.
Note that the change to execute_user_command explicitly makes a new
reference to the command line. This will be used in a later patch.
This simplifies struct command_line based on the observation that a
given command can have at most two child bodies: an "if" can have both
"then" and "else" parts. Perhaps the names I've chosen for the
replacements here are not very good -- your input requested.
ChangeLog
2018-05-04 Tom Tromey <tom@tromey.com>
* tracepoint.c (all_tracepoint_actions): Rename from
all_tracepoint_actions_and_cleanup. Change return type.
(actions_command, encode_actions_1, encode_actions)
(trace_dump_actions, tdump_command): Update.
* remote.c (remote_download_command_source): Update.
* python/python.c (gdbpy_eval_from_control_command)
(python_command, python_interactive_command): Update.
* mi/mi-cmd-break.c (mi_cmd_break_commands): Update.
* guile/guile.c (guile_command)
(gdbscm_eval_from_control_command, guile_command): Update.
* compile/compile.c (compile_code_command)
(compile_print_command, compile_to_object): Update.
* cli/cli-script.h (struct command_lines_deleter): New.
(counted_command_line): New typedef.
(struct command_line): Add constructor, destructor.
<body_list>: Remove.
<body_list_0, body_list_1>: New members.
(command_line_up): Remove typedef.
(read_command_lines, read_command_lines_1, get_command_line):
Update.
(copy_command_lines): Don't declare.
* cli/cli-script.c (build_command_line): Use "new".
(get_command_line): Return counted_command_line.
(print_command_lines, execute_user_command)
(execute_control_command_1, while_command, if_command): Update.
(realloc_body_list): Remove.
(process_next_line, recurse_read_control_structure): Update.
(read_command_lines, read_command_lines_1): Return counted_command_line.
(free_command_lines): Use "delete".
(copy_command_lines): Remove.
(define_command, document_command, show_user_1): Update.
* cli/cli-decode.h (struct cmd_list_element) <user_commands>: Now
a counted_command_line.
* breakpoint.h (counted_command_line): Remove typedef.
(breakpoint_set_commands): Update.
* breakpoint.c (check_no_tracepoint_commands)
(validate_commands_for_breakpoint): Update.
(breakpoint_set_commands): Change commands to be a
counted_command_line.
(commands_command_1, update_dprintf_command_list)
(create_tracepoint_from_upload): Update.
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r-- | gdb/breakpoint.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 779240b..7d1daa2 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -1015,8 +1015,8 @@ check_no_tracepoint_commands (struct command_line *commands) error (_("The 'while-stepping' command can " "only be used for tracepoints")); - for (i = 0; i < c->body_count; ++i) - check_no_tracepoint_commands ((c->body_list)[i]); + check_no_tracepoint_commands (c->body_list_0.get ()); + check_no_tracepoint_commands (c->body_list_1.get ()); /* Not that command parsing removes leading whitespace and comment lines and also empty lines. So, we only need to check for @@ -1127,8 +1127,8 @@ validate_commands_for_breakpoint (struct breakpoint *b, { struct command_line *c2; - gdb_assert (while_stepping->body_count == 1); - c2 = while_stepping->body_list[0]; + gdb_assert (while_stepping->body_list_1 == nullptr); + c2 = while_stepping->body_list_0.get (); for (; c2; c2 = c2->next) { if (c2->control_type == while_stepping_control) @@ -1168,7 +1168,7 @@ static_tracepoints_here (CORE_ADDR addr) void breakpoint_set_commands (struct breakpoint *b, - command_line_up &&commands) + counted_command_line &&commands) { validate_commands_for_breakpoint (b, commands.get ()); @@ -1248,7 +1248,7 @@ commands_command_1 (const char *arg, int from_tty, if (cmd == NULL) { if (control != NULL) - cmd = copy_command_lines (control->body_list[0]); + cmd = control->body_list_0; else { std::string str @@ -8773,18 +8773,12 @@ update_dprintf_command_list (struct breakpoint *b) _("Invalid dprintf style.")); gdb_assert (printf_line != NULL); - /* Manufacture a printf sequence. */ - { - struct command_line *printf_cmd_line = XNEW (struct command_line); - - printf_cmd_line->control_type = simple_control; - printf_cmd_line->body_count = 0; - printf_cmd_line->body_list = NULL; - printf_cmd_line->next = NULL; - printf_cmd_line->line = printf_line; - breakpoint_set_commands (b, command_line_up (printf_cmd_line)); - } + /* Manufacture a printf sequence. */ + struct command_line *printf_cmd_line + = new struct command_line (simple_control, printf_line); + breakpoint_set_commands (b, counted_command_line (printf_cmd_line, + command_lines_deleter ())); } /* Update all dprintf commands, making their command lists reflect @@ -14785,7 +14779,7 @@ create_tracepoint_from_upload (struct uploaded_tp *utp) function. */ if (!utp->cmd_strings.empty ()) { - command_line_up cmd_list; + counted_command_line cmd_list; this_utp = utp; next_cmd = 0; |