diff options
author | Tom Tromey <tom@tromey.com> | 2018-04-17 13:51:24 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-06-01 10:19:55 -0600 |
commit | e86ca25fd6cc06488c9dda936cf83f0fcdf6b58b (patch) | |
tree | e7cd08ab978fa972959ac445c3799e9ccbf0ebc0 /gdb/rust-lang.c | |
parent | c1ec8cea7ff53eb76cb7c354b813c67fde755409 (diff) | |
download | gdb-e86ca25fd6cc06488c9dda936cf83f0fcdf6b58b.zip gdb-e86ca25fd6cc06488c9dda936cf83f0fcdf6b58b.tar.gz gdb-e86ca25fd6cc06488c9dda936cf83f0fcdf6b58b.tar.bz2 |
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.
Diffstat (limited to 'gdb/rust-lang.c')
-rw-r--r-- | gdb/rust-lang.c | 57 |
1 files changed, 28 insertions, 29 deletions
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index ed03945..167f353 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -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 |