diff options
Diffstat (limited to 'gdb/p-typeprint.c')
-rw-r--r-- | gdb/p-typeprint.c | 64 |
1 files changed, 33 insertions, 31 deletions
diff --git a/gdb/p-typeprint.c b/gdb/p-typeprint.c index 0facebfa9d1..73a0f2d1c79 100644 --- a/gdb/p-typeprint.c +++ b/gdb/p-typeprint.c @@ -75,6 +75,7 @@ pascal_print_type (struct type *type, char *varstring, struct ui_file *stream, fputs_filtered (" : ", stream); } + if (!(code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)) { @@ -117,7 +118,7 @@ pascal_print_type (struct type *type, char *varstring, struct ui_file *stream, static void pascal_type_print_derivation_info (struct ui_file *stream, struct type *type) { - char *name; + const char *name; int i; for (i = 0; i < TYPE_N_BASECLASSES (type); i++) @@ -193,7 +194,7 @@ void pascal_type_print_varspec_prefix (struct type *type, struct ui_file *stream, int show, int passed_a_ptr) { - char *name; + const char *name; if (type == 0) return; @@ -206,7 +207,7 @@ pascal_type_print_varspec_prefix (struct type *type, struct ui_file *stream, { case TYPE_CODE_PTR: fprintf_filtered (stream, "^"); - pascal_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1); + pascal_type_print_varspec_prefix (POINTER_TARGET_TYPE (type), stream, 0, 1); break; /* pointer should be handled normally in pascal */ case TYPE_CODE_MEMBER: @@ -251,7 +252,7 @@ pascal_type_print_varspec_prefix (struct type *type, struct ui_file *stream, if (passed_a_ptr) fprintf_filtered (stream, "("); - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) + if (TYPE_CODE (FUNCTION_RETURN_VALUE (type)) != TYPE_CODE_VOID) { fprintf_filtered (stream, "function "); } @@ -263,16 +264,17 @@ pascal_type_print_varspec_prefix (struct type *type, struct ui_file *stream, break; case TYPE_CODE_ARRAY: +#if TYPEFIX if (passed_a_ptr) fprintf_filtered (stream, "("); fprintf_filtered (stream, "array "); - if (TYPE_LENGTH (type) >= 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0 - && TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED) + if (TYPE_LENGTH (type) >= 0 && TYPE_LENGTH (ARRAY_ELEMENT_TYPE (type)) > 0) fprintf_filtered (stream, "[%d..%d] ", TYPE_ARRAY_LOWER_BOUND_VALUE (type), TYPE_ARRAY_UPPER_BOUND_VALUE (type) ); fprintf_filtered (stream, "of "); +#endif break; case TYPE_CODE_UNDEF: @@ -312,7 +314,7 @@ pascal_type_print_args (struct type *type, struct ui_file *stream) args = TYPE_ARG_TYPES (type); if (args != NULL) { - if ((args[1] != NULL && args[1]->code != TYPE_CODE_VOID) || + if ((args[1] != NULL && TYPE_CODE(args[1]) != TYPE_CODE_VOID) || (args[2] != NULL)) { fprintf_filtered (stream, "("); @@ -324,7 +326,7 @@ pascal_type_print_args (struct type *type, struct ui_file *stream) else { for (i = 1; - args[i] != NULL && args[i]->code != TYPE_CODE_VOID; + args[i] != NULL && TYPE_CODE(args[i]) != TYPE_CODE_VOID; i++) { pascal_print_type (args[i], "", stream, -1, 0); @@ -332,14 +334,14 @@ pascal_type_print_args (struct type *type, struct ui_file *stream) { fprintf_filtered (stream, "..."); } - else if (args[i + 1]->code != TYPE_CODE_VOID) + else if (TYPE_CODE(args[i + 1]) != TYPE_CODE_VOID) { fprintf_filtered (stream, ","); wrap_here (" "); } } } - if ((args[1] != NULL && args[1]->code != TYPE_CODE_VOID) || + if ((args[1] != NULL && TYPE_CODE(args[1]) != TYPE_CODE_VOID) || (args[2] != NULL)) { fprintf_filtered (stream, ")"); @@ -425,7 +427,7 @@ pascal_type_print_varspec_suffix (struct type *type, struct ui_file *stream, case TYPE_CODE_PTR: case TYPE_CODE_REF: - pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0); + pascal_type_print_varspec_suffix (POINTER_TARGET_TYPE (type), stream, 0, 1, 0); break; case TYPE_CODE_FUNC: @@ -433,12 +435,12 @@ pascal_type_print_varspec_suffix (struct type *type, struct ui_file *stream, fprintf_filtered (stream, ")"); if (!demangled_args) pascal_print_func_args (type, stream); - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) + if (TYPE_CODE (FUNCTION_RETURN_VALUE (type)) != TYPE_CODE_VOID) { fprintf_filtered (stream, " : "); - pascal_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0); - pascal_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0); - pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, + pascal_type_print_varspec_prefix (FUNCTION_RETURN_VALUE (type), stream, 0, 0); + pascal_type_print_base (FUNCTION_RETURN_VALUE (type), stream, show, 0); + pascal_type_print_varspec_suffix (FUNCTION_RETURN_VALUE (type), stream, 0, passed_a_ptr, 0); } break; @@ -507,7 +509,7 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, } /* void pointer */ - if ((TYPE_CODE (type) == TYPE_CODE_PTR) && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_VOID)) + if ((TYPE_CODE (type) == TYPE_CODE_PTR) && (TYPE_CODE (POINTER_TARGET_TYPE (type)) == TYPE_CODE_VOID)) { fprintf_filtered (stream, TYPE_NAME (type) ? TYPE_NAME (type) : "pointer"); @@ -527,10 +529,12 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, switch (TYPE_CODE (type)) { - case TYPE_CODE_TYPEDEF: + case TYPE_CODE_REF: case TYPE_CODE_PTR: + pascal_type_print_base (POINTER_TARGET_TYPE (type), stream, show, level); + break; + case TYPE_CODE_TYPEDEF: case TYPE_CODE_MEMBER: - case TYPE_CODE_REF: /* case TYPE_CODE_FUNC: case TYPE_CODE_METHOD: */ pascal_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level); @@ -540,7 +544,7 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, /* pascal_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0); pascal_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level); pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0); */ - pascal_print_type (TYPE_TARGET_TYPE (type), NULL, stream, 0, 0); + pascal_print_type (ARRAY_ELEMENT_TYPE (type), NULL, stream, 0, 0); break; case TYPE_CODE_FUNC: @@ -678,7 +682,7 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i); int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i); char *method_name = TYPE_FN_FIELDLIST_NAME (type, i); - char *name = type_name_no_tag (type); + const char *name = type_name_no_tag (type); /* this is GNU C++ specific how can we know constructor/destructor? It might work for GNU pascal */ @@ -787,7 +791,7 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, else if (show > 0 || TYPE_TAG_NAME (type) == NULL) { fprintf_filtered (stream, "("); - len = TYPE_NFIELDS (type); + len = ENUM_NUM_VALUES (type); lastval = 0; for (i = 0; i < len; i++) { @@ -795,11 +799,11 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, if (i) fprintf_filtered (stream, ", "); wrap_here (" "); - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); - if (lastval != TYPE_FIELD_BITPOS (type, i)) + fputs_filtered (ENUM_VALUE_NAME (type, i), stream); + if (lastval != ENUM_VALUE_VALUE (type, i)) { - fprintf_filtered (stream, " := %d", TYPE_FIELD_BITPOS (type, i)); - lastval = TYPE_FIELD_BITPOS (type, i); + fprintf_filtered (stream, " := %d", ENUM_VALUE_VALUE (type, i)); + lastval = ENUM_VALUE_VALUE (type, i); } lastval++; } @@ -822,21 +826,19 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, /* this probably does not work for enums */ case TYPE_CODE_RANGE: { - struct type *target = TYPE_TARGET_TYPE (type); + struct type *target = RANGE_INDEX_TYPE (type); if (target == NULL) target = builtin_type_long; - print_type_scalar (target, TYPE_LOW_BOUND (type), stream); + print_type_scalar (target, RANGE_LOWER_BOUND (type), stream); fputs_filtered ("..", stream); - print_type_scalar (target, TYPE_HIGH_BOUND (type), stream); + print_type_scalar (target, RANGE_UPPER_BOUND (type), stream); } break; - case TYPE_CODE_SET: fputs_filtered ("set of ", stream); - pascal_print_type (TYPE_INDEX_TYPE (type), "", stream, + pascal_print_type ((struct type *)SET_RANGE_TYPE (type), "", stream, show - 1, level); break; - default: /* Handle types not explicitly handled by the other cases, such as fundamental types. For these, just print whatever |