From 046245839052222161e5cb1233a0f4ca55cfffba Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Mon, 7 Feb 2005 23:51:03 +0000 Subject: [PATCH] 2005-02-07 Andrew Cagney * value.h (deprecated_set_value_type): Declare. * value.c (deprecated_set_value_type): Define. * hpacc-abi.c, gnu-v2-abi.c, cp-valprint.c: Update. * c-valprint.c, jv-lang.c, objc-lang.c, ada-lang.c: Update. * infcall.c, printcmd.c, valops.c, eval.c, p-exp.y: Update. * ax-gdb.c, tracepoint.c: Update. --- gdb/ChangeLog | 7 +++++++ gdb/ada-lang.c | 6 +++--- gdb/ax-gdb.c | 2 +- gdb/c-valprint.c | 2 +- gdb/cp-valprint.c | 3 ++- gdb/eval.c | 8 ++++---- gdb/gnu-v2-abi.c | 2 +- gdb/hpacc-abi.c | 2 +- gdb/infcall.c | 2 +- gdb/jv-lang.c | 4 ++-- gdb/objc-lang.c | 2 +- gdb/p-exp.y | 4 ++-- gdb/printcmd.c | 4 ++-- gdb/tracepoint.c | 4 ++-- gdb/valops.c | 18 +++++++++--------- gdb/value.c | 9 +++++++++ gdb/value.h | 9 +++++++++ 17 files changed, 57 insertions(+), 31 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7d35eb81faf..fca3e11ec1c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2005-02-07 Andrew Cagney + * value.h (deprecated_set_value_type): Declare. + * value.c (deprecated_set_value_type): Define. + * hpacc-abi.c, gnu-v2-abi.c, cp-valprint.c: Update. + * c-valprint.c, jv-lang.c, objc-lang.c, ada-lang.c: Update. + * infcall.c, printcmd.c, valops.c, eval.c, p-exp.y: Update. + * ax-gdb.c, tracepoint.c: Update. + * value.h (deprecated_value_lval_hack) (deprecated_value_address_hack) (deprecated_value_internalvar_hack) diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 222ead4283b..35265057ee1 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -1547,7 +1547,7 @@ ada_coerce_to_simple_array_type (struct type *type) struct value *mark = value_mark (); struct value *dummy = value_from_longest (builtin_type_long, 0); struct type *result; - dummy->type = type; + deprecated_set_value_type (dummy, type); result = ada_type_of_array (dummy, 0); value_free_to_mark (mark); return result; @@ -2041,7 +2041,7 @@ ada_value_assign (struct value *toval, struct value *fromval) val = value_copy (toval); memcpy (value_contents_raw (val), value_contents (fromval), TYPE_LENGTH (type)); - val->type = type; + deprecated_set_value_type (val, type); return val; } @@ -7047,7 +7047,7 @@ coerce_for_assign (struct type *type, struct value *val) || TYPE_LENGTH (TYPE_TARGET_TYPE (type2)) != TYPE_LENGTH (TYPE_TARGET_TYPE (type2))) error (_("Incompatible types in assignment")); - val->type = type; + deprecated_set_value_type (val, type); } return val; } diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c index eb971ae07bd..98d9ef59d51 100644 --- a/gdb/ax-gdb.c +++ b/gdb/ax-gdb.c @@ -1424,7 +1424,7 @@ gen_repeat (union exp_element **pc, struct agent_expr *ax, if (!v) error (_("Right operand of `@' must be a constant, in agent expressions.")); - if (TYPE_CODE (v->type) != TYPE_CODE_INT) + if (TYPE_CODE (value_type (v)) != TYPE_CODE_INT) error (_("Right operand of `@' must be an integer.")); length = value_as_long (v); if (length <= 0) diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index a18ef0ff685..948f5d87dd4 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -531,7 +531,7 @@ c_value_print (struct value *val, struct ui_file *stream, int format, */ struct value *temparg; temparg=value_copy(val); - temparg->type = lookup_pointer_type (TYPE_TARGET_TYPE(type)); + deprecated_set_value_type (temparg, lookup_pointer_type (TYPE_TARGET_TYPE(type))); val=temparg; } /* Pointer to class, check real type of object */ diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index 42a07fc4dbb..2cff8e7df5a 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -786,7 +786,8 @@ cp_print_hpacc_virtual_table_entries (struct type *type, int *vfuncs, /* adjust by offset */ vf->aligner.contents[0] += 4 * (HP_ACC_VFUNC_START + vx); vf = value_ind (vf); /* get the entry */ - vf->type = value_type (v); /* make it a pointer */ + /* make it a pointer */ + deprecated_set_value_type (vf, value_type (v)); /* print out the entry */ val_print (value_type (vf), value_contents (vf), 0, 0, diff --git a/gdb/eval.c b/gdb/eval.c index 79a8ffd329e..4f1f25a6374 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -945,8 +945,8 @@ evaluate_subexp_standard (struct type *expect_type, if (gnu_runtime && (method != NULL)) { /* Function objc_msg_lookup returns a pointer. */ - argvec[0]->type - = lookup_function_type (lookup_pointer_type (value_type (argvec[0]))); + deprecated_set_value_type (argvec[0], + lookup_function_type (lookup_pointer_type (value_type (argvec[0])))); argvec[0] = call_function_by_hand (argvec[0], nargs + 2, argvec + 1); } @@ -1030,7 +1030,7 @@ evaluate_subexp_standard (struct type *expect_type, } else { - arg1->type = lookup_pointer_type (TYPE_TARGET_TYPE (value_type (arg1))); + deprecated_set_value_type (arg1, lookup_pointer_type (TYPE_TARGET_TYPE (value_type (arg1)))); } got_it: @@ -1688,7 +1688,7 @@ evaluate_subexp_standard (struct type *expect_type, type, this will ensure that value_subscript() returns the correct type value */ - arg1->type = tmp_type; + deprecated_set_value_type (arg1, tmp_type); return value_ind (value_add (value_coerce_array (arg1), arg2)); } diff --git a/gdb/gnu-v2-abi.c b/gdb/gnu-v2-abi.c index c5557860f02..87f4e9c7226 100644 --- a/gdb/gnu-v2-abi.c +++ b/gdb/gnu-v2-abi.c @@ -177,7 +177,7 @@ gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j, else error ("I'm confused: virtual function table has bad type"); /* Reinstantiate the function pointer with the correct type. */ - vfn->type = lookup_pointer_type (TYPE_FN_FIELD_TYPE (f, j)); + deprecated_set_value_type (vfn, lookup_pointer_type (TYPE_FN_FIELD_TYPE (f, j))); *arg1p = arg1; return vfn; diff --git a/gdb/hpacc-abi.c b/gdb/hpacc-abi.c index 9f86c1532db..a0836e0565d 100644 --- a/gdb/hpacc-abi.c +++ b/gdb/hpacc-abi.c @@ -168,7 +168,7 @@ hpacc_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j, /* Wrap this addr in a value and return pointer */ vp = allocate_value (ftype); - vp->type = ftype; + deprecated_set_value_type (vp, ftype); VALUE_ADDRESS (vp) = coreptr; /* pai: (temp) do we need the value_ind stuff in value_fn_field? */ diff --git a/gdb/infcall.c b/gdb/infcall.c index 667a07fad08..f91777c4dae 100644 --- a/gdb/infcall.c +++ b/gdb/infcall.c @@ -96,7 +96,7 @@ value_arg_coerce (struct value *arg, struct type *param_type, && TYPE_CODE (arg_type) != TYPE_CODE_PTR) { arg = value_addr (arg); - arg->type = param_type; + deprecated_set_value_type (arg, param_type); return arg; } break; diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c index bc2264f10c4..230ee86140a 100644 --- a/gdb/jv-lang.c +++ b/gdb/jv-lang.c @@ -320,7 +320,7 @@ type_from_class (struct value *clas) temp = clas; /* Set array element type. */ temp = value_struct_elt (&temp, NULL, "methods", NULL, "structure"); - temp->type = lookup_pointer_type (value_type (clas)); + deprecated_set_value_type (temp, lookup_pointer_type (value_type (clas))); TYPE_TARGET_TYPE (type) = type_from_class (temp); } @@ -890,7 +890,7 @@ evaluate_subexp_java (struct type *expect_type, struct expression *exp, /* Get CLASS_ELEMENT_TYPE of the array type. */ temp = value_struct_elt (&temp, NULL, "methods", NULL, "structure"); - temp->type = value_type (clas); + deprecated_set_value_type (temp, value_type (clas)); el_type = type_from_class (temp); if (TYPE_CODE (el_type) == TYPE_CODE_STRUCT) el_type = lookup_pointer_type (el_type); diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index 8ddffa81908..41dd8e85cc3 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -204,7 +204,7 @@ value_nsstring (char *ptr, int len) else error ("NSString: internal error -- no way to create new NSString"); - nsstringValue->type = type; + deprecated_set_value_type (nsstringValue, type); return nsstringValue; } diff --git a/gdb/p-exp.y b/gdb/p-exp.y index a80f8e9275b..5a61276fb3b 100644 --- a/gdb/p-exp.y +++ b/gdb/p-exp.y @@ -521,7 +521,7 @@ exp : THIS /* we need type of this */ this_val = value_of_this (0); if (this_val) - this_type = this_val->type; + this_type = value_type (this_val); else this_type = NULL; if (this_type) @@ -672,7 +672,7 @@ variable: name_not_typename /* we need type of this */ this_val = value_of_this (0); if (this_val) - this_type = this_val->type; + this_type = value_type (this_val); else this_type = NULL; if (this_type) diff --git a/gdb/printcmd.c b/gdb/printcmd.c index c735d2ca5bf..524dd39c183 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -1904,9 +1904,9 @@ printf_command (char *arg, int from_tty) { struct type *type = value_type (val_args[nargs]); if (TYPE_LENGTH (type) == sizeof (float)) - val_args[nargs]->type = builtin_type_float; + deprecated_set_value_type (val_args[nargs], builtin_type_float); if (TYPE_LENGTH (type) == sizeof (double)) - val_args[nargs]->type = builtin_type_double; + deprecated_set_value_type (val_args[nargs], builtin_type_double); } nargs++; s = s1; diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 74a0d554f76..6de409e586f 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -296,7 +296,7 @@ set_traceframe_context (CORE_ADDR trace_pc) func_string = create_array_type (func_string, builtin_type_char, func_range); func_val = allocate_value (func_string); - func_val->type = func_string; + deprecated_set_value_type (func_val, func_string); memcpy (value_contents_raw (func_val), DEPRECATED_SYMBOL_NAME (traceframe_fun), len); @@ -318,7 +318,7 @@ set_traceframe_context (CORE_ADDR trace_pc) file_string = create_array_type (file_string, builtin_type_char, file_range); file_val = allocate_value (file_string); - file_val->type = file_string; + deprecated_set_value_type (file_val, file_string); memcpy (value_contents_raw (file_val), traceframe_sal.symtab->filename, len); diff --git a/gdb/valops.c b/gdb/valops.c index 942ef16a5f7..56e464536e6 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -240,8 +240,8 @@ value_cast (struct type *type, struct value *arg2) TYPE_TARGET_TYPE (range_type), low_bound, new_length + low_bound - 1); - arg2->type = create_array_type ((struct type *) NULL, - element_type, range_type); + deprecated_set_value_type (arg2, create_array_type ((struct type *) NULL, + element_type, range_type)); return arg2; } } @@ -282,7 +282,7 @@ value_cast (struct type *type, struct value *arg2) arg2, 0, type2, 1); if (v) { - v->type = type; + deprecated_set_value_type (v, type); return v; } } @@ -380,7 +380,7 @@ value_cast (struct type *type, struct value *arg2) if (v) { v = value_addr (v); - v->type = type; + deprecated_set_value_type (v, type); return v; } } @@ -405,7 +405,7 @@ value_cast (struct type *type, struct value *arg2) } /* No superclass found, just fall through to change ptr type. */ } - arg2->type = type; + deprecated_set_value_type (arg2, type); arg2 = value_change_enclosing_type (arg2, type); set_value_pointed_to_offset (arg2, 0); /* pai: chk_val */ return arg2; @@ -730,7 +730,7 @@ value_assign (struct value *toval, struct value *fromval) val = value_copy (toval); memcpy (value_contents_raw (val), value_contents (fromval), TYPE_LENGTH (type)); - val->type = type; + deprecated_set_value_type (val, type); val = value_change_enclosing_type (val, value_enclosing_type (fromval)); set_value_embedded_offset (val, value_embedded_offset (fromval)); set_value_pointed_to_offset (val, value_pointed_to_offset (fromval)); @@ -855,7 +855,7 @@ value_addr (struct value *arg1) We keep the same location information, which is efficient, and allows &(&X) to get the location containing the reference. */ arg2 = value_copy (arg1); - arg2->type = lookup_pointer_type (TYPE_TARGET_TYPE (type)); + deprecated_set_value_type (arg2, lookup_pointer_type (TYPE_TARGET_TYPE (type))); return arg2; } if (TYPE_CODE (type) == TYPE_CODE_FUNC) @@ -911,7 +911,7 @@ value_ind (struct value *arg1) arg2 = value_at_lazy (enc_type, (value_as_address (arg1) - value_pointed_to_offset (arg1))); /* Re-adjust type */ - arg2->type = TYPE_TARGET_TYPE (base_type); + deprecated_set_value_type (arg2, TYPE_TARGET_TYPE (base_type)); /* Add embedding info */ arg2 = value_change_enclosing_type (arg2, enc_type); set_value_embedded_offset (arg2, value_pointed_to_offset (arg1)); @@ -2625,7 +2625,7 @@ value_full_object (struct value *argp, struct type *rtype, int xfull, int xtop, used for its computation. */ new_val = value_at_lazy (real_type, VALUE_ADDRESS (argp) - top + (using_enc ? 0 : value_embedded_offset (argp))); - new_val->type = value_type (argp); + deprecated_set_value_type (new_val, value_type (argp)); set_value_embedded_offset (new_val, (using_enc ? top + value_embedded_offset (argp) : top)); diff --git a/gdb/value.c b/gdb/value.c index 1a8796e332c..e338dd2d73b 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -21,6 +21,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* Hack so that value.h can detect when it's being included by + value.c. */ +#define VALUE_C + #include "defs.h" #include "gdb_string.h" #include "symtab.h" @@ -128,6 +132,11 @@ value_type (struct value *value) { return value->type; } +void +deprecated_set_value_type (struct value *value, struct type *type) +{ + value->type = type; +} int value_offset (struct value *value) diff --git a/gdb/value.h b/gdb/value.h index 3905b1af078..762f1f2a3b8 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -80,7 +80,11 @@ struct value struct frame_id frame_id; /* Type of the value. */ +#ifdef VALUE_C struct type *type; +#else + struct type *xtype; +#endif /* If a value represents a C++ object, then the `type' field gives the object's compile-time type. If the object actually belongs @@ -174,6 +178,11 @@ struct value extern struct type *value_type (struct value *); +/* This is being used to change the type of an existing value, that + code should instead be creating a new value with the changed type + (but possibly shared content). */ +extern void deprecated_set_value_type (struct value *value, + struct type *type); extern int value_bitsize (struct value *); extern int value_bitpos (struct value *); extern int value_offset (struct value *); -- 2.30.2