X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fm2-typeprint.c;h=27e94292112e4ef0adf5c487feda7a5f7878bcd5;hb=c819b2c0b216c69a4ae5bfba0eac71ffdf1b3596;hp=3078dadc564ce1752b2b00e227cc27e3594b9793;hpb=ecd75fc8eed3bde86036141228074a20e55dcfc9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c index 3078dadc56..27e9429211 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-2014 Free Software Foundation, Inc. + Copyright (C) 1986-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -32,9 +32,6 @@ #include "typeprint.h" #include "cp-abi.h" -#include -#include - static void m2_print_bounds (struct type *type, struct ui_file *stream, int show, int level, int print_high); @@ -77,7 +74,7 @@ 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; @@ -163,7 +160,7 @@ 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))), @@ -191,8 +188,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_DOMAIN_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); @@ -279,7 +280,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); @@ -293,11 +295,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); } } @@ -372,7 +374,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: @@ -537,7 +539,7 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show, /* Print the tag if it exists. */ if (TYPE_TAG_NAME (type) != NULL) { - if (strncmp (TYPE_TAG_NAME (type), "$$", 2) != 0) + if (!startswith (TYPE_TAG_NAME (type), "$$")) { fputs_filtered (TYPE_TAG_NAME (type), stream); if (show > 0)