/* Support for printing C values for GDB, the GNU debugger.
- Copyright (C) 1986-2020 Free Software Foundation, Inc.
+ Copyright (C) 1986-2021 Free Software Foundation, Inc.
This file is part of GDB.
const struct value_print_options *options)
{
int want_space = 0;
- struct gdbarch *gdbarch = get_type_arch (type);
+ struct gdbarch *gdbarch = type->arch ();
if (elttype->code () == TYPE_CODE_FUNC)
{
}
struct type *type = check_typedef (value_type (val));
- struct gdbarch *arch = get_type_arch (type);
const gdb_byte *valaddr = value_contents_for_printing (val);
if (options->vtblprint && cp_is_vtbl_ptr_type (type))
TYPE_CODE_STRUCT.) */
CORE_ADDR addr = extract_typed_address (valaddr, type);
- print_function_pointer_address (options, arch, addr, stream);
+ print_function_pointer_address (options, type->arch (), addr, stream);
}
else
{
/* Print vtable entry - we only get here if NOT using
-fvtable_thunks. (Otherwise, look under
TYPE_CODE_PTR.) */
- struct gdbarch *gdbarch = get_type_arch (type);
int offset = TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8;
- struct type *field_type = TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET);
+ struct type *field_type = type->field (VTBL_FNADDR_OFFSET).type ();
const gdb_byte *valaddr = value_contents_for_printing (val);
CORE_ADDR addr = extract_typed_address (valaddr + offset, field_type);
- print_function_pointer_address (options, gdbarch, addr, stream);
+ print_function_pointer_address (options, type->arch (), addr, stream);
}
else
cp_print_value_fields (val, stream, recurse, options, NULL, 0);
}
}
-/* c_value_print helper for TYPE_CODE_MEMBERPTR. */
-
-static void
-c_value_print_memberptr (struct value *val, struct ui_file *stream,
- int recurse,
- const struct value_print_options *options)
-{
- if (!options->format)
- {
- struct type *type = check_typedef (value_type (val));
- const gdb_byte *valaddr = value_contents_for_printing (val);
- cp_print_class_member (valaddr, type, stream, "&");
- }
- else
- generic_value_print (val, stream, recurse, options, &c_decorations);
-}
-
/* See c-lang.h. */
void
const struct value_print_options *options)
{
struct type *type = value_type (val);
- const gdb_byte *valaddr = value_contents_for_printing (val);
type = check_typedef (type);
switch (type->code ())
c_value_print_array (val, stream, recurse, options);
break;
- case TYPE_CODE_METHODPTR:
- cplus_print_method_ptr (valaddr, type, stream);
- break;
-
case TYPE_CODE_PTR:
c_value_print_ptr (val, stream, recurse, options);
break;
c_value_print_int (val, stream, options);
break;
+ case TYPE_CODE_METHODPTR:
case TYPE_CODE_MEMBERPTR:
- c_value_print_memberptr (val, stream, recurse, options);
- break;
-
case TYPE_CODE_REF:
case TYPE_CODE_RVALUE_REF:
case TYPE_CODE_ENUM:
struct type *original_type = value_type (val);
/* Hack: remove (char *) for char strings. Their
- type is indicated by the quoted string anyway.
- (Don't use c_textual_element_type here; quoted strings
- are always exactly (char *), (wchar_t *), or the like. */
+ type is indicated by the quoted string anyway.
+ (Don't use c_textual_element_type here; quoted strings
+ are always exactly (char *), (wchar_t *), or the like. */
if (original_type->code () == TYPE_CODE_PTR
&& original_type->name () == NULL
&& TYPE_TARGET_TYPE (original_type)->name () != NULL