X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=gdb%2Fm2-typeprint.c;h=fe041b48c53d99e0222c3a65b1c0c910d8be6fc4;hb=8df017996f662ce6ab23aea4abeb8f7ac1f62651;hp=21bca390721ba8ad624f011ca514f2647000efec;hpb=09e2d7c72040dd2d1833c140b5f04a85bc3f6a0f;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c index 21bca39072..fe041b48c5 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,18 +75,18 @@ 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; } - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_SET: m2_short_set(type, stream, show, level); @@ -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)); + if (!SYMBOL_TYPE (new_symbol)->name () + || strcmp ((SYMBOL_TYPE (new_symbol))->name (), + 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. */ @@ -177,8 +178,8 @@ m2_print_typedef (struct type *type, struct symbol *new_symbol, void m2_type_name (struct type *type, struct ui_file *stream) { - if (TYPE_NAME (type) != NULL) - fputs_filtered (TYPE_NAME (type), stream); + if (type->name () != NULL) + fputs_filtered (type->name (), stream); } /* m2_range - displays a Modula-2 subrange type. */ @@ -210,9 +211,9 @@ static void m2_typedef (struct type *type, struct ui_file *stream, int show, int level, const struct type_print_options *flags) { - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); fputs_filtered (" = ", stream); } m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); @@ -227,16 +228,16 @@ static void m2_array (struct type *type, struct ui_file *stream, if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0 && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) { - if (TYPE_INDEX_TYPE (type) != 0) + if (type->index_type () != 0) { - m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 0); + m2_print_bounds (type->index_type (), stream, show, -1, 0); fprintf_filtered (stream, ".."); - m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 1); + m2_print_bounds (type->index_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); @@ -280,9 +281,10 @@ 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_TARGET_TYPE (type)->code () != TYPE_CODE_VOID) { - int i, len = TYPE_NFIELDS (type); + int i, len = type->num_fields (); fprintf_filtered (stream, " ("); for (i = 0; i < len; i++) @@ -292,13 +294,13 @@ m2_procedure (struct type *type, struct ui_file *stream, fputs_filtered (", ", stream); wrap_here (" "); } - m2_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0, flags); + m2_print_type (type->field (i).type (), "", 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); } } @@ -309,7 +311,7 @@ m2_print_bounds (struct type *type, { struct type *target = TYPE_TARGET_TYPE (type); - if (TYPE_NFIELDS(type) == 0) + if (type->num_fields () == 0) return; if (print_high) @@ -322,11 +324,11 @@ static void m2_short_set (struct type *type, struct ui_file *stream, int show, int level) { fprintf_filtered(stream, "SET ["); - m2_print_bounds (TYPE_INDEX_TYPE (type), stream, + m2_print_bounds (type->index_type (), stream, show - 1, level, 0); fprintf_filtered(stream, ".."); - m2_print_bounds (TYPE_INDEX_TYPE (type), stream, + m2_print_bounds (type->index_type (), stream, show - 1, level, 1); fprintf_filtered(stream, "]"); } @@ -339,22 +341,22 @@ m2_is_long_set (struct type *type) int len, i; struct type *range; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { /* check if all fields of the RECORD are consecutive sets. */ - len = TYPE_NFIELDS (type); + len = type->num_fields (); for (i = TYPE_N_BASECLASSES (type); i < len; i++) { - if (TYPE_FIELD_TYPE (type, i) == NULL) + if (type->field (i).type () == NULL) return 0; - if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) != TYPE_CODE_SET) + if (type->field (i).type ()->code () != TYPE_CODE_SET) return 0; if (TYPE_FIELD_NAME (type, i) != NULL && (strcmp (TYPE_FIELD_NAME (type, i), "") != 0)) return 0; - range = TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i)); + range = type->field (i).type ()->index_type (); if ((i > TYPE_N_BASECLASSES (type)) && previous_high + 1 != TYPE_LOW_BOUND (range)) return 0; @@ -373,8 +375,8 @@ m2_is_long_set (struct type *type) static int m2_get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp) { - CHECK_TYPEDEF (type); - switch (TYPE_CODE (type)) + type = check_typedef (type); + switch (type->code ()) { case TYPE_CODE_CHAR: if (TYPE_LENGTH (type) < sizeof (LONGEST)) @@ -405,17 +407,17 @@ m2_is_long_set_of_type (struct type *type, struct type **of_type) LONGEST l1, l2; LONGEST h1, h2; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { - len = TYPE_NFIELDS (type); + len = type->num_fields (); i = TYPE_N_BASECLASSES (type); if (len == 0) return 0; - range = TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i)); + range = type->field (i).type ()->index_type (); target = TYPE_TARGET_TYPE (range); - l1 = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i))); - h1 = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, len-1))); + l1 = TYPE_LOW_BOUND (type->field (i).type ()->index_type ()); + h1 = TYPE_HIGH_BOUND (type->field (len - 1).type ()->index_type ()); *of_type = target; if (m2_get_discrete_bounds (target, &l2, &h2) >= 0) return (l1 == l2 && h1 == h2); @@ -432,28 +434,20 @@ m2_long_set (struct type *type, struct ui_file *stream, int show, int level, { struct type *of_type; int i; - int len = TYPE_NFIELDS (type); + int len = type->num_fields (); LONGEST low; LONGEST high; 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 () != NULL) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), 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 "); @@ -463,12 +457,12 @@ m2_long_set (struct type *type, struct ui_file *stream, int show, int level, else { fprintf_filtered(stream, "["); - m2_print_bounds (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i)), + m2_print_bounds (type->field (i).type ()->index_type (), stream, show - 1, level, 0); fprintf_filtered(stream, ".."); - m2_print_bounds (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, len-1)), + m2_print_bounds (type->field (len - 1).type ()->index_type (), stream, show - 1, level, 1); fprintf_filtered(stream, "]"); } @@ -488,7 +482,7 @@ m2_long_set (struct type *type, struct ui_file *stream, int show, int level, int m2_is_unbounded_array (struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { /* * check if we have a structure with exactly two fields named @@ -496,13 +490,13 @@ m2_is_unbounded_array (struct type *type) * type of _m2_contents is a pointer. The TYPE_TARGET_TYPE * of the pointer determines the unbounded ARRAY OF type. */ - if (TYPE_NFIELDS (type) != 2) + if (type->num_fields () != 2) return 0; if (strcmp (TYPE_FIELD_NAME (type, 0), "_m2_contents") != 0) return 0; if (strcmp (TYPE_FIELD_NAME (type, 1), "_m2_high") != 0) return 0; - if (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) != TYPE_CODE_PTR) + if (type->field (0).type ()->code () != TYPE_CODE_PTR) return 0; return 1; } @@ -523,7 +517,7 @@ m2_unbounded_array (struct type *type, struct ui_file *stream, int show, if (show > 0) { fputs_filtered ("ARRAY OF ", stream); - m2_print_type (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0)), + m2_print_type (TYPE_TARGET_TYPE (type->field (0).type ()), "", stream, 0, level, flags); } return 1; @@ -536,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 () != NULL) { - if (strncmp (TYPE_TAG_NAME (type), "$$", 2) != 0) + if (!startswith (type->name (), "$$")) { - fputs_filtered (TYPE_TAG_NAME (type), stream); + fputs_filtered (type->name (), stream); if (show > 0) fprintf_filtered (stream, " = "); } @@ -548,19 +542,19 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show, wrap_here (" "); if (show < 0) { - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) fprintf_filtered (stream, "RECORD ... END "); - else if (TYPE_CODE (type) == TYPE_CODE_UNION) + else if (type->code () == TYPE_CODE_UNION) fprintf_filtered (stream, "CASE ... END "); } else if (show > 0) { int i; - int len = TYPE_NFIELDS (type); + int len = type->num_fields (); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) fprintf_filtered (stream, "RECORD\n"); - else if (TYPE_CODE (type) == TYPE_CODE_UNION) + else if (type->code () == TYPE_CODE_UNION) /* i18n: Do not translate "CASE" and "OF". */ fprintf_filtered (stream, _("CASE OF\n")); @@ -569,9 +563,10 @@ 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), + m2_print_type (type->field (i).type (), "", stream, 0, level + 4, flags); if (TYPE_FIELD_PACKED (type, i)) @@ -600,13 +595,13 @@ 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 () == NULL) fprintf_filtered (stream, "(...)"); } - else if (show > 0 || TYPE_TAG_NAME (type) == NULL) + else if (show > 0 || type->name () == NULL) { fprintf_filtered (stream, "("); - len = TYPE_NFIELDS (type); + len = type->num_fields (); lastval = 0; for (i = 0; i < len; i++) { @@ -614,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",