Constify some parameters in the varobj code

To make it clear that some functions should not modify the variable
object, this patch adds the const qualifier where it makes sense to some
struct varobj * parameters. Most getters should take a const pointer to
guarantee they don't modify the object.

Unfortunately, I couldn't add it to some callbacks (such as name_of_child).
In the C implementation, they call c_describe_child, which calls
varobj_get_path_expr. varobj_get_path_expr needs to modify the object in
order to cache the computed value. It therefore can't take a const
pointer, and it affects the whole call chain. I suppose that's where you
would use a "mutable" in C++.

I did that to make sure there was no other cases like the one fixed in
the previous patch. I don't think it can hurt.

gdb/ChangeLog:

	* ada-varobj.c (ada_number_of_children): Constify struct varobj *
	parameter.
	(ada_name_of_variable): Same.
	(ada_path_expr_of_child): Same.
	(ada_value_of_variable): Same.
	(ada_value_is_changeable_p): Same.
	(ada_value_has_mutated): Same.
	* c-varobj.c (varobj_is_anonymous_child): Same.
	(c_is_path_expr_parent): Same.
	(c_number_of_children): Same.
	(c_name_of_variable): Same.
	(c_path_expr_of_child): Same.
	(get_type): Same.
	(c_value_of_variable): Same.
	(cplus_number_of_children): Same.
	(cplus_name_of_variable): Same.
	(cplus_path_expr_of_child): Same.
	(cplus_value_of_variable): Same.
	* jv-varobj.c (java_number_of_children): Same.
	(java_name_of_variable): Same.
	(java_path_expr_of_child): Same.
	(java_value_of_variable): Same.
	* varobj.c (number_of_children): Same.
	(name_of_variable): Same.
	(is_root_p): Same.
	(varobj_ensure_python_env): Same.
	(varobj_get_objname): Same.
	(varobj_get_expression): Same.
	(varobj_get_display_format): Same.
	(varobj_get_display_hint): Same.
	(varobj_has_more): Same.
	(varobj_get_thread_id): Same.
	(varobj_get_frozen): Same.
	(dynamic_varobj_has_child_method): Same.
	(varobj_get_gdb_type): Same.
	(is_path_expr_parent): Same.
	(varobj_default_is_path_expr_parent): Same.
	(varobj_get_language): Same.
	(varobj_get_attributes): Same.
	(varobj_is_dynamic_p): Same.
	(varobj_get_child_range): Same.
	(varobj_value_has_mutated): Same.
	(varobj_get_value_type): Same.
	(number_of_children): Same.
	(name_of_variable): Same.
	(check_scope): Same.
	(varobj_editable_p): Same.
	(varobj_value_is_changeable_p): Same.
	(varobj_floating_p): Same.
	(varobj_default_value_is_changeable_p): Same.
	* varobj.h (struct lang_varobj_ops): Consitfy some struct varobj *
	parameters.
	(varobj_get_objname): Constify struct varobj * parameter.
	(varobj_get_expression): Same.
	(varobj_get_thread_id): Same.
	(varobj_get_frozen): Same.
	(varobj_get_child_range): Same.
	(varobj_get_display_hint): Same.
	(varobj_get_gdb_type): Same.
	(varobj_get_language): Same.
	(varobj_get_attributes): Same.
	(varobj_editable_p): Same.
	(varobj_floating_p): Same.
	(varobj_has_more): Same.
	(varobj_is_dynamic_p): Same.
	(varobj_ensure_python_env): Same.
	(varobj_default_value_is_changeable_p): Same.
	(varobj_value_is_changeable_p): Same.
	(varobj_get_value_type): Same.
	(varobj_is_anonymous_child): Same.
	(varobj_value_get_print_value): Same.
	(varobj_default_is_path_expr_parent): Same.
This commit is contained in:
Simon Marchi 2015-01-30 15:07:15 -05:00
parent 2568868e69
commit b09e2c591f
6 changed files with 137 additions and 79 deletions

View File

@ -1,3 +1,56 @@
2015-01-30 Simon Marchi <simon.marchi@ericsson.com>
* ada-varobj.c (ada_number_of_children): Constify struct varobj *
parameter.
(ada_name_of_variable): Same.
(ada_path_expr_of_child): Same.
(ada_value_of_variable): Same.
(ada_value_is_changeable_p): Same.
(ada_value_has_mutated): Same.
* c-varobj.c (varobj_is_anonymous_child): Same.
(c_is_path_expr_parent): Same.
(c_number_of_children): Same.
(c_name_of_variable): Same.
(c_path_expr_of_child): Same.
(get_type): Same.
(c_value_of_variable): Same.
(cplus_number_of_children): Same.
(cplus_name_of_variable): Same.
(cplus_path_expr_of_child): Same.
(cplus_value_of_variable): Same.
* jv-varobj.c (java_number_of_children): Same.
(java_name_of_variable): Same.
(java_path_expr_of_child): Same.
(java_value_of_variable): Same.
* varobj.c (number_of_children): Same.
(name_of_variable): Same.
(is_root_p): Same.
(varobj_ensure_python_env): Same.
(varobj_get_objname): Same.
(varobj_get_expression): Same.
(varobj_get_display_format): Same.
(varobj_get_display_hint): Same.
(varobj_has_more): Same.
(varobj_get_thread_id): Same.
(varobj_get_frozen): Same.
(dynamic_varobj_has_child_method): Same.
(varobj_get_gdb_type): Same.
(is_path_expr_parent): Same.
(varobj_default_is_path_expr_parent): Same.
(varobj_get_language): Same.
(varobj_get_attributes): Same.
(varobj_is_dynamic_p): Same.
(varobj_get_child_range): Same.
(varobj_value_has_mutated): Same.
(varobj_get_value_type): Same.
(number_of_children): Same.
(name_of_variable): Same.
(check_scope): Same.
(varobj_editable_p): Same.
(varobj_value_is_changeable_p): Same.
(varobj_floating_p): Same.
(varobj_default_value_is_changeable_p): Same.
2015-01-30 Simon Marchi <simon.marchi@ericsson.com> 2015-01-30 Simon Marchi <simon.marchi@ericsson.com>
* varobj.c (varobj_get_path_expr): Set var->path_expr. * varobj.c (varobj_get_path_expr): Set var->path_expr.

View File

@ -906,13 +906,13 @@ ada_varobj_get_value_of_variable (struct value *value,
/* Ada specific callbacks for VAROBJs. */ /* Ada specific callbacks for VAROBJs. */
static int static int
ada_number_of_children (struct varobj *var) ada_number_of_children (const struct varobj *var)
{ {
return ada_varobj_get_number_of_children (var->value, var->type); return ada_varobj_get_number_of_children (var->value, var->type);
} }
static char * static char *
ada_name_of_variable (struct varobj *parent) ada_name_of_variable (const struct varobj *parent)
{ {
return c_varobj_ops.name_of_variable (parent); return c_varobj_ops.name_of_variable (parent);
} }
@ -925,7 +925,7 @@ ada_name_of_child (struct varobj *parent, int index)
} }
static char* static char*
ada_path_expr_of_child (struct varobj *child) ada_path_expr_of_child (const struct varobj *child)
{ {
struct varobj *parent = child->parent; struct varobj *parent = child->parent;
const char *parent_path_expr = varobj_get_path_expr (parent); const char *parent_path_expr = varobj_get_path_expr (parent);
@ -952,7 +952,8 @@ ada_type_of_child (struct varobj *parent, int index)
} }
static char * static char *
ada_value_of_variable (struct varobj *var, enum varobj_display_formats format) ada_value_of_variable (const struct varobj *var,
enum varobj_display_formats format)
{ {
struct value_print_options opts; struct value_print_options opts;
@ -964,7 +965,7 @@ ada_value_of_variable (struct varobj *var, enum varobj_display_formats format)
/* Implement the "value_is_changeable_p" routine for Ada. */ /* Implement the "value_is_changeable_p" routine for Ada. */
static int static int
ada_value_is_changeable_p (struct varobj *var) ada_value_is_changeable_p (const struct varobj *var)
{ {
struct type *type = var->value ? value_type (var->value) : var->type; struct type *type = var->value ? value_type (var->value) : var->type;
@ -990,7 +991,7 @@ ada_value_is_changeable_p (struct varobj *var)
/* Implement the "value_has_mutated" routine for Ada. */ /* Implement the "value_has_mutated" routine for Ada. */
static int static int
ada_value_has_mutated (struct varobj *var, struct value *new_val, ada_value_has_mutated (const struct varobj *var, struct value *new_val,
struct type *new_type) struct type *new_type)
{ {
int i; int i;

View File

@ -35,7 +35,7 @@ static void cplus_class_num_children (struct type *type, int children[3]);
thing to do is to compare the child's name with ANONYMOUS_*_NAME. */ thing to do is to compare the child's name with ANONYMOUS_*_NAME. */
int int
varobj_is_anonymous_child (struct varobj *child) varobj_is_anonymous_child (const struct varobj *child)
{ {
return (strcmp (child->name, ANONYMOUS_STRUCT_NAME) == 0 return (strcmp (child->name, ANONYMOUS_STRUCT_NAME) == 0
|| strcmp (child->name, ANONYMOUS_UNION_NAME) == 0); || strcmp (child->name, ANONYMOUS_UNION_NAME) == 0);
@ -130,7 +130,7 @@ adjust_value_for_child_access (struct value **value,
a valid path expression? */ a valid path expression? */
static int static int
c_is_path_expr_parent (struct varobj *var) c_is_path_expr_parent (const struct varobj *var)
{ {
struct type *type; struct type *type;
@ -179,7 +179,7 @@ c_is_path_expr_parent (struct varobj *var)
/* C */ /* C */
static int static int
c_number_of_children (struct varobj *var) c_number_of_children (const struct varobj *var)
{ {
struct type *type = varobj_get_value_type (var); struct type *type = varobj_get_value_type (var);
int children = 0; int children = 0;
@ -230,7 +230,7 @@ c_number_of_children (struct varobj *var)
} }
static char * static char *
c_name_of_variable (struct varobj *parent) c_name_of_variable (const struct varobj *parent)
{ {
return xstrdup (parent->name); return xstrdup (parent->name);
} }
@ -431,7 +431,7 @@ c_name_of_child (struct varobj *parent, int index)
} }
static char * static char *
c_path_expr_of_child (struct varobj *child) c_path_expr_of_child (const struct varobj *child)
{ {
char *path_expr; char *path_expr;
@ -462,7 +462,7 @@ c_type_of_child (struct varobj *parent, int index)
to return the real type of the variable. */ to return the real type of the variable. */
static struct type * static struct type *
get_type (struct varobj *var) get_type (const struct varobj *var)
{ {
struct type *type; struct type *type;
@ -474,7 +474,8 @@ get_type (struct varobj *var)
} }
static char * static char *
c_value_of_variable (struct varobj *var, enum varobj_display_formats format) c_value_of_variable (const struct varobj *var,
enum varobj_display_formats format)
{ {
/* BOGUS: if val_print sees a struct/class, or a reference to one, /* BOGUS: if val_print sees a struct/class, or a reference to one,
it will print out its children instead of "{...}". So we need to it will print out its children instead of "{...}". So we need to
@ -558,7 +559,7 @@ enum vsections
/* C++ */ /* C++ */
static int static int
cplus_number_of_children (struct varobj *var) cplus_number_of_children (const struct varobj *var)
{ {
struct value *value = NULL; struct value *value = NULL;
struct type *type; struct type *type;
@ -671,7 +672,7 @@ cplus_class_num_children (struct type *type, int children[3])
} }
static char * static char *
cplus_name_of_variable (struct varobj *parent) cplus_name_of_variable (const struct varobj *parent)
{ {
return c_name_of_variable (parent); return c_name_of_variable (parent);
} }
@ -906,7 +907,7 @@ cplus_name_of_child (struct varobj *parent, int index)
} }
static char * static char *
cplus_path_expr_of_child (struct varobj *child) cplus_path_expr_of_child (const struct varobj *child)
{ {
char *path_expr; char *path_expr;
@ -934,7 +935,7 @@ cplus_type_of_child (struct varobj *parent, int index)
} }
static char * static char *
cplus_value_of_variable (struct varobj *var, cplus_value_of_variable (const struct varobj *var,
enum varobj_display_formats format) enum varobj_display_formats format)
{ {

View File

@ -21,13 +21,13 @@
/* Java */ /* Java */
static int static int
java_number_of_children (struct varobj *var) java_number_of_children (const struct varobj *var)
{ {
return cplus_varobj_ops.number_of_children (var); return cplus_varobj_ops.number_of_children (var);
} }
static char * static char *
java_name_of_variable (struct varobj *parent) java_name_of_variable (const struct varobj *parent)
{ {
char *p, *name; char *p, *name;
@ -66,7 +66,7 @@ java_name_of_child (struct varobj *parent, int index)
} }
static char * static char *
java_path_expr_of_child (struct varobj *child) java_path_expr_of_child (const struct varobj *child)
{ {
return NULL; return NULL;
} }
@ -84,7 +84,8 @@ java_type_of_child (struct varobj *parent, int index)
} }
static char * static char *
java_value_of_variable (struct varobj *var, enum varobj_display_formats format) java_value_of_variable (const struct varobj *var,
enum varobj_display_formats format)
{ {
return cplus_varobj_ops.value_of_variable (var, format); return cplus_varobj_ops.value_of_variable (var, format);
} }

View File

@ -193,9 +193,9 @@ static int install_new_value (struct varobj *var, struct value *value,
/* Language-specific routines. */ /* Language-specific routines. */
static int number_of_children (struct varobj *); static int number_of_children (const struct varobj *);
static char *name_of_variable (struct varobj *); static char *name_of_variable (const struct varobj *);
static char *name_of_child (struct varobj *, int); static char *name_of_child (struct varobj *, int);
@ -206,7 +206,7 @@ static struct value *value_of_child (struct varobj *parent, int index);
static char *my_value_of_variable (struct varobj *var, static char *my_value_of_variable (struct varobj *var,
enum varobj_display_formats format); enum varobj_display_formats format);
static int is_root_p (struct varobj *var); static int is_root_p (const struct varobj *var);
static struct varobj *varobj_add_child (struct varobj *var, static struct varobj *varobj_add_child (struct varobj *var,
struct varobj_item *item); struct varobj_item *item);
@ -230,7 +230,7 @@ static struct vlist **varobj_table;
/* API Implementation */ /* API Implementation */
static int static int
is_root_p (struct varobj *var) is_root_p (const struct varobj *var)
{ {
return (var->root->rootvar == var); return (var->root->rootvar == var);
} }
@ -239,7 +239,7 @@ is_root_p (struct varobj *var)
/* Helper function to install a Python environment suitable for /* Helper function to install a Python environment suitable for
use during operations on VAR. */ use during operations on VAR. */
struct cleanup * struct cleanup *
varobj_ensure_python_env (struct varobj *var) varobj_ensure_python_env (const struct varobj *var)
{ {
return ensure_python_env (var->root->exp->gdbarch, return ensure_python_env (var->root->exp->gdbarch,
var->root->exp->language_defn); var->root->exp->language_defn);
@ -487,7 +487,7 @@ varobj_get_handle (char *objname)
/* Given the handle, return the name of the object. */ /* Given the handle, return the name of the object. */
char * char *
varobj_get_objname (struct varobj *var) varobj_get_objname (const struct varobj *var)
{ {
return var->obj_name; return var->obj_name;
} }
@ -496,7 +496,7 @@ varobj_get_objname (struct varobj *var)
result must be freed by the caller. */ result must be freed by the caller. */
char * char *
varobj_get_expression (struct varobj *var) varobj_get_expression (const struct varobj *var)
{ {
return name_of_variable (var); return name_of_variable (var);
} }
@ -600,13 +600,13 @@ varobj_set_display_format (struct varobj *var,
} }
enum varobj_display_formats enum varobj_display_formats
varobj_get_display_format (struct varobj *var) varobj_get_display_format (const struct varobj *var)
{ {
return var->format; return var->format;
} }
char * char *
varobj_get_display_hint (struct varobj *var) varobj_get_display_hint (const struct varobj *var)
{ {
char *result = NULL; char *result = NULL;
@ -630,7 +630,7 @@ varobj_get_display_hint (struct varobj *var)
/* Return true if the varobj has items after TO, false otherwise. */ /* Return true if the varobj has items after TO, false otherwise. */
int int
varobj_has_more (struct varobj *var, int to) varobj_has_more (const struct varobj *var, int to)
{ {
if (VEC_length (varobj_p, var->children) > to) if (VEC_length (varobj_p, var->children) > to)
return 1; return 1;
@ -643,7 +643,7 @@ varobj_has_more (struct varobj *var, int to)
inside that thread, returns GDB id of the thread -- which inside that thread, returns GDB id of the thread -- which
is always positive. Otherwise, returns -1. */ is always positive. Otherwise, returns -1. */
int int
varobj_get_thread_id (struct varobj *var) varobj_get_thread_id (const struct varobj *var)
{ {
if (var->root->valid_block && var->root->thread_id > 0) if (var->root->valid_block && var->root->thread_id > 0)
return var->root->thread_id; return var->root->thread_id;
@ -665,7 +665,7 @@ varobj_set_frozen (struct varobj *var, int frozen)
} }
int int
varobj_get_frozen (struct varobj *var) varobj_get_frozen (const struct varobj *var)
{ {
return var->frozen; return var->frozen;
} }
@ -741,7 +741,7 @@ install_dynamic_child (struct varobj *var,
#if HAVE_PYTHON #if HAVE_PYTHON
static int static int
dynamic_varobj_has_child_method (struct varobj *var) dynamic_varobj_has_child_method (const struct varobj *var)
{ {
struct cleanup *back_to; struct cleanup *back_to;
PyObject *printer = var->dynamic->pretty_printer; PyObject *printer = var->dynamic->pretty_printer;
@ -991,7 +991,7 @@ varobj_get_type (struct varobj *var)
/* Obtain the type of an object variable. */ /* Obtain the type of an object variable. */
struct type * struct type *
varobj_get_gdb_type (struct varobj *var) varobj_get_gdb_type (const struct varobj *var)
{ {
return var->type; return var->type;
} }
@ -1000,7 +1000,7 @@ varobj_get_gdb_type (struct varobj *var)
a valid path expression? */ a valid path expression? */
static int static int
is_path_expr_parent (struct varobj *var) is_path_expr_parent (const struct varobj *var)
{ {
gdb_assert (var->root->lang_ops->is_path_expr_parent != NULL); gdb_assert (var->root->lang_ops->is_path_expr_parent != NULL);
return var->root->lang_ops->is_path_expr_parent (var); return var->root->lang_ops->is_path_expr_parent (var);
@ -1011,7 +1011,7 @@ is_path_expr_parent (struct varobj *var)
parent. */ parent. */
int int
varobj_default_is_path_expr_parent (struct varobj *var) varobj_default_is_path_expr_parent (const struct varobj *var)
{ {
return 1; return 1;
} }
@ -1048,13 +1048,13 @@ varobj_get_path_expr (struct varobj *var)
} }
const struct language_defn * const struct language_defn *
varobj_get_language (struct varobj *var) varobj_get_language (const struct varobj *var)
{ {
return var->root->exp->language_defn; return var->root->exp->language_defn;
} }
int int
varobj_get_attributes (struct varobj *var) varobj_get_attributes (const struct varobj *var)
{ {
int attributes = 0; int attributes = 0;
@ -1068,7 +1068,7 @@ varobj_get_attributes (struct varobj *var)
/* Return true if VAR is a dynamic varobj. */ /* Return true if VAR is a dynamic varobj. */
int int
varobj_is_dynamic_p (struct varobj *var) varobj_is_dynamic_p (const struct varobj *var)
{ {
return var->dynamic->pretty_printer != NULL; return var->dynamic->pretty_printer != NULL;
} }
@ -1517,7 +1517,7 @@ install_new_value (struct varobj *var, struct value *value, int initial)
selected sub-range of VAR. If no range was selected using selected sub-range of VAR. If no range was selected using
-var-set-update-range, then both will be -1. */ -var-set-update-range, then both will be -1. */
void void
varobj_get_child_range (struct varobj *var, int *from, int *to) varobj_get_child_range (const struct varobj *var, int *from, int *to)
{ {
*from = var->from; *from = var->from;
*to = var->to; *to = var->to;
@ -1579,7 +1579,7 @@ varobj_set_visualizer (struct varobj *var, const char *visualizer)
NEW_VALUE may be NULL, if the varobj is now out of scope. */ NEW_VALUE may be NULL, if the varobj is now out of scope. */
static int static int
varobj_value_has_mutated (struct varobj *var, struct value *new_value, varobj_value_has_mutated (const struct varobj *var, struct value *new_value,
struct type *new_type) struct type *new_type)
{ {
/* If we haven't previously computed the number of children in var, /* If we haven't previously computed the number of children in var,
@ -2209,7 +2209,7 @@ make_cleanup_free_variable (struct varobj *var)
For example, top-level references are always stripped. */ For example, top-level references are always stripped. */
struct type * struct type *
varobj_get_value_type (struct varobj *var) varobj_get_value_type (const struct varobj *var)
{ {
struct type *type; struct type *type;
@ -2278,7 +2278,7 @@ cppop (struct cpstack **pstack)
is the number of children that the user will see in the variable is the number of children that the user will see in the variable
display. */ display. */
static int static int
number_of_children (struct varobj *var) number_of_children (const struct varobj *var)
{ {
return (*var->root->lang_ops->number_of_children) (var); return (*var->root->lang_ops->number_of_children) (var);
} }
@ -2286,7 +2286,7 @@ number_of_children (struct varobj *var)
/* What is the expression for the root varobj VAR? Returns a malloc'd /* What is the expression for the root varobj VAR? Returns a malloc'd
string. */ string. */
static char * static char *
name_of_variable (struct varobj *var) name_of_variable (const struct varobj *var)
{ {
return (*var->root->lang_ops->name_of_variable) (var); return (*var->root->lang_ops->name_of_variable) (var);
} }
@ -2303,7 +2303,7 @@ name_of_child (struct varobj *var, int index)
to it and return 1. Otherwise, return 0. */ to it and return 1. Otherwise, return 0. */
static int static int
check_scope (struct varobj *var) check_scope (const struct varobj *var)
{ {
struct frame_info *fi; struct frame_info *fi;
int scope; int scope;
@ -2514,7 +2514,7 @@ varobj_formatted_print_options (struct value_print_options *opts,
char * char *
varobj_value_get_print_value (struct value *value, varobj_value_get_print_value (struct value *value,
enum varobj_display_formats format, enum varobj_display_formats format,
struct varobj *var) const struct varobj *var)
{ {
struct ui_file *stb; struct ui_file *stb;
struct cleanup *old_chain; struct cleanup *old_chain;
@ -2645,7 +2645,7 @@ varobj_value_get_print_value (struct value *value,
} }
int int
varobj_editable_p (struct varobj *var) varobj_editable_p (const struct varobj *var)
{ {
struct type *type; struct type *type;
@ -2673,7 +2673,7 @@ varobj_editable_p (struct varobj *var)
/* Call VAR's value_is_changeable_p language-specific callback. */ /* Call VAR's value_is_changeable_p language-specific callback. */
int int
varobj_value_is_changeable_p (struct varobj *var) varobj_value_is_changeable_p (const struct varobj *var)
{ {
return var->root->lang_ops->value_is_changeable_p (var); return var->root->lang_ops->value_is_changeable_p (var);
} }
@ -2682,7 +2682,7 @@ varobj_value_is_changeable_p (struct varobj *var)
selected frame, and not bound to thread/frame. Such variable objects selected frame, and not bound to thread/frame. Such variable objects
are created using '@' as frame specifier to -var-create. */ are created using '@' as frame specifier to -var-create. */
int int
varobj_floating_p (struct varobj *var) varobj_floating_p (const struct varobj *var)
{ {
return var->root->floating; return var->root->floating;
} }
@ -2691,7 +2691,7 @@ varobj_floating_p (struct varobj *var)
languages. */ languages. */
int int
varobj_default_value_is_changeable_p (struct varobj *var) varobj_default_value_is_changeable_p (const struct varobj *var)
{ {
int r; int r;
struct type *type; struct type *type;

View File

@ -167,17 +167,17 @@ struct varobj
struct lang_varobj_ops struct lang_varobj_ops
{ {
/* The number of children of PARENT. */ /* 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. */ /* The name (expression) of a root varobj. */
char *(*name_of_variable) (struct varobj *parent); char *(*name_of_variable) (const struct varobj *parent);
/* The name of the INDEX'th child of PARENT. */ /* The name of the INDEX'th child of PARENT. */
char *(*name_of_child) (struct varobj *parent, int index); char *(*name_of_child) (struct varobj *parent, int index);
/* Returns the rooted expression of CHILD, which is a variable /* Returns the rooted expression of CHILD, which is a variable
obtain that has some parent. */ obtain that has some parent. */
char *(*path_expr_of_child) (struct varobj *child); char *(*path_expr_of_child) (const struct varobj *child);
/* The ``struct value *'' of the INDEX'th child of PARENT. */ /* 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) (struct varobj *parent, int index);
@ -186,7 +186,7 @@ struct lang_varobj_ops
struct type *(*type_of_child) (struct varobj *parent, int index); struct type *(*type_of_child) (struct varobj *parent, int index);
/* The current value of VAR. */ /* The current value of VAR. */
char *(*value_of_variable) (struct varobj *var, char *(*value_of_variable) (const struct varobj *var,
enum varobj_display_formats format); enum varobj_display_formats format);
/* Return non-zero if changes in value of VAR must be detected and /* Return non-zero if changes in value of VAR must be detected and
@ -197,7 +197,7 @@ struct lang_varobj_ops
Return value of 0 means that gdb need not call value_fetch_lazy Return value of 0 means that gdb need not call value_fetch_lazy
for the value of this variable object. */ 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. /* Return nonzero if the type of VAR has mutated.
@ -211,14 +211,14 @@ struct lang_varobj_ops
children is set (not < 0). children is set (not < 0).
Languages where types do not mutate can set this to NULL. */ 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); struct type *new_type);
/* Return nonzero if VAR is a suitable path expression parent. /* Return nonzero if VAR is a suitable path expression parent.
For C like languages with anonymous structures and unions an anonymous For C like languages with anonymous structures and unions an anonymous
structure or union is not a suitable parent. */ structure or union is not a suitable parent. */
int (*is_path_expr_parent) (struct varobj *var); int (*is_path_expr_parent) (const struct varobj *var);
}; };
extern const struct lang_varobj_ops c_varobj_ops; extern const struct lang_varobj_ops c_varobj_ops;
@ -237,9 +237,9 @@ extern char *varobj_gen_name (void);
extern struct varobj *varobj_get_handle (char *name); extern struct varobj *varobj_get_handle (char *name);
extern char *varobj_get_objname (struct varobj *var); extern char *varobj_get_objname (const struct varobj *var);
extern char *varobj_get_expression (struct varobj *var); extern char *varobj_get_expression (const struct varobj *var);
extern int varobj_delete (struct varobj *var, char ***dellist, extern int varobj_delete (struct varobj *var, char ***dellist,
int only_children); int only_children);
@ -249,19 +249,20 @@ extern enum varobj_display_formats varobj_set_display_format (
enum varobj_display_formats format); enum varobj_display_formats format);
extern enum varobj_display_formats varobj_get_display_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 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 void varobj_set_child_range (struct varobj *var, int from, int to);
extern char *varobj_get_display_hint (struct varobj *var); extern char *varobj_get_display_hint (const struct varobj *var);
extern int varobj_get_num_children (struct varobj *var); extern int varobj_get_num_children (struct varobj *var);
@ -278,13 +279,14 @@ extern VEC (varobj_p)* varobj_list_children (struct varobj *var,
extern char *varobj_get_type (struct varobj *var); extern char *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 char *varobj_get_path_expr (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, extern char *varobj_get_formatted_value (struct varobj *var,
enum varobj_display_formats format); enum varobj_display_formats format);
@ -301,33 +303,33 @@ extern VEC(varobj_update_result) *varobj_update (struct varobj **varp,
extern void varobj_invalidate (void); 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, extern void varobj_set_visualizer (struct varobj *var,
const char *visualizer); const char *visualizer);
extern void varobj_enable_pretty_printing (void); 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_is_dynamic_p (struct varobj *var); extern int varobj_is_dynamic_p (const struct varobj *var);
extern struct cleanup *varobj_ensure_python_env (struct varobj *var); extern struct cleanup *varobj_ensure_python_env (const struct varobj *var);
extern int varobj_default_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 (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 struct varobj *varobj_get_path_expr_parent (struct varobj *var);
extern char *varobj_value_get_print_value (struct value *value, extern char *varobj_value_get_print_value (struct value *value,
enum varobj_display_formats format, enum varobj_display_formats format,
struct varobj *var); const struct varobj *var);
extern void varobj_formatted_print_options (struct value_print_options *opts, extern void varobj_formatted_print_options (struct value_print_options *opts,
enum varobj_display_formats format); enum varobj_display_formats format);
@ -335,6 +337,6 @@ extern void varobj_formatted_print_options (struct value_print_options *opts,
extern void varobj_restrict_range (VEC (varobj_p) *children, int *from, extern void varobj_restrict_range (VEC (varobj_p) *children, int *from,
int *to); int *to);
extern int varobj_default_is_path_expr_parent (struct varobj *var); extern int varobj_default_is_path_expr_parent (const struct varobj *var);
#endif /* VAROBJ_H */ #endif /* VAROBJ_H */