From c1cc6152620563bbe861cfc2fa0a796e71ca87b5 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Tue, 10 Feb 2015 10:46:12 -0500 Subject: [PATCH] Finish constification of varobj interface This completes the constification of the struct varobj pointers in the lang_varobj_ops interface partially done in b09e2c591f9221d865bfe8425990a6bf9fab24e3. As suggested by Pedro, varobj_get_path_expr casts away the const to assign the "mutable" struct member. gdb/ChangeLog: * ada-varobj.c (ada_name_of_child): Constify parent. (ada_path_expr_of_child): Same. (ada_value_of_child): Same. (ada_type_of_child): Same. * c-varobj.c (c_is_path_expr_parent): Same. (c_describe_child): Same. (c_name_of_child): Same. (c_value_of_child): Same. (c_type_of_child): Same. (cplus_number_of_children): Same. (cplus_describe_child): Constify var. (cplus_name_of_child): Constify parent. (cplus_value_of_child): Same. (cplus_type_of_child): Same. * jv-varobj.c (java_name_of_child): Same. (java_value_of_child): Same. (java_type_of_child): Same. * varobj.c (value_of_child): Same. (varobj_default_is_path_expr_parent): Constify var, parent and return value. (varobj_get_path_expr): Constify var, modify path_expr through mutable_var. (install_new_value): Constify parent. (value_of_child): Constify parent. * varobj.h (struct varobj): Constify parent. (struct lang_varobj_ops): Constify name_of_child, value_of_child and type_of_child. (varobj_get_path_expr): Constify var. (varobj_get_path_expr_parent): Constify var and return value. --- gdb/ChangeLog | 32 ++++++++++++++++++++++++++++++++ gdb/ada-varobj.c | 8 ++++---- gdb/c-varobj.c | 22 +++++++++++----------- gdb/jv-varobj.c | 6 +++--- gdb/varobj.c | 17 +++++++++-------- gdb/varobj.h | 13 +++++++------ 6 files changed, 66 insertions(+), 32 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9941dbad133..6b9adf087fb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,35 @@ +2015-02-10 Simon Marchi + + * ada-varobj.c (ada_name_of_child): Constify parent. + (ada_path_expr_of_child): Same. + (ada_value_of_child): Same. + (ada_type_of_child): Same. + * c-varobj.c (c_is_path_expr_parent): Same. + (c_describe_child): Same. + (c_name_of_child): Same. + (c_value_of_child): Same. + (c_type_of_child): Same. + (cplus_number_of_children): Same. + (cplus_describe_child): Constify var. + (cplus_name_of_child): Constify parent. + (cplus_value_of_child): Same. + (cplus_type_of_child): Same. + * jv-varobj.c (java_name_of_child): Same. + (java_value_of_child): Same. + (java_type_of_child): Same. + * varobj.c (value_of_child): Same. + (varobj_default_is_path_expr_parent): Constify var, parent and return + value. + (varobj_get_path_expr): Constify var, modify path_expr through + mutable_var. + (install_new_value): Constify parent. + (value_of_child): Constify parent. + * varobj.h (struct varobj): Constify parent. + (struct lang_varobj_ops): Constify name_of_child, value_of_child and + type_of_child. + (varobj_get_path_expr): Constify var. + (varobj_get_path_expr_parent): Constify var and return value. + 2015-02-10 Luis Machado * arm-tdep.c (arm_prologue_unwind_stop_reason): New function. diff --git a/gdb/ada-varobj.c b/gdb/ada-varobj.c index 7407af473ce..83d07073a29 100644 --- a/gdb/ada-varobj.c +++ b/gdb/ada-varobj.c @@ -918,7 +918,7 @@ ada_name_of_variable (const struct varobj *parent) } static char * -ada_name_of_child (struct varobj *parent, int index) +ada_name_of_child (const struct varobj *parent, int index) { return ada_varobj_get_name_of_child (parent->value, parent->type, parent->name, index); @@ -927,7 +927,7 @@ ada_name_of_child (struct varobj *parent, int index) static char* ada_path_expr_of_child (const struct varobj *child) { - struct varobj *parent = child->parent; + const struct varobj *parent = child->parent; const char *parent_path_expr = varobj_get_path_expr (parent); return ada_varobj_get_path_expr_of_child (parent->value, @@ -938,14 +938,14 @@ ada_path_expr_of_child (const struct varobj *child) } static struct value * -ada_value_of_child (struct varobj *parent, int index) +ada_value_of_child (const struct varobj *parent, int index) { return ada_varobj_get_value_of_child (parent->value, parent->type, parent->name, index); } static struct type * -ada_type_of_child (struct varobj *parent, int index) +ada_type_of_child (const struct varobj *parent, int index) { return ada_varobj_get_type_of_child (parent->value, parent->type, index); diff --git a/gdb/c-varobj.c b/gdb/c-varobj.c index 9394d7cafde..363a356884a 100644 --- a/gdb/c-varobj.c +++ b/gdb/c-varobj.c @@ -146,7 +146,7 @@ c_is_path_expr_parent (const struct varobj *var) && TYPE_NAME (type) == NULL && TYPE_TAG_NAME (type) == NULL) { - struct varobj *parent = var->parent; + const struct varobj *parent = var->parent; while (parent != NULL && CPLUS_FAKE_CHILD (parent)) parent = parent->parent; @@ -282,7 +282,7 @@ value_struct_element_index (struct value *value, int type_index) to NULL. */ static void -c_describe_child (struct varobj *parent, int index, +c_describe_child (const struct varobj *parent, int index, char **cname, struct value **cvalue, struct type **ctype, char **cfull_expression) { @@ -422,7 +422,7 @@ c_describe_child (struct varobj *parent, int index, } static char * -c_name_of_child (struct varobj *parent, int index) +c_name_of_child (const struct varobj *parent, int index) { char *name; @@ -441,7 +441,7 @@ c_path_expr_of_child (const struct varobj *child) } static struct value * -c_value_of_child (struct varobj *parent, int index) +c_value_of_child (const struct varobj *parent, int index) { struct value *value = NULL; @@ -450,7 +450,7 @@ c_value_of_child (struct varobj *parent, int index) } static struct type * -c_type_of_child (struct varobj *parent, int index) +c_type_of_child (const struct varobj *parent, int index) { struct type *type = NULL; @@ -614,7 +614,7 @@ cplus_number_of_children (const struct varobj *var) /* It is necessary to access a real type (via RTTI). */ if (opts.objectprint) { - struct varobj *parent = var->parent; + const struct varobj *parent = var->parent; value = parent->value; lookup_actual_type = (TYPE_CODE (parent->type) == TYPE_CODE_REF @@ -697,7 +697,7 @@ match_accessibility (struct type *type, int index, enum accessibility acc) } static void -cplus_describe_child (struct varobj *parent, int index, +cplus_describe_child (const struct varobj *parent, int index, char **cname, struct value **cvalue, struct type **ctype, char **cfull_expression) { @@ -706,7 +706,7 @@ cplus_describe_child (struct varobj *parent, int index, int was_ptr; int lookup_actual_type = 0; char *parent_expression = NULL; - struct varobj *var; + const struct varobj *var; struct value_print_options opts; if (cname) @@ -898,7 +898,7 @@ cplus_describe_child (struct varobj *parent, int index, } static char * -cplus_name_of_child (struct varobj *parent, int index) +cplus_name_of_child (const struct varobj *parent, int index) { char *name = NULL; @@ -917,7 +917,7 @@ cplus_path_expr_of_child (const struct varobj *child) } static struct value * -cplus_value_of_child (struct varobj *parent, int index) +cplus_value_of_child (const struct varobj *parent, int index) { struct value *value = NULL; @@ -926,7 +926,7 @@ cplus_value_of_child (struct varobj *parent, int index) } static struct type * -cplus_type_of_child (struct varobj *parent, int index) +cplus_type_of_child (const struct varobj *parent, int index) { struct type *type = NULL; diff --git a/gdb/jv-varobj.c b/gdb/jv-varobj.c index dbd92a629be..69e88fb81ca 100644 --- a/gdb/jv-varobj.c +++ b/gdb/jv-varobj.c @@ -47,7 +47,7 @@ java_name_of_variable (const struct varobj *parent) } static char * -java_name_of_child (struct varobj *parent, int index) +java_name_of_child (const struct varobj *parent, int index) { char *name, *p; @@ -72,13 +72,13 @@ java_path_expr_of_child (const struct varobj *child) } static struct value * -java_value_of_child (struct varobj *parent, int index) +java_value_of_child (const struct varobj *parent, int index) { return cplus_varobj_ops.value_of_child (parent, index); } static struct type * -java_type_of_child (struct varobj *parent, int index) +java_type_of_child (const struct varobj *parent, int index) { return cplus_varobj_ops.type_of_child (parent, index); } diff --git a/gdb/varobj.c b/gdb/varobj.c index 268ba3c85d2..43ea96f7349 100644 --- a/gdb/varobj.c +++ b/gdb/varobj.c @@ -201,7 +201,7 @@ static char *name_of_child (struct varobj *, int); static struct value *value_of_root (struct varobj **var_handle, int *); -static struct value *value_of_child (struct varobj *parent, int index); +static struct value *value_of_child (const struct varobj *parent, int index); static char *my_value_of_variable (struct varobj *var, enum varobj_display_formats format); @@ -1019,10 +1019,10 @@ varobj_default_is_path_expr_parent (const struct varobj *var) /* Return the path expression parent for VAR. */ -struct varobj * -varobj_get_path_expr_parent (struct varobj *var) +const struct varobj * +varobj_get_path_expr_parent (const struct varobj *var) { - struct varobj *parent = var; + const struct varobj *parent = var; while (!is_root_p (parent) && !is_path_expr_parent (parent)) parent = parent->parent; @@ -1033,16 +1033,17 @@ varobj_get_path_expr_parent (struct varobj *var) /* Return a pointer to the full rooted expression of varobj VAR. If it has not been computed yet, compute it. */ char * -varobj_get_path_expr (struct varobj *var) +varobj_get_path_expr (const struct varobj *var) { if (var->path_expr == NULL) { /* For root varobjs, we initialize path_expr when creating varobj, so here it should be child varobj. */ + struct varobj *mutable_var = (struct varobj *) var; gdb_assert (!is_root_p (var)); - var->path_expr = (*var->root->lang_ops->path_expr_of_child) (var); + mutable_var->path_expr = (*var->root->lang_ops->path_expr_of_child) (var); } return var->path_expr; @@ -1378,7 +1379,7 @@ install_new_value (struct varobj *var, struct value *value, int initial) will be lazy, which means we've lost that old value. */ if (need_to_fetch && value && value_lazy (value)) { - struct varobj *parent = var->parent; + const struct varobj *parent = var->parent; int frozen = var->frozen; for (; !frozen && parent; parent = parent->parent) @@ -2483,7 +2484,7 @@ value_of_root (struct varobj **var_handle, int *type_changed) /* What is the ``struct value *'' for the INDEX'th child of PARENT? */ static struct value * -value_of_child (struct varobj *parent, int index) +value_of_child (const struct varobj *parent, int index) { struct value *value; diff --git a/gdb/varobj.h b/gdb/varobj.h index 30c31efc188..6fe7009b0d4 100644 --- a/gdb/varobj.h +++ b/gdb/varobj.h @@ -120,7 +120,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; @@ -175,7 +175,7 @@ struct lang_varobj_ops /* The name of the INDEX'th child of PARENT. The returned value must be freed by the caller. */ - char *(*name_of_child) (struct varobj *parent, int index); + char *(*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 @@ -183,10 +183,10 @@ struct lang_varobj_ops char *(*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. The returned value must be freed by the caller. */ @@ -285,7 +285,7 @@ extern char *varobj_get_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 (const struct varobj *var); extern const struct language_defn * varobj_get_language (const struct varobj *var); @@ -329,7 +329,8 @@ extern struct type *varobj_get_value_type (const struct varobj *var); 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, -- 2.30.2