X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fvarobj.h;h=0d4a537d7edcbf5465c46c5b3381fbe968d512bc;hb=bfec0f11eadd7ed3597bc9b550a5595421a4cb31;hp=978d9b94c92f961960edf813ae182c6147a6d6ad;hpb=fa4d0c4081f7337c0126a01f16959f7a4e864ff5;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/varobj.h b/gdb/varobj.h index 978d9b94c9..0d4a537d7e 100644 --- a/gdb/varobj.h +++ b/gdb/varobj.h @@ -1,5 +1,5 @@ /* GDB variable objects API. - Copyright (C) 1999-2013 Free Software Foundation, Inc. + Copyright (C) 1999-2017 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -28,7 +28,8 @@ enum varobj_display_formats FORMAT_BINARY, /* Binary display */ FORMAT_DECIMAL, /* Decimal display */ FORMAT_HEXADECIMAL, /* Hex display */ - FORMAT_OCTAL /* Octal display */ + FORMAT_OCTAL, /* Octal display */ + FORMAT_ZHEXADECIMAL /* Zero padded hexadecimal */ }; enum varobj_type @@ -50,9 +51,9 @@ enum varobj_scope_status }; /* String representations of gdb's format codes (defined in varobj.c). */ -extern char *varobj_format_string[]; +extern const char *varobj_format_string[]; -/* Struct thar describes a variable object instance. */ +/* Struct that describes a variable object instance. */ struct varobj; @@ -75,7 +76,7 @@ typedef struct varobj_update_result_t It lists the new children (which must necessarily come at the end of the child list) added during an update. The caller is responsible for freeing this vector. */ - VEC (varobj_p) *new; + VEC (varobj_p) *newobj; } varobj_update_result; DEF_VEC_O (varobj_update_result); @@ -85,28 +86,28 @@ 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; /* The type of this variable. This can be NULL - for artifial variable objects -- currently, the "accessibility" + for artificial variable objects -- currently, the "accessibility" variable objects in C++. */ struct type *type; @@ -120,7 +121,7 @@ struct varobj int num_children; /* If this object is a child, this points to its immediate parent. */ - struct varobj *parent; + const struct varobj *parent; /* Children of this object. */ VEC (varobj_p) *children; @@ -136,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 * @@ -167,37 +168,37 @@ struct varobj struct lang_varobj_ops { /* The number of children of PARENT. */ - int (*number_of_children) (struct varobj *parent); + int (*number_of_children) (const struct varobj *parent); /* The name (expression) of a root varobj. */ - char *(*name_of_variable) (struct varobj *parent); + std::string (*name_of_variable) (const struct varobj *parent); /* The name of the INDEX'th child of PARENT. */ - char *(*name_of_child) (struct varobj *parent, int index); + 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. */ - char *(*path_expr_of_child) (struct varobj *child); + 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) (struct varobj *parent, int index); + struct value *(*value_of_child) (const struct varobj *parent, int index); /* The type of the INDEX'th child of PARENT. */ - struct type *(*type_of_child) (struct varobj *parent, int index); + struct type *(*type_of_child) (const struct varobj *parent, int index); /* The current value of VAR. */ - char *(*value_of_variable) (struct varobj *var, - enum varobj_display_formats format); + 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 report changes of such values. This makes sense for structures (since the changes in children values will be reported separately), - or for artifical objects (like 'public' pseudo-field in C++). + or for artificial objects (like 'public' pseudo-field in C++). Return value of 0 means that gdb need not call value_fetch_lazy for the value of this variable object. */ - int (*value_is_changeable_p) (struct varobj *var); + int (*value_is_changeable_p) (const struct varobj *var); /* Return nonzero if the type of VAR has mutated. @@ -211,51 +212,60 @@ struct lang_varobj_ops children is set (not < 0). Languages where types do not mutate can set this to NULL. */ - int (*value_has_mutated) (struct varobj *var, struct value *new_value, + int (*value_has_mutated) (const struct varobj *var, struct value *new_value, struct type *new_type); + + /* Return nonzero if VAR is a suitable path expression parent. + + For C like languages with anonymous structures and unions an anonymous + structure or union is not a suitable parent. */ + int (*is_path_expr_parent) (const struct varobj *var); }; -const struct lang_varobj_ops c_varobj_ops; -const struct lang_varobj_ops cplus_varobj_ops; -const struct lang_varobj_ops java_varobj_ops; -const struct lang_varobj_ops ada_varobj_ops; +extern const struct lang_varobj_ops c_varobj_ops; +extern const struct lang_varobj_ops cplus_varobj_ops; +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 std::string varobj_gen_name (void); + +extern struct varobj *varobj_get_handle (const char *name); -extern struct varobj *varobj_get_handle (char *name); +extern const char *varobj_get_objname (const struct varobj *var); -extern char *varobj_get_objname (struct varobj *var); +extern std::string varobj_get_expression (const struct varobj *var); -extern char *varobj_get_expression (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. */ -extern int varobj_delete (struct varobj *var, char ***dellist, - int only_children); +extern int varobj_delete (struct varobj *var, int only_children); extern enum varobj_display_formats varobj_set_display_format ( struct varobj *var, enum varobj_display_formats format); extern enum varobj_display_formats varobj_get_display_format ( - struct varobj *var); + const struct varobj *var); -extern int varobj_get_thread_id (struct varobj *var); +extern int varobj_get_thread_id (const struct varobj *var); extern void varobj_set_frozen (struct varobj *var, int frozen); -extern int varobj_get_frozen (struct varobj *var); +extern int varobj_get_frozen (const struct varobj *var); -extern void varobj_get_child_range (struct varobj *var, int *from, int *to); +extern void varobj_get_child_range (const struct varobj *var, int *from, + int *to); extern void varobj_set_child_range (struct varobj *var, int from, int to); -extern char *varobj_get_display_hint (struct varobj *var); +extern gdb::unique_xmalloc_ptr + varobj_get_display_hint (const struct varobj *var); extern int varobj_get_num_children (struct varobj *var); @@ -270,60 +280,67 @@ 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 (struct varobj *var); +extern struct type *varobj_get_gdb_type (const struct varobj *var); -extern char *varobj_get_path_expr (struct varobj *var); +extern const char *varobj_get_path_expr (const struct varobj *var); -extern const struct language_defn *varobj_get_language (struct varobj *var); +extern const struct language_defn * + varobj_get_language (const struct varobj *var); -extern int varobj_get_attributes (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); extern VEC(varobj_update_result) *varobj_update (struct varobj **varp, - int explicit); + int is_explicit); extern void varobj_invalidate (void); -extern int varobj_editable_p (struct varobj *var); +extern int varobj_editable_p (const struct varobj *var); -extern int varobj_floating_p (struct varobj *var); +extern int varobj_floating_p (const struct varobj *var); extern void varobj_set_visualizer (struct varobj *var, const char *visualizer); extern void varobj_enable_pretty_printing (void); -extern int varobj_has_more (struct varobj *var, int to); +extern int varobj_has_more (const struct varobj *var, int to); -extern int varobj_pretty_printed_p (struct varobj *var); +extern int varobj_is_dynamic_p (const struct varobj *var); -extern int varobj_default_value_is_changeable_p (struct varobj *var); -extern int varobj_value_is_changeable_p (struct varobj *var); +extern int varobj_default_value_is_changeable_p (const struct varobj *var); +extern int varobj_value_is_changeable_p (const struct varobj *var); -extern struct type *varobj_get_value_type (struct varobj *var); +extern struct type *varobj_get_value_type (const struct varobj *var); -extern int varobj_is_anonymous_child (struct varobj *child); +extern int varobj_is_anonymous_child (const struct varobj *child); -extern struct varobj *varobj_get_path_expr_parent (struct varobj *var); +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, - 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); extern void varobj_restrict_range (VEC (varobj_p) *children, int *from, int *to); + +extern int varobj_default_is_path_expr_parent (const struct varobj *var); + #endif /* VAROBJ_H */