diff options
author | Pedro Alves <palves@redhat.com> | 2016-11-08 15:26:47 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2016-11-08 15:26:47 +0000 |
commit | 2f408ecb929bd56613e94cf1e84ace4692c78257 (patch) | |
tree | 5b0e71bb60037a2e47b8eabb233beac31c4a17b2 /gdb/varobj.h | |
parent | d2af8993a7cac29eaa5a4efd47c9117bbd175068 (diff) | |
download | gdb-2f408ecb929bd56613e94cf1e84ace4692c78257.zip gdb-2f408ecb929bd56613e94cf1e84ace4692c78257.tar.gz gdb-2f408ecb929bd56613e94cf1e84ace4692c78257.tar.bz2 |
Use ui_file_as_string throughout more
This replaces most of the remaining ui_file_xstrdup calls with
ui_file_as_string calls. Whenever a call was replaced, that led to a
cascade of other necessary adjustments throughout, to make the code
use std::string instead of raw pointers. And then whenever I added a
std::string as member of a struct, I needed to adjust
allocation/destruction of said struct to use new/delete instead of
xmalloc/xfree.
The stopping point was once gdb built again. These doesn't seem to be
a way to reasonably split this out further.
Maybe-not-obvious changes:
- demangle_for_lookup returns a cleanup today. To get rid of that,
and avoid unnecessary string dupping/copying, this introduces a
demangle_result_storage type that the caller instantiates and
passes to demangle_for_lookup.
- Many methods returned a "char *" to indicate that the caller owns
the memory and must free it. Those are switched to return a
std::string instead. Methods that return a "view" into some
internal string return a "const char *" instead. I.e., we only
copy/allocate when necessary.
gdb/ChangeLog:
2016-11-08 Pedro Alves <palves@redhat.com>
* ada-lang.c (ada_name_for_lookup, type_as_string): Use and return
std::string.
(type_as_string_and_cleanup): Delete.
(ada_lookup_struct_elt_type): Use type_as_string.
* ada-lang.h (ada_name_for_lookup): Now returns std::string.
* ada-varobj.c (ada_varobj_scalar_image): Return a std::string.
(ada_varobj_describe_child): Make 'child_name' and
'child_path_expr' parameters std::string pointers.
(ada_varobj_describe_struct_child, ada_varobj_describe_ptr_child):
Likewise, and use string_printf.
(ada_varobj_describe_simple_array_child)
(ada_varobj_describe_child): Likewise.
(ada_varobj_get_name_of_child, ada_varobj_get_path_expr_of_child)
(ada_varobj_get_value_image)
(ada_varobj_get_value_of_array_variable)
(ada_varobj_get_value_of_variable, ada_name_of_variable)
(ada_name_of_child, ada_path_expr_of_child)
(ada_value_of_variable): Now returns std::string. Use
string_printf.
(ada_value_of_child): Adjust.
* break-catch-throw.c (check_status_exception_catchpoint): Adjust
to use std::string.
* breakpoint.c (watch_command_1): Adjust to use std::string.
* c-lang.c (c_get_string): Adjust to use std::string.
* c-typeprint.c (print_name_maybe_canonical): Use std::string.
* c-varobj.c (varobj_is_anonymous_child): Use ==/!= std::string
operators.
(c_name_of_variable): Now returns a std::string.
(c_describe_child): The 'cname' and 'cfull_expression' output
parameters are now std::string pointers. Adjust.
(c_name_of_child, c_path_expr_of_child, c_value_of_variable)
(cplus_number_of_children): Adjust to use std::string and
string_printf.
(cplus_name_of_variable): Now returns a std::string.
(cplus_describe_child): The 'cname' and 'cfull_expression' output
parameters are now std::string pointers. Adjust.
(cplus_name_of_child, cplus_path_expr_of_child)
(cplus_value_of_variable): Now returns a std::string.
* cp-abi.c (cplus_typename_from_type_info): Return std::string.
* cp-abi.h (cplus_typename_from_type_info): Return std::string.
(struct cp_abi_ops) <get_typename_from_type_info>: Return
std::string.
* cp-support.c (inspect_type): Use std::string.
(cp_canonicalize_string_full, cp_canonicalize_string_no_typedefs)
(cp_canonicalize_string): Return std::string and adjust.
* cp-support.h (cp_canonicalize_string)
(cp_canonicalize_string_no_typedefs, cp_canonicalize_string_full):
Return std::string.
* dbxread.c (read_dbx_symtab): Use std::string.
* dwarf2read.c (dwarf2_canonicalize_name): Adjust to use std::string.
* gdbcmd.h (lookup_struct_elt_type): Adjust to use std::string.
* gnu-v3-abi.c (gnuv3_get_typeid): Use std::string.
(gnuv3_get_typename_from_type_info): Return a std::string and
adjust.
(gnuv3_get_type_from_type_info): Adjust to use std::string.
* guile/guile.c (gdbscm_execute_gdb_command): Adjust to use
std::string.
* infcmd.c (print_return_value_1): Adjust to use std::string.
* linespec.c (find_linespec_symbols): Adjust to
demangle_for_lookup API change. Use std::string.
* mi/mi-cmd-var.c (print_varobj, mi_cmd_var_set_format)
(mi_cmd_var_info_type, mi_cmd_var_info_path_expression)
(mi_cmd_var_info_expression, mi_cmd_var_evaluate_expression)
(mi_cmd_var_assign, varobj_update_one): Adjust to use std::string.
* minsyms.c (lookup_minimal_symbol): Use std::string.
* python/py-varobj.c (py_varobj_iter_next): Use new instead of
XNEW. vitem->name is a std::string now, adjust.
* rust-exp.y (convert_ast_to_type, convert_name): Adjust to use
std::string.
* stabsread.c (define_symbol): Adjust to use std::string.
* symtab.c (demangle_for_lookup): Now returns 'const char *'. Add
a demangle_result_storage parameter. Use it for storage.
(lookup_symbol_in_language)
(lookup_symbol_in_objfile_from_linkage_name): Adjust to new
demangle_for_lookup API.
* symtab.h (struct demangle_result_storage): New type.
(demangle_for_lookup): Now returns 'const char *'. Add a
demangle_result_storage parameter.
* typeprint.c (type_to_string): Return std::string and use
ui_file_as_string.
* value.h (type_to_string): Change return type to std::string.
* varobj-iter.h (struct varobj_item) <name>: Now a std::string.
(varobj_iter_delete): Use delete instead of xfree.
* varobj.c (create_child): Return std::string instead of char * in
output parameter.
(name_of_variable, name_of_child, my_value_of_variable): Return
std::string instead of char *.
(varobj_create, varobj_get_handle): Constify 'objname' parameter.
Adjust to std::string fields.
(varobj_get_objname): Return a const char * instead of a char *.
(varobj_get_expression): Return a std::string.
(varobj_list_children): Adjust to use std::string.
(varobj_get_type): Return a std::string.
(varobj_get_path_expr): Return a const char * instead of a char *.
Adjust to std::string fields.
(varobj_get_formatted_value, varobj_get_value): Return a
std::string.
(varobj_set_value): Change type of 'expression' parameter to
std::string. Use std::string.
(install_new_value): Use std::string.
(delete_variable_1): Adjust to use std::string.
(create_child): Change the 'name' parameter to a std::string
reference. Swap it into the new item's name.
(create_child_with_value): Swap item's name into the new child's
name. Use string_printf.
(new_variable): Use new instead of XNEW.
(free_variable): Don't xfree fields that are now std::string.
(name_of_variable, name_of_child): Now returns std::string.
(value_of_root): Adjust to use std::string.
(my_value_of_variable, varobj_value_get_print_value): Return
and use std::string.
(varobj_value_get_print_value): Adjust to use ui_file_as_string
and std::string.
* varobj.h (struct varobj) <name, path_expr, obj_name,
print_value>: Now std::string's.
<name_of_variable, name_of_child, path_expr_of_child,
value_of_variable>: Return std::string.
(varobj_create, varobj_get_handle): Constify 'objname' parameter.
(varobj_get_objname): Return a const char * instead of a char *.
(varobj_get_expression, varobj_get_type): Return a std::string.
(varobj_get_path_expr): Return a const char * instead of a char *.
(varobj_get_formatted_value, varobj_get_value): Return a
std::string.
(varobj_set_value): Constify 'expression' parameter.
(varobj_value_get_print_value): Return a std::string.
Diffstat (limited to 'gdb/varobj.h')
-rw-r--r-- | gdb/varobj.h | 70 |
1 files changed, 34 insertions, 36 deletions
diff --git a/gdb/varobj.h b/gdb/varobj.h index 6b9a71f..7f4aad2 100644 --- a/gdb/varobj.h +++ b/gdb/varobj.h @@ -86,22 +86,22 @@ struct varobj_dynamic; /* Every variable in the system has a structure of this type defined for it. This structure holds all information necessary to manipulate - a particular object variable. Members which must be freed are noted. */ + a particular object variable. */ struct varobj { - /* Alloc'd name of the variable for this object. If this variable is a + /* Name of the variable for this object. If this variable is a child, then this name will be the child's source name. (bar, not foo.bar). */ /* NOTE: This is the "expression". */ - char *name; + std::string name; - /* Alloc'd expression for this child. Can be used to create a - root variable corresponding to this child. */ - char *path_expr; + /* Expression for this child. Can be used to create a root variable + corresponding to this child. */ + std::string path_expr; - /* The alloc'd name for this variable's object. This is here for + /* The name for this variable's object. This is here for convenience when constructing this object's children. */ - char *obj_name; + std::string obj_name; /* Index of this variable in its parent or -1. */ int index; @@ -137,7 +137,7 @@ struct varobj int updated; /* Last print value. */ - char *print_value; + std::string print_value; /* Is this variable frozen. Frozen variables are never implicitly updated by -var-update * @@ -170,18 +170,15 @@ struct lang_varobj_ops /* The number of children of PARENT. */ int (*number_of_children) (const struct varobj *parent); - /* The name (expression) of a root varobj. The returned value must be freed - by the caller. */ - char *(*name_of_variable) (const struct varobj *parent); + /* The name (expression) of a root varobj. */ + std::string (*name_of_variable) (const struct varobj *parent); - /* The name of the INDEX'th child of PARENT. The returned value must be - freed by the caller. */ - char *(*name_of_child) (const struct varobj *parent, int index); + /* The name of the INDEX'th child of PARENT. */ + std::string (*name_of_child) (const struct varobj *parent, int index); /* Returns the rooted expression of CHILD, which is a variable - obtain that has some parent. The returned value must be freed by the - caller. */ - char *(*path_expr_of_child) (const struct varobj *child); + obtain that has some parent. */ + std::string (*path_expr_of_child) (const struct varobj *child); /* The ``struct value *'' of the INDEX'th child of PARENT. */ struct value *(*value_of_child) (const struct varobj *parent, int index); @@ -189,10 +186,9 @@ struct lang_varobj_ops /* The type of the INDEX'th child of PARENT. */ struct type *(*type_of_child) (const struct varobj *parent, int index); - /* The current value of VAR. The returned value must be freed by the - caller. */ - char *(*value_of_variable) (const struct varobj *var, - enum varobj_display_formats format); + /* The current value of VAR. */ + std::string (*value_of_variable) (const struct varobj *var, + enum varobj_display_formats format); /* Return non-zero if changes in value of VAR must be detected and reported by -var-update. Return zero if -var-update should never @@ -233,17 +229,17 @@ extern const struct lang_varobj_ops ada_varobj_ops; #define default_varobj_ops c_varobj_ops /* API functions */ -extern struct varobj *varobj_create (char *objname, - char *expression, CORE_ADDR frame, +extern struct varobj *varobj_create (const char *objname, + const char *expression, CORE_ADDR frame, enum varobj_type type); extern char *varobj_gen_name (void); -extern struct varobj *varobj_get_handle (char *name); +extern struct varobj *varobj_get_handle (const char *name); -extern char *varobj_get_objname (const struct varobj *var); +extern const char *varobj_get_objname (const struct varobj *var); -extern char *varobj_get_expression (const struct varobj *var); +extern std::string varobj_get_expression (const struct varobj *var); /* Delete a varobj and all its children if only_children == 0, otherwise delete only the children. Return the number of deleted variables. */ @@ -283,23 +279,24 @@ extern int varobj_get_num_children (struct varobj *var); extern VEC (varobj_p)* varobj_list_children (struct varobj *var, int *from, int *to); -extern char *varobj_get_type (struct varobj *var); +extern std::string varobj_get_type (struct varobj *var); extern struct type *varobj_get_gdb_type (const struct varobj *var); -extern char *varobj_get_path_expr (const struct varobj *var); +extern const char *varobj_get_path_expr (const struct varobj *var); extern const struct language_defn * varobj_get_language (const struct varobj *var); extern int varobj_get_attributes (const struct varobj *var); -extern char *varobj_get_formatted_value (struct varobj *var, - enum varobj_display_formats format); +extern std::string + varobj_get_formatted_value (struct varobj *var, + enum varobj_display_formats format); -extern char *varobj_get_value (struct varobj *var); +extern std::string varobj_get_value (struct varobj *var); -extern int varobj_set_value (struct varobj *var, char *expression); +extern int varobj_set_value (struct varobj *var, const char *expression); extern void all_root_varobjs (void (*func) (struct varobj *var, void *data), void *data); @@ -334,9 +331,10 @@ extern int varobj_is_anonymous_child (const struct varobj *child); extern const struct varobj * varobj_get_path_expr_parent (const struct varobj *var); -extern char *varobj_value_get_print_value (struct value *value, - enum varobj_display_formats format, - const struct varobj *var); +extern std::string + varobj_value_get_print_value (struct value *value, + enum varobj_display_formats format, + const struct varobj *var); extern void varobj_formatted_print_options (struct value_print_options *opts, enum varobj_display_formats format); |