X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fm2-typeprint.c;h=a4a7689c33eeda556b06301de908da75645a6fec;hb=5390c717386160683b436e35befd9dc7893065e5;hp=4e8293810416bd3d6f0aabedbcf5abf3eb3a1b38;hpb=4bfb94b8648cebad2683d24ebe033ef539df1dbb;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c index 4e82938104..a4a7689c33 100644 --- a/gdb/m2-typeprint.c +++ b/gdb/m2-typeprint.c @@ -1,5 +1,5 @@ /* Support for printing Modula 2 types for GDB, the GNU debugger. - Copyright (C) 1986-2015 Free Software Foundation, Inc. + Copyright (C) 1986-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -31,6 +31,7 @@ #include "c-lang.h" #include "typeprint.h" #include "cp-abi.h" +#include "cli/cli-style.h" static void m2_print_bounds (struct type *type, struct ui_file *stream, int show, int level, @@ -74,14 +75,14 @@ m2_print_type (struct type *type, const char *varstring, int show, int level, const struct type_print_options *flags) { - CHECK_TYPEDEF (type); + type = check_typedef (type); QUIT; wrap_here (" "); if (type == NULL) { - fputs_filtered (_(""), stream); + fputs_styled (_(""), metadata_style.style (), stream); return; } @@ -160,16 +161,16 @@ void m2_print_typedef (struct type *type, struct symbol *new_symbol, struct ui_file *stream) { - CHECK_TYPEDEF (type); + type = check_typedef (type); fprintf_filtered (stream, "TYPE "); if (!TYPE_NAME (SYMBOL_TYPE (new_symbol)) || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))), - SYMBOL_LINKAGE_NAME (new_symbol)) != 0) - fprintf_filtered (stream, "%s = ", SYMBOL_PRINT_NAME (new_symbol)); + new_symbol->linkage_name ()) != 0) + fprintf_filtered (stream, "%s = ", new_symbol->print_name ()); else fprintf_filtered (stream, " = "); type_print (type, "", stream, 0); - fprintf_filtered (stream, ";\n"); + fprintf_filtered (stream, ";"); } /* m2_type_name - if a, type, has a name then print it. */ @@ -188,8 +189,12 @@ m2_range (struct type *type, struct ui_file *stream, int show, int level, const struct type_print_options *flags) { if (TYPE_HIGH_BOUND (type) == TYPE_LOW_BOUND (type)) - m2_print_type (TYPE_SELF_TYPE (type), "", stream, show, level, - flags); + { + /* FIXME: TYPE_TARGET_TYPE used to be TYPE_DOMAIN_TYPE but that was + wrong. Not sure if TYPE_TARGET_TYPE is correct though. */ + m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, + flags); + } else { struct type *target = TYPE_TARGET_TYPE (type); @@ -230,9 +235,9 @@ static void m2_array (struct type *type, struct ui_file *stream, m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 1); } else - fprintf_filtered (stream, "%d", - (TYPE_LENGTH (type) - / TYPE_LENGTH (TYPE_TARGET_TYPE (type)))); + fputs_filtered (pulongest ((TYPE_LENGTH (type) + / TYPE_LENGTH (TYPE_TARGET_TYPE (type)))), + stream); } fprintf_filtered (stream, "] OF "); m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); @@ -276,7 +281,8 @@ m2_procedure (struct type *type, struct ui_file *stream, { fprintf_filtered (stream, "PROCEDURE "); m2_type_name (type, stream); - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) + if (TYPE_TARGET_TYPE (type) == NULL + || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) { int i, len = TYPE_NFIELDS (type); @@ -290,11 +296,11 @@ m2_procedure (struct type *type, struct ui_file *stream, } m2_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0, flags); } + fprintf_filtered (stream, ") : "); if (TYPE_TARGET_TYPE (type) != NULL) - { - fprintf_filtered (stream, " : "); - m2_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags); - } + m2_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags); + else + type_print_unknown_return_type (stream); } } @@ -369,7 +375,7 @@ m2_is_long_set (struct type *type) static int m2_get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp) { - CHECK_TYPEDEF (type); + type = check_typedef (type); switch (TYPE_CODE (type)) { case TYPE_CODE_CHAR: @@ -434,22 +440,14 @@ m2_long_set (struct type *type, struct ui_file *stream, int show, int level, if (m2_is_long_set (type)) { - if (TYPE_TAG_NAME (type) != NULL) - { - fputs_filtered (TYPE_TAG_NAME (type), stream); - if (show == 0) - return 1; - } - else if (TYPE_NAME (type) != NULL) + if (TYPE_NAME (type) != NULL) { fputs_filtered (TYPE_NAME (type), stream); if (show == 0) return 1; + fputs_filtered (" = ", stream); } - if (TYPE_TAG_NAME (type) != NULL || TYPE_NAME (type) != NULL) - fputs_filtered (" = ", stream); - if (get_long_set_bounds (type, &low, &high)) { fprintf_filtered(stream, "SET OF "); @@ -532,11 +530,11 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show, int level, const struct type_print_options *flags) { /* Print the tag if it exists. */ - if (TYPE_TAG_NAME (type) != NULL) + if (TYPE_NAME (type) != NULL) { - if (strncmp (TYPE_TAG_NAME (type), "$$", 2) != 0) + if (!startswith (TYPE_NAME (type), "$$")) { - fputs_filtered (TYPE_TAG_NAME (type), stream); + fputs_filtered (TYPE_NAME (type), stream); if (show > 0) fprintf_filtered (stream, " = "); } @@ -565,7 +563,8 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show, QUIT; print_spaces_filtered (level + 4, stream); - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); + fputs_styled (TYPE_FIELD_NAME (type, i), + variable_name_style.style (), stream); fputs_filtered (" : ", stream); m2_print_type (TYPE_FIELD_TYPE (type, i), "", @@ -596,10 +595,10 @@ m2_enum (struct type *type, struct ui_file *stream, int show, int level) if (show < 0) { /* If we just printed a tag name, no need to print anything else. */ - if (TYPE_TAG_NAME (type) == NULL) + if (TYPE_NAME (type) == NULL) fprintf_filtered (stream, "(...)"); } - else if (show > 0 || TYPE_TAG_NAME (type) == NULL) + else if (show > 0 || TYPE_NAME (type) == NULL) { fprintf_filtered (stream, "("); len = TYPE_NFIELDS (type); @@ -610,7 +609,8 @@ m2_enum (struct type *type, struct ui_file *stream, int show, int level) if (i > 0) fprintf_filtered (stream, ", "); wrap_here (" "); - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); + fputs_styled (TYPE_FIELD_NAME (type, i), + variable_name_style.style (), stream); if (lastval != TYPE_FIELD_ENUMVAL (type, i)) { fprintf_filtered (stream, " = %s",