diff options
Diffstat (limited to 'gdb/varobj.h')
-rw-r--r-- | gdb/varobj.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/gdb/varobj.h b/gdb/varobj.h index 4a4dd75..e32c6ef 100644 --- a/gdb/varobj.h +++ b/gdb/varobj.h @@ -168,6 +168,68 @@ struct varobj struct varobj_dynamic *dynamic; }; +/* Is the variable X one of our "fake" children? */ +#define CPLUS_FAKE_CHILD(x) \ +((x) != NULL && (x)->type == NULL && (x)->value == NULL) + +/* The language specific vector */ + +struct lang_varobj_ops +{ + /* The number of children of PARENT. */ + int (*number_of_children) (struct varobj * parent); + + /* The name (expression) of a root varobj. */ + char *(*name_of_variable) (struct varobj * parent); + + /* The name of the INDEX'th child of PARENT. */ + char *(*name_of_child) (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); + + /* The ``struct value *'' of the INDEX'th child of PARENT. */ + struct value *(*value_of_child) (struct varobj * parent, int index); + + /* The type of the INDEX'th child of PARENT. */ + struct type *(*type_of_child) (struct varobj * parent, int index); + + /* The current value of VAR. */ + char *(*value_of_variable) (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++). + + 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); + + /* Return nonzero if the type of VAR has mutated. + + VAR's value is still the varobj's previous value, while NEW_VALUE + is VAR's new value and NEW_TYPE is the var's new type. NEW_VALUE + may be NULL indicating that there is no value available (the varobj + may be out of scope, of may be the child of a null pointer, for + instance). NEW_TYPE, on the other hand, must never be NULL. + + This function should also be able to assume that var's number of + 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, + struct type *new_type); +}; + +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; + /* API functions */ extern struct varobj *varobj_create (char *objname, @@ -255,4 +317,22 @@ extern int varobj_has_more (struct varobj *var, int to); extern int varobj_pretty_printed_p (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 struct type *varobj_get_value_type (struct varobj *var); + +extern int varobj_is_anonymous_child (struct varobj *child); + +extern struct varobj *varobj_get_path_expr_parent (struct varobj *var); + +extern char *varobj_value_get_print_value (struct value *value, + enum varobj_display_formats format, + 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); #endif /* VAROBJ_H */ |