Index: gdb/p-typeprint.c |
diff --git a/gdb/p-typeprint.c b/gdb/p-typeprint.c |
index a00f5b32d9f41da617a54aec63e6abc618141d38..f26b9906534c2b320f34e702e3747bd4e23488c5 100644 |
--- a/gdb/p-typeprint.c |
+++ b/gdb/p-typeprint.c |
@@ -1,5 +1,5 @@ |
/* Support for printing Pascal types for GDB, the GNU debugger. |
- Copyright (C) 2000-2002, 2006-2012 Free Software Foundation, Inc. |
+ Copyright (C) 2000-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -31,25 +31,25 @@ |
#include "p-lang.h" |
#include "typeprint.h" |
#include "gdb-demangle.h" |
-#include "gdb_string.h" |
+#include <string.h> |
#include <errno.h> |
#include <ctype.h> |
static void pascal_type_print_varspec_suffix (struct type *, struct ui_file *, |
- int, int, int); |
+ int, int, int, |
+ const struct type_print_options *); |
static void pascal_type_print_derivation_info (struct ui_file *, |
struct type *); |
-void pascal_type_print_varspec_prefix (struct type *, struct ui_file *, |
- int, int); |
/* LEVEL is the depth to indent lines by. */ |
void |
pascal_print_type (struct type *type, const char *varstring, |
- struct ui_file *stream, int show, int level) |
+ struct ui_file *stream, int show, int level, |
+ const struct type_print_options *flags) |
{ |
enum type_code code; |
int demangled_args; |
@@ -62,7 +62,7 @@ pascal_print_type (struct type *type, const char *varstring, |
if ((code == TYPE_CODE_FUNC |
|| code == TYPE_CODE_METHOD)) |
{ |
- pascal_type_print_varspec_prefix (type, stream, show, 0); |
+ pascal_type_print_varspec_prefix (type, stream, show, 0, flags); |
} |
/* first the name */ |
fputs_filtered (varstring, stream); |
@@ -77,15 +77,16 @@ pascal_print_type (struct type *type, const char *varstring, |
if (!(code == TYPE_CODE_FUNC |
|| code == TYPE_CODE_METHOD)) |
{ |
- pascal_type_print_varspec_prefix (type, stream, show, 0); |
+ pascal_type_print_varspec_prefix (type, stream, show, 0, flags); |
} |
- pascal_type_print_base (type, stream, show, level); |
+ pascal_type_print_base (type, stream, show, level, flags); |
/* For demangled function names, we have the arglist as part of the name, |
so don't print an additional pair of ()'s. */ |
demangled_args = varstring ? strchr (varstring, '(') != NULL : 0; |
- pascal_type_print_varspec_suffix (type, stream, show, 0, demangled_args); |
+ pascal_type_print_varspec_suffix (type, stream, show, 0, demangled_args, |
+ flags); |
} |
@@ -205,7 +206,8 @@ pascal_type_print_method_args (const char *physname, const char *methodname, |
void |
pascal_type_print_varspec_prefix (struct type *type, struct ui_file *stream, |
- int show, int passed_a_ptr) |
+ int show, int passed_a_ptr, |
+ const struct type_print_options *flags) |
{ |
if (type == 0) |
return; |
@@ -219,7 +221,8 @@ 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 (TYPE_TARGET_TYPE (type), stream, 0, 1, |
+ flags); |
break; /* Pointer should be handled normally |
in pascal. */ |
@@ -239,13 +242,14 @@ pascal_type_print_varspec_prefix (struct type *type, struct ui_file *stream, |
{ |
fprintf_filtered (stream, " "); |
pascal_type_print_base (TYPE_DOMAIN_TYPE (type), |
- stream, 0, passed_a_ptr); |
+ stream, 0, passed_a_ptr, flags); |
fprintf_filtered (stream, "::"); |
} |
break; |
case TYPE_CODE_REF: |
- pascal_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1); |
+ pascal_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1, |
+ flags); |
fprintf_filtered (stream, "&"); |
break; |
@@ -289,7 +293,6 @@ pascal_type_print_varspec_prefix (struct type *type, struct ui_file *stream, |
case TYPE_CODE_SET: |
case TYPE_CODE_RANGE: |
case TYPE_CODE_STRING: |
- case TYPE_CODE_BITSTRING: |
case TYPE_CODE_COMPLEX: |
case TYPE_CODE_TYPEDEF: |
/* These types need no prefix. They are listed here so that |
@@ -302,7 +305,8 @@ pascal_type_print_varspec_prefix (struct type *type, struct ui_file *stream, |
} |
static void |
-pascal_print_func_args (struct type *type, struct ui_file *stream) |
+pascal_print_func_args (struct type *type, struct ui_file *stream, |
+ const struct type_print_options *flags) |
{ |
int i, len = TYPE_NFIELDS (type); |
@@ -324,7 +328,7 @@ pascal_print_func_args (struct type *type, struct ui_file *stream) |
} */ |
pascal_print_type (TYPE_FIELD_TYPE (type, i), "" /* TYPE_FIELD_NAME |
seems invalid! */ |
- ,stream, -1, 0); |
+ ,stream, -1, 0, flags); |
} |
if (len) |
{ |
@@ -339,7 +343,8 @@ pascal_print_func_args (struct type *type, struct ui_file *stream) |
static void |
pascal_type_print_varspec_suffix (struct type *type, struct ui_file *stream, |
int show, int passed_a_ptr, |
- int demangled_args) |
+ int demangled_args, |
+ const struct type_print_options *flags) |
{ |
if (type == 0) |
return; |
@@ -366,32 +371,34 @@ pascal_type_print_varspec_suffix (struct type *type, struct ui_file *stream, |
{ |
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); |
+ stream, 0, 0, flags); |
+ pascal_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0, |
+ flags); |
pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, |
- passed_a_ptr, 0); |
+ passed_a_ptr, 0, flags); |
} |
break; |
case TYPE_CODE_PTR: |
case TYPE_CODE_REF: |
pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), |
- stream, 0, 1, 0); |
+ stream, 0, 1, 0, flags); |
break; |
case TYPE_CODE_FUNC: |
if (passed_a_ptr) |
fprintf_filtered (stream, ")"); |
if (!demangled_args) |
- pascal_print_func_args (type, stream); |
+ pascal_print_func_args (type, stream, flags); |
if (TYPE_CODE (TYPE_TARGET_TYPE (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); |
+ stream, 0, 0, flags); |
+ pascal_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0, |
+ flags); |
pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, |
- passed_a_ptr, 0); |
+ passed_a_ptr, 0, flags); |
} |
break; |
@@ -408,7 +415,6 @@ pascal_type_print_varspec_suffix (struct type *type, struct ui_file *stream, |
case TYPE_CODE_SET: |
case TYPE_CODE_RANGE: |
case TYPE_CODE_STRING: |
- case TYPE_CODE_BITSTRING: |
case TYPE_CODE_COMPLEX: |
case TYPE_CODE_TYPEDEF: |
/* These types do not need a suffix. They are listed so that |
@@ -438,11 +444,11 @@ pascal_type_print_varspec_suffix (struct type *type, struct ui_file *stream, |
void |
pascal_type_print_base (struct type *type, struct ui_file *stream, int show, |
- int level) |
+ int level, const struct type_print_options *flags) |
{ |
int i; |
int len; |
- int lastval; |
+ LONGEST lastval; |
enum |
{ |
s_none, s_public, s_private, s_protected |
@@ -484,7 +490,8 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, |
case TYPE_CODE_REF: |
/* case TYPE_CODE_FUNC: |
case TYPE_CODE_METHOD: */ |
- pascal_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level); |
+ pascal_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level, |
+ flags); |
break; |
case TYPE_CODE_ARRAY: |
@@ -494,7 +501,7 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, |
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 (TYPE_TARGET_TYPE (type), NULL, stream, 0, 0, flags); |
break; |
case TYPE_CODE_FUNC: |
@@ -603,7 +610,7 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, |
fprintf_filtered (stream, "static "); |
pascal_print_type (TYPE_FIELD_TYPE (type, i), |
TYPE_FIELD_NAME (type, i), |
- stream, show - 1, level + 4); |
+ stream, show - 1, level + 4, flags); |
if (!field_is_static (&TYPE_FIELD (type, i)) |
&& TYPE_FIELD_PACKED (type, i)) |
{ |
@@ -789,11 +796,7 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show, |
case TYPE_CODE_SET: |
fputs_filtered ("set of ", stream); |
pascal_print_type (TYPE_INDEX_TYPE (type), "", stream, |
- show - 1, level); |
- break; |
- |
- case TYPE_CODE_BITSTRING: |
- fputs_filtered ("BitString", stream); |
+ show - 1, level, flags); |
break; |
case TYPE_CODE_STRING: |