X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gdb%2Fm2-typeprint.c;h=dae07d1c531a02c6eac4cb9b56cc9ad7e793aae7;hb=98b0ebab0a1eb0c1f179ebe633250e7201d35bce;hp=8c5d6b4c592b12b5f4645f173bc0fbdd3f2d1974;hpb=d5c831bd769fa23e1f0d6c7e9ac9efbad0f84a6d;p=external%2Fbinutils.git diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c index 8c5d6b4..dae07d1 100644 --- a/gdb/m2-typeprint.c +++ b/gdb/m2-typeprint.c @@ -1,7 +1,5 @@ /* Support for printing Modula 2 types for GDB, the GNU debugger. - Copyright (C) 1986, 1988, 1989, 1991, 1992, 1995, 2000, 2001, 2002, 2003, - 2004, 2005, 2006, 2007, 2008, 2009 - Free Software Foundation, Inc. + Copyright (C) 1986-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -34,30 +32,34 @@ #include "typeprint.h" #include "cp-abi.h" -#include "gdb_string.h" -#include - static void m2_print_bounds (struct type *type, struct ui_file *stream, int show, int level, int print_high); -static void m2_typedef (struct type *, struct ui_file *, int, int); -static void m2_array (struct type *, struct ui_file *, int, int); -static void m2_pointer (struct type *, struct ui_file *, int, int); -static void m2_ref (struct type *, struct ui_file *, int, int); -static void m2_procedure (struct type *, struct ui_file *, int, int); +static void m2_typedef (struct type *, struct ui_file *, int, int, + const struct type_print_options *); +static void m2_array (struct type *, struct ui_file *, int, int, + const struct type_print_options *); +static void m2_pointer (struct type *, struct ui_file *, int, int, + const struct type_print_options *); +static void m2_ref (struct type *, struct ui_file *, int, int, + const struct type_print_options *); +static void m2_procedure (struct type *, struct ui_file *, int, int, + const struct type_print_options *); static void m2_union (struct type *, struct ui_file *); static void m2_enum (struct type *, struct ui_file *, int, int); -static void m2_range (struct type *, struct ui_file *, int, int); +static void m2_range (struct type *, struct ui_file *, int, int, + const struct type_print_options *); static void m2_type_name (struct type *type, struct ui_file *stream); static void m2_short_set (struct type *type, struct ui_file *stream, int show, int level); static int m2_long_set (struct type *type, struct ui_file *stream, - int show, int level); + int show, int level, const struct type_print_options *flags); static int m2_unbounded_array (struct type *type, struct ui_file *stream, - int show, int level); + int show, int level, + const struct type_print_options *flags); static void m2_record_fields (struct type *type, struct ui_file *stream, - int show, int level); + int show, int level, const struct type_print_options *flags); static void m2_unknown (const char *s, struct type *type, struct ui_file *stream, int show, int level); @@ -67,13 +69,12 @@ int m2_is_unbounded_array (struct type *type); void -m2_print_type (struct type *type, char *varstring, struct ui_file *stream, - int show, int level) +m2_print_type (struct type *type, const char *varstring, + struct ui_file *stream, + int show, int level, + const struct type_print_options *flags) { - enum type_code code; - int demangled_args; - - CHECK_TYPEDEF (type); + type = check_typedef (type); QUIT; @@ -84,7 +85,6 @@ m2_print_type (struct type *type, char *varstring, struct ui_file *stream, return; } - code = TYPE_CODE (type); switch (TYPE_CODE (type)) { case TYPE_CODE_SET: @@ -92,26 +92,26 @@ m2_print_type (struct type *type, char *varstring, struct ui_file *stream, break; case TYPE_CODE_STRUCT: - if (m2_long_set (type, stream, show, level) - || m2_unbounded_array (type, stream, show, level)) + if (m2_long_set (type, stream, show, level, flags) + || m2_unbounded_array (type, stream, show, level, flags)) break; - m2_record_fields (type, stream, show, level); + m2_record_fields (type, stream, show, level, flags); break; case TYPE_CODE_TYPEDEF: - m2_typedef (type, stream, show, level); + m2_typedef (type, stream, show, level, flags); break; case TYPE_CODE_ARRAY: - m2_array (type, stream, show, level); + m2_array (type, stream, show, level, flags); break; case TYPE_CODE_PTR: - m2_pointer (type, stream, show, level); + m2_pointer (type, stream, show, level, flags); break; case TYPE_CODE_REF: - m2_ref (type, stream, show, level); + m2_ref (type, stream, show, level, flags); break; case TYPE_CODE_METHOD: @@ -119,7 +119,7 @@ m2_print_type (struct type *type, char *varstring, struct ui_file *stream, break; case TYPE_CODE_FUNC: - m2_procedure (type, stream, show, level); + m2_procedure (type, stream, show, level, flags); break; case TYPE_CODE_UNION: @@ -134,7 +134,7 @@ m2_print_type (struct type *type, char *varstring, struct ui_file *stream, break; case TYPE_CODE_UNDEF: - /* i18n: Do not translate the "struct" part! */ + /* i18n: Do not translate the "struct" part! */ m2_unknown (_("undef"), type, stream, show, level); break; @@ -143,10 +143,7 @@ m2_print_type (struct type *type, char *varstring, struct ui_file *stream, break; case TYPE_CODE_RANGE: - m2_range (type, stream, show, level); - break; - - case TYPE_CODE_TEMPLATE: + m2_range (type, stream, show, level, flags); break; default: @@ -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))), @@ -188,10 +185,15 @@ m2_type_name (struct type *type, struct ui_file *stream) void m2_range (struct type *type, struct ui_file *stream, int show, - int level) + 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); + { + /* 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); @@ -206,20 +208,20 @@ m2_range (struct type *type, struct ui_file *stream, int show, static void m2_typedef (struct type *type, struct ui_file *stream, int show, - int level) + int level, const struct type_print_options *flags) { if (TYPE_NAME (type) != NULL) { fputs_filtered (TYPE_NAME (type), stream); fputs_filtered (" = ", stream); } - m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level); + m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); } /* m2_array - prints out a Modula-2 ARRAY ... OF type. */ static void m2_array (struct type *type, struct ui_file *stream, - int show, int level) + int show, int level, const struct type_print_options *flags) { fprintf_filtered (stream, "ARRAY ["); if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0 @@ -232,32 +234,32 @@ 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); + m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); } static void m2_pointer (struct type *type, struct ui_file *stream, int show, - int level) + int level, const struct type_print_options *flags) { if (TYPE_CONST (type)) fprintf_filtered (stream, "[...] : "); else fprintf_filtered (stream, "POINTER TO "); - m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level); + m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); } static void m2_ref (struct type *type, struct ui_file *stream, int show, - int level) + int level, const struct type_print_options *flags) { fprintf_filtered (stream, "VAR"); - m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level); + m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); } static void @@ -274,11 +276,12 @@ static void m2_union (struct type *type, struct ui_file *stream) static void m2_procedure (struct type *type, struct ui_file *stream, - int show, int level) + int show, int level, const struct type_print_options *flags) { 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,13 +293,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); + 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); - } + m2_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags); + else + type_print_unknown_return_type (stream); } } @@ -332,8 +335,8 @@ m2_short_set (struct type *type, struct ui_file *stream, int show, int level) int m2_is_long_set (struct type *type) { - LONGEST previous_high = 0; /* unnecessary initialization - keeps gcc -Wall happy */ + LONGEST previous_high = 0; /* Unnecessary initialization + keeps gcc -Wall happy. */ int len, i; struct type *range; @@ -371,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: @@ -425,10 +428,9 @@ m2_is_long_set_of_type (struct type *type, struct type **of_type) } static int -m2_long_set (struct type *type, struct ui_file *stream, int show, int level) +m2_long_set (struct type *type, struct ui_file *stream, int show, int level, + const struct type_print_options *flags) { - struct type *index_type; - struct type *range_type; struct type *of_type; int i; int len = TYPE_NFIELDS (type); @@ -437,28 +439,20 @@ 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 "); i = TYPE_N_BASECLASSES (type); if (m2_is_long_set_of_type (type, &of_type)) - m2_print_type (of_type, "", stream, show - 1, level); + m2_print_type (of_type, "", stream, show - 1, level, flags); else { fprintf_filtered(stream, "["); @@ -473,7 +467,7 @@ m2_long_set (struct type *type, struct ui_file *stream, int show, int level) } } else - /* i18n: Do not translate the "SET OF" part! */ + /* i18n: Do not translate the "SET OF" part! */ fprintf_filtered(stream, _("SET OF ")); return 1; @@ -515,7 +509,7 @@ m2_is_unbounded_array (struct type *type) static int m2_unbounded_array (struct type *type, struct ui_file *stream, int show, - int level) + int level, const struct type_print_options *flags) { if (m2_is_unbounded_array (type)) { @@ -523,7 +517,7 @@ m2_unbounded_array (struct type *type, struct ui_file *stream, int show, { fputs_filtered ("ARRAY OF ", stream); m2_print_type (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0)), - "", stream, 0, level); + "", stream, 0, level, flags); } return 1; } @@ -532,14 +526,14 @@ m2_unbounded_array (struct type *type, struct ui_file *stream, int show, void m2_record_fields (struct type *type, struct ui_file *stream, int show, - int level) + 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, " = "); } @@ -547,9 +541,9 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show, wrap_here (" "); if (show < 0) { - if (TYPE_CODE (type) == DECLARED_TYPE_STRUCT) + if (TYPE_CODE (type) == TYPE_CODE_STRUCT) fprintf_filtered (stream, "RECORD ... END "); - else if (TYPE_DECLARED_TYPE (type) == DECLARED_TYPE_UNION) + else if (TYPE_CODE (type) == TYPE_CODE_UNION) fprintf_filtered (stream, "CASE ... END "); } else if (show > 0) @@ -560,7 +554,7 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show, if (TYPE_CODE (type) == TYPE_CODE_STRUCT) fprintf_filtered (stream, "RECORD\n"); else if (TYPE_CODE (type) == TYPE_CODE_UNION) - /* i18n: Do not translate "CASE" and "OF" */ + /* i18n: Do not translate "CASE" and "OF". */ fprintf_filtered (stream, _("CASE OF\n")); for (i = TYPE_N_BASECLASSES (type); i < len; i++) @@ -572,7 +566,7 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show, fputs_filtered (" : ", stream); m2_print_type (TYPE_FIELD_TYPE (type, i), "", - stream, 0, level + 4); + stream, 0, level + 4, flags); if (TYPE_FIELD_PACKED (type, i)) { /* It is a bitfield. This code does not attempt @@ -593,15 +587,16 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show, void m2_enum (struct type *type, struct ui_file *stream, int show, int level) { - int lastval, i, len; + LONGEST lastval; + int i, len; 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); @@ -613,10 +608,11 @@ m2_enum (struct type *type, struct ui_file *stream, int show, int level) fprintf_filtered (stream, ", "); wrap_here (" "); fputs_filtered (TYPE_FIELD_NAME (type, i), stream); - if (lastval != TYPE_FIELD_BITPOS (type, i)) + if (lastval != TYPE_FIELD_ENUMVAL (type, i)) { - fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i)); - lastval = TYPE_FIELD_BITPOS (type, i); + fprintf_filtered (stream, " = %s", + plongest (TYPE_FIELD_ENUMVAL (type, i))); + lastval = TYPE_FIELD_ENUMVAL (type, i); } lastval++; }