diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/cli/cli-setshow.c | 96 | ||||
-rw-r--r-- | gdb/command.h | 6 |
2 files changed, 25 insertions, 77 deletions
diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index 3af99a5e917..591db466784 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -31,17 +31,17 @@ /* Return true if the change of command parameter should be notified. */ -static int -notify_command_param_changed_p (int param_changed, struct cmd_list_element *c) +static bool +notify_command_param_changed_p (bool param_changed, struct cmd_list_element *c) { - if (param_changed == 0) - return 0; + if (!param_changed) + return false; if (c->theclass == class_maintenance || c->theclass == class_deprecated || c->theclass == class_obscure) - return 0; + return false; - return 1; + return true; } @@ -305,7 +305,7 @@ void do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) { /* A flag to indicate the option is changed or not. */ - int option_changed = 0; + bool option_changed = false; gdb_assert (c->type == set_cmd); @@ -353,26 +353,12 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) *q++ = '\0'; newobj = (char *) xrealloc (newobj, q - newobj); - const std::string var = c->var.get<std::string> (); - if (var != std::string (newobj)) - { - c->var.set<std::string> (std::string (newobj)); - - option_changed = 1; - } + option_changed = c->var.set<std::string> (std::string (newobj)); xfree (newobj); } break; case var_string_noescape: - { - const std::string var = c->var.get<std::string> (); - if (var != arg) - { - c->var.set<std::string> (std::string (arg)); - - option_changed = 1; - } - } + option_changed = c->var.set<std::string> (std::string (arg)); break; case var_filename: if (*arg == '\0') @@ -398,13 +384,8 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) else val = xstrdup (""); - const std::string var = c->var.get<std::string> (); - if (var != std::string (val)) - { - c->var.set<std::string> (std::string (val)); - - option_changed = 1; - } + option_changed + = c->var.set<std::string> (std::string (val)); xfree (val); } break; @@ -414,38 +395,18 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) if (val < 0) error (_("\"on\" or \"off\" expected.")); - if (val != c->var.get<bool> ()) - { - c->var.set<bool> (val); - option_changed = 1; - } + option_changed = c->var.set<bool> (val); } break; case var_auto_boolean: - { - enum auto_boolean val = parse_auto_binary_operation (arg); - - if (c->var.get<enum auto_boolean> () != val) - { - c->var.set<enum auto_boolean> (val); - - option_changed = 1; - } - } + option_changed = c->var.set<enum auto_boolean> (parse_auto_binary_operation (arg)); break; case var_uinteger: case var_zuinteger: - { - unsigned int val = parse_cli_var_uinteger (c->var.type (), &arg, true); - - if (c->var.get<unsigned int> () != val) - { - c->var.set<unsigned int> (val); - - option_changed = 1; - } - } + option_changed + = c->var.set<unsigned int> (parse_cli_var_uinteger (c->var.type (), + &arg, true)); break; case var_integer: case var_zinteger: @@ -475,12 +436,7 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) || (c->var.type () == var_zinteger && val > INT_MAX)) error (_("integer %s out of range"), plongest (val)); - if (c->var.get<int> () != val) - { - c->var.set<int> (val); - - option_changed = 1; - } + option_changed = c->var.set<int> (val); } break; case var_enum: @@ -493,24 +449,12 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) if (*after != '\0') error (_("Junk after item \"%.*s\": %s"), len, arg, after); - if (c->var.get<const char *> () != match) - { - c->var.set<const char *> (match); - - option_changed = 1; - } + option_changed = c->var.set<const char *> (match); } break; case var_zuinteger_unlimited: - { - int val = parse_cli_var_zuinteger_unlimited (&arg, true); - - if (c->var.get<int> () != val) - { - c->var.set<int> (val); - option_changed = 1; - } - } + option_changed = c->var.set<int> + (parse_cli_var_zuinteger_unlimited (&arg, true)); break; default: error (_("gdb internal error: bad var_type in do_setshow_command")); diff --git a/gdb/command.h b/gdb/command.h index f7a193334f6..dc662c87e54 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -420,12 +420,14 @@ struct base_setting The var_type of the setting must match T. */ template<typename T> - void set (T v) + bool set (T v) { /* Check that the current instance is of one of the supported types for this instantiation. */ gdb_assert (var_type_uses<T> (this->m_var_type)); + const T old_value = this->get<T> (); + auto setter = get_setting_setter<T> (this->m_setter); if (setter != nullptr) @@ -435,6 +437,8 @@ struct base_setting gdb_assert (this->m_var != nullptr); *static_cast<T *> (this->m_var) = v; } + + return old_value != this->get<T> (); } /* Set the user provided setter and getter functions. */ |