Remove TYPE_TAG_NAME
TYPE_TAG_NAME has been an occasional source of confusion and bugs. It seems to me that it is only useful for C and C++ -- but even there, not so much, because at least with DWARF there doesn't seem to be any way to wind up with a type where the name and the tag name are both non-NULL and different. So, this patch removes TYPE_TAG_NAME entirely. This should save a little memory, but more importantly, it simplifies this part of gdb. A few minor test suite adjustments were needed. In some situations the new code does not yield identical output to the old code. gdb/ChangeLog 2018-06-01 Tom Tromey <tom@tromey.com> * valops.c (enum_constant_from_type, value_namespace_elt) (value_maybe_namespace_elt): Update. * valarith.c (find_size_for_pointer_math): Update. * target-descriptions.c (make_gdb_type): Update. * symmisc.c (print_symbol): Update. * stabsread.c (define_symbol, read_type) (complain_about_struct_wipeout, add_undefined_type) (cleanup_undefined_types_1): Update. * rust-lang.c (rust_tuple_type_p, rust_slice_type_p) (rust_range_type_p, val_print_struct, rust_print_struct_def) (rust_internal_print_type, rust_composite_type) (rust_evaluate_funcall, rust_evaluate_subexp) (rust_inclusive_range_type_p): Update. * python/py-type.c (typy_get_tag): Update. * p-typeprint.c (pascal_type_print_base): Update. * mdebugread.c (parse_symbol, parse_type): Update. * m2-typeprint.c (m2_long_set, m2_record_fields, m2_enum): Update. * guile/scm-type.c (gdbscm_type_tag): Update. * go-lang.c (sixg_string_p): Update. * gnu-v3-abi.c (build_gdb_vtable_type, build_std_type_info_type): Update. * gdbtypes.h (struct main_type) <tag_name>: Remove. (TYPE_TAG_NAME): Remove. * gdbtypes.c (type_name_no_tag): Simplify. (check_typedef, check_types_equal, recursive_dump_type) (copy_type_recursive, arch_composite_type): Update. * f-typeprint.c (f_type_print_base): Update. Print "Type" prefix in summary mode when needed. * eval.c (evaluate_funcall): Update. * dwarf2read.c (fixup_go_packaging, read_structure_type) (process_structure_scope, read_enumeration_type) (read_namespace_type, read_module_type, determine_prefix): Update. * cp-support.c (inspect_type): Update. * coffread.c (process_coff_symbol, decode_base_type): Update. * c-varobj.c (c_is_path_expr_parent): Update. * c-typeprint.c (c_type_print_base_struct_union): Update. (c_type_print_base_1): Update. Print struct/class/union/enum in summary when using C language. * ax-gdb.c (gen_struct_ref, gen_namespace_elt) (gen_maybe_namespace_elt): Update. * ada-lang.c (ada_type_name): Simplify. (empty_record, ada_template_to_fixed_record_type_1) (template_to_static_fixed_type) (to_record_with_fixed_variant_part, ada_check_typedef): Update. gdb/testsuite/ChangeLog 2018-06-01 Tom Tromey <tom@tromey.com> * gdb.xml/tdesc-regs.exp (load_description): Update expected results. * gdb.dwarf2/method-ptr.exp: Set language to C++. * gdb.dwarf2/member-ptr-forwardref.exp: Set language to C++. * gdb.cp/typeid.exp (do_typeid_tests): Update type_re. * gdb.base/maint.exp (maint_pass_if): Update.
This commit is contained in:
parent
c1ec8cea7f
commit
e86ca25fd6
31 changed files with 221 additions and 209 deletions
|
@ -95,8 +95,8 @@ rust_tuple_type_p (struct type *type)
|
|||
nothing else in the debuginfo to distinguish a tuple from a
|
||||
struct. */
|
||||
return (TYPE_CODE (type) == TYPE_CODE_STRUCT
|
||||
&& TYPE_TAG_NAME (type) != NULL
|
||||
&& TYPE_TAG_NAME (type)[0] == '(');
|
||||
&& TYPE_NAME (type) != NULL
|
||||
&& TYPE_NAME (type)[0] == '(');
|
||||
}
|
||||
|
||||
/* Return true if all non-static fields of a structlike type are in a
|
||||
|
@ -143,9 +143,9 @@ static bool
|
|||
rust_slice_type_p (struct type *type)
|
||||
{
|
||||
return (TYPE_CODE (type) == TYPE_CODE_STRUCT
|
||||
&& TYPE_TAG_NAME (type) != NULL
|
||||
&& (strncmp (TYPE_TAG_NAME (type), "&[", 2) == 0
|
||||
|| strcmp (TYPE_TAG_NAME (type), "&str") == 0));
|
||||
&& TYPE_NAME (type) != NULL
|
||||
&& (strncmp (TYPE_NAME (type), "&[", 2) == 0
|
||||
|| strcmp (TYPE_NAME (type), "&str") == 0));
|
||||
}
|
||||
|
||||
/* Return true if TYPE is a range type, otherwise false. */
|
||||
|
@ -157,8 +157,8 @@ rust_range_type_p (struct type *type)
|
|||
|
||||
if (TYPE_CODE (type) != TYPE_CODE_STRUCT
|
||||
|| TYPE_NFIELDS (type) > 2
|
||||
|| TYPE_TAG_NAME (type) == NULL
|
||||
|| strstr (TYPE_TAG_NAME (type), "::Range") == NULL)
|
||||
|| TYPE_NAME (type) == NULL
|
||||
|| strstr (TYPE_NAME (type), "::Range") == NULL)
|
||||
return false;
|
||||
|
||||
if (TYPE_NFIELDS (type) == 0)
|
||||
|
@ -187,8 +187,8 @@ rust_range_type_p (struct type *type)
|
|||
static bool
|
||||
rust_inclusive_range_type_p (struct type *type)
|
||||
{
|
||||
return (strstr (TYPE_TAG_NAME (type), "::RangeInclusive") != NULL
|
||||
|| strstr (TYPE_TAG_NAME (type), "::RangeToInclusive") != NULL);
|
||||
return (strstr (TYPE_NAME (type), "::RangeInclusive") != NULL
|
||||
|| strstr (TYPE_NAME (type), "::RangeToInclusive") != NULL);
|
||||
}
|
||||
|
||||
/* Return true if TYPE seems to be the type "u8", otherwise false. */
|
||||
|
@ -353,13 +353,13 @@ val_print_struct (struct type *type, int embedded_offset,
|
|||
|
||||
if (!is_tuple)
|
||||
{
|
||||
if (TYPE_TAG_NAME (type) != NULL)
|
||||
fprintf_filtered (stream, "%s", TYPE_TAG_NAME (type));
|
||||
if (TYPE_NAME (type) != NULL)
|
||||
fprintf_filtered (stream, "%s", TYPE_NAME (type));
|
||||
|
||||
if (TYPE_NFIELDS (type) == 0)
|
||||
return;
|
||||
|
||||
if (TYPE_TAG_NAME (type) != NULL)
|
||||
if (TYPE_NAME (type) != NULL)
|
||||
fputs_filtered (" ", stream);
|
||||
}
|
||||
|
||||
|
@ -628,7 +628,7 @@ rust_print_struct_def (struct type *type, const char *varstring,
|
|||
/* Print a tuple type simply. */
|
||||
if (rust_tuple_type_p (type))
|
||||
{
|
||||
fputs_filtered (TYPE_TAG_NAME (type), stream);
|
||||
fputs_filtered (TYPE_NAME (type), stream);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -638,7 +638,7 @@ rust_print_struct_def (struct type *type, const char *varstring,
|
|||
|
||||
/* Compute properties of TYPE here because, in the enum case, the
|
||||
rest of the code ends up looking only at the variant part. */
|
||||
const char *tagname = TYPE_TAG_NAME (type);
|
||||
const char *tagname = TYPE_NAME (type);
|
||||
bool is_tuple_struct = rust_tuple_struct_type_p (type);
|
||||
bool is_tuple = rust_tuple_type_p (type);
|
||||
bool is_enum = rust_enum_p (type);
|
||||
|
@ -819,11 +819,11 @@ rust_internal_print_type (struct type *type, const char *varstring,
|
|||
int i, len = 0;
|
||||
|
||||
fputs_filtered ("enum ", stream);
|
||||
if (TYPE_TAG_NAME (type) != NULL)
|
||||
if (TYPE_NAME (type) != NULL)
|
||||
{
|
||||
fputs_filtered (TYPE_TAG_NAME (type), stream);
|
||||
fputs_filtered (TYPE_NAME (type), stream);
|
||||
fputs_filtered (" ", stream);
|
||||
len = strlen (TYPE_TAG_NAME (type));
|
||||
len = strlen (TYPE_NAME (type));
|
||||
}
|
||||
fputs_filtered ("{\n", stream);
|
||||
|
||||
|
@ -834,7 +834,7 @@ rust_internal_print_type (struct type *type, const char *varstring,
|
|||
QUIT;
|
||||
|
||||
if (len > 0
|
||||
&& strncmp (name, TYPE_TAG_NAME (type), len) == 0
|
||||
&& strncmp (name, TYPE_NAME (type), len) == 0
|
||||
&& name[len] == ':'
|
||||
&& name[len + 1] == ':')
|
||||
name += len + 2;
|
||||
|
@ -882,7 +882,6 @@ rust_composite_type (struct type *original,
|
|||
|
||||
TYPE_CODE (result) = TYPE_CODE_STRUCT;
|
||||
TYPE_NAME (result) = name;
|
||||
TYPE_TAG_NAME (result) = name;
|
||||
|
||||
TYPE_NFIELDS (result) = nfields;
|
||||
TYPE_FIELDS (result)
|
||||
|
@ -1060,10 +1059,10 @@ rust_evaluate_funcall (struct expression *exp, int *pos, enum noside noside)
|
|||
&& TYPE_CODE (type) != TYPE_CODE_ENUM)
|
||||
|| rust_tuple_type_p (type))
|
||||
error (_("Method calls only supported on struct or enum types"));
|
||||
if (TYPE_TAG_NAME (type) == NULL)
|
||||
if (TYPE_NAME (type) == NULL)
|
||||
error (_("Method call on nameless type"));
|
||||
|
||||
std::string name = std::string (TYPE_TAG_NAME (type)) + "::" + method;
|
||||
std::string name = std::string (TYPE_NAME (type)) + "::" + method;
|
||||
|
||||
block = get_selected_block (0);
|
||||
sym = lookup_symbol (name.c_str (), block, VAR_DOMAIN, NULL);
|
||||
|
@ -1583,13 +1582,13 @@ rust_evaluate_subexp (struct type *expect_type, struct expression *exp,
|
|||
if (outer_type != NULL)
|
||||
error(_("Cannot access field %d of variant %s::%s, "
|
||||
"there are only %d fields"),
|
||||
field_number, TYPE_TAG_NAME (outer_type),
|
||||
rust_last_path_segment (TYPE_TAG_NAME (type)),
|
||||
field_number, TYPE_NAME (outer_type),
|
||||
rust_last_path_segment (TYPE_NAME (type)),
|
||||
nfields);
|
||||
else
|
||||
error(_("Cannot access field %d of %s, "
|
||||
"there are only %d fields"),
|
||||
field_number, TYPE_TAG_NAME (type), nfields);
|
||||
field_number, TYPE_NAME (type), nfields);
|
||||
}
|
||||
|
||||
/* Tuples are tuple structs too. */
|
||||
|
@ -1597,13 +1596,13 @@ rust_evaluate_subexp (struct type *expect_type, struct expression *exp,
|
|||
{
|
||||
if (outer_type != NULL)
|
||||
error(_("Variant %s::%s is not a tuple variant"),
|
||||
TYPE_TAG_NAME (outer_type),
|
||||
rust_last_path_segment (TYPE_TAG_NAME (type)));
|
||||
TYPE_NAME (outer_type),
|
||||
rust_last_path_segment (TYPE_NAME (type)));
|
||||
else
|
||||
error(_("Attempting to access anonymous field %d "
|
||||
"of %s, which is not a tuple, tuple struct, or "
|
||||
"tuple-like variant"),
|
||||
field_number, TYPE_TAG_NAME (type));
|
||||
field_number, TYPE_NAME (type));
|
||||
}
|
||||
|
||||
result = value_primitive_field (lhs, 0, field_number, type);
|
||||
|
@ -1645,7 +1644,7 @@ tuple structs, and tuple-like enum variants"));
|
|||
if (rust_tuple_type_p (type) || rust_tuple_struct_type_p (type))
|
||||
error (_("Attempting to access named field foo of tuple "
|
||||
"variant %s::%s, which has only anonymous fields"),
|
||||
TYPE_TAG_NAME (outer_type),
|
||||
TYPE_NAME (outer_type),
|
||||
rust_last_path_segment (TYPE_NAME (type)));
|
||||
|
||||
TRY
|
||||
|
@ -1656,7 +1655,7 @@ tuple structs, and tuple-like enum variants"));
|
|||
CATCH (except, RETURN_MASK_ERROR)
|
||||
{
|
||||
error (_("Could not find field %s of struct variant %s::%s"),
|
||||
field_name, TYPE_TAG_NAME (outer_type),
|
||||
field_name, TYPE_NAME (outer_type),
|
||||
rust_last_path_segment (TYPE_NAME (type)));
|
||||
}
|
||||
END_CATCH
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue