gdb/fortran: Print 'void' type in lower case
[external/binutils.git] / gdb / f-typeprint.c
1 /* Support for printing Fortran types for GDB, the GNU debugger.
2
3    Copyright (C) 1986-2019 Free Software Foundation, Inc.
4
5    Contributed by Motorola.  Adapted from the C version by Farooq Butt
6    (fmbutt@engage.sps.mot.com).
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23 #include "defs.h"
24 #include "gdb_obstack.h"
25 #include "bfd.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "expression.h"
29 #include "value.h"
30 #include "gdbcore.h"
31 #include "target.h"
32 #include "f-lang.h"
33 #include "typeprint.h"
34
35 #if 0                           /* Currently unused.  */
36 static void f_type_print_args (struct type *, struct ui_file *);
37 #endif
38
39 static void f_type_print_varspec_suffix (struct type *, struct ui_file *, int,
40                                          int, int, int);
41
42 void f_type_print_varspec_prefix (struct type *, struct ui_file *,
43                                   int, int);
44
45 void f_type_print_base (struct type *, struct ui_file *, int, int);
46 \f
47
48 /* LEVEL is the depth to indent lines by.  */
49
50 void
51 f_print_type (struct type *type, const char *varstring, struct ui_file *stream,
52               int show, int level, const struct type_print_options *flags)
53 {
54   enum type_code code;
55
56   if (type_not_associated (type))
57     {
58       val_print_not_associated (stream);
59       return;
60     }
61
62   if (type_not_allocated (type))
63     {
64       val_print_not_allocated (stream);
65       return;
66     }
67
68   f_type_print_base (type, stream, show, level);
69   code = TYPE_CODE (type);
70   if ((varstring != NULL && *varstring != '\0')
71   /* Need a space if going to print stars or brackets;
72      but not if we will print just a type name.  */
73       || ((show > 0 || TYPE_NAME (type) == 0)
74           && (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC
75               || code == TYPE_CODE_METHOD
76               || code == TYPE_CODE_ARRAY
77               || code == TYPE_CODE_REF)))
78     fputs_filtered (" ", stream);
79   f_type_print_varspec_prefix (type, stream, show, 0);
80
81   if (varstring != NULL)
82     {
83       int demangled_args;
84
85       fputs_filtered (varstring, stream);
86
87       /* For demangled function names, we have the arglist as part of the name,
88          so don't print an additional pair of ()'s.  */
89
90       demangled_args = (*varstring != '\0'
91                         && varstring[strlen (varstring) - 1] == ')');
92       f_type_print_varspec_suffix (type, stream, show, 0, demangled_args, 0);
93    }
94 }
95
96 /* Print any asterisks or open-parentheses needed before the
97    variable name (to describe its type).
98
99    On outermost call, pass 0 for PASSED_A_PTR.
100    On outermost call, SHOW > 0 means should ignore
101    any typename for TYPE and show its details.
102    SHOW is always zero on recursive calls.  */
103
104 void
105 f_type_print_varspec_prefix (struct type *type, struct ui_file *stream,
106                              int show, int passed_a_ptr)
107 {
108   if (type == 0)
109     return;
110
111   if (TYPE_NAME (type) && show <= 0)
112     return;
113
114   QUIT;
115
116   switch (TYPE_CODE (type))
117     {
118     case TYPE_CODE_PTR:
119       f_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
120       break;
121
122     case TYPE_CODE_FUNC:
123       f_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
124       if (passed_a_ptr)
125         fprintf_filtered (stream, "(");
126       break;
127
128     case TYPE_CODE_ARRAY:
129       f_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
130       break;
131
132     case TYPE_CODE_UNDEF:
133     case TYPE_CODE_STRUCT:
134     case TYPE_CODE_UNION:
135     case TYPE_CODE_ENUM:
136     case TYPE_CODE_INT:
137     case TYPE_CODE_FLT:
138     case TYPE_CODE_VOID:
139     case TYPE_CODE_ERROR:
140     case TYPE_CODE_CHAR:
141     case TYPE_CODE_BOOL:
142     case TYPE_CODE_SET:
143     case TYPE_CODE_RANGE:
144     case TYPE_CODE_STRING:
145     case TYPE_CODE_METHOD:
146     case TYPE_CODE_REF:
147     case TYPE_CODE_COMPLEX:
148     case TYPE_CODE_TYPEDEF:
149       /* These types need no prefix.  They are listed here so that
150          gcc -Wall will reveal any types that haven't been handled.  */
151       break;
152     }
153 }
154
155 /* Print any array sizes, function arguments or close parentheses
156    needed after the variable name (to describe its type).
157    Args work like c_type_print_varspec_prefix.  */
158
159 static void
160 f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
161                              int show, int passed_a_ptr, int demangled_args,
162                              int arrayprint_recurse_level)
163 {
164   /* No static variables are permitted as an error call may occur during
165      execution of this function.  */
166
167   if (type == 0)
168     return;
169
170   if (TYPE_NAME (type) && show <= 0)
171     return;
172
173   QUIT;
174
175   switch (TYPE_CODE (type))
176     {
177     case TYPE_CODE_ARRAY:
178       arrayprint_recurse_level++;
179
180       if (arrayprint_recurse_level == 1)
181         fprintf_filtered (stream, "(");
182
183       if (type_not_associated (type))
184         val_print_not_associated (stream);
185       else if (type_not_allocated (type))
186         val_print_not_allocated (stream);
187       else
188         {
189           if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY)
190             f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
191                                         0, 0, arrayprint_recurse_level);
192
193           LONGEST lower_bound = f77_get_lowerbound (type);
194
195           if (lower_bound != 1) /* Not the default.  */
196             fprintf_filtered (stream, "%s:", plongest (lower_bound));
197
198           /* Make sure that, if we have an assumed size array, we
199              print out a warning and print the upperbound as '*'.  */
200
201           if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
202             fprintf_filtered (stream, "*");
203           else
204             {
205               LONGEST upper_bound = f77_get_upperbound (type);
206
207               fputs_filtered (plongest (upper_bound), stream);
208             }
209
210           if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY)
211             f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
212                                         0, 0, arrayprint_recurse_level);
213         }
214       if (arrayprint_recurse_level == 1)
215         fprintf_filtered (stream, ")");
216       else
217         fprintf_filtered (stream, ",");
218       arrayprint_recurse_level--;
219       break;
220
221     case TYPE_CODE_PTR:
222     case TYPE_CODE_REF:
223       f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0,
224                                    arrayprint_recurse_level);
225       fprintf_filtered (stream, ")");
226       break;
227
228     case TYPE_CODE_FUNC:
229       f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
230                                    passed_a_ptr, 0, arrayprint_recurse_level);
231       if (passed_a_ptr)
232         fprintf_filtered (stream, ")");
233
234       fprintf_filtered (stream, "()");
235       break;
236
237     case TYPE_CODE_UNDEF:
238     case TYPE_CODE_STRUCT:
239     case TYPE_CODE_UNION:
240     case TYPE_CODE_ENUM:
241     case TYPE_CODE_INT:
242     case TYPE_CODE_FLT:
243     case TYPE_CODE_VOID:
244     case TYPE_CODE_ERROR:
245     case TYPE_CODE_CHAR:
246     case TYPE_CODE_BOOL:
247     case TYPE_CODE_SET:
248     case TYPE_CODE_RANGE:
249     case TYPE_CODE_STRING:
250     case TYPE_CODE_METHOD:
251     case TYPE_CODE_COMPLEX:
252     case TYPE_CODE_TYPEDEF:
253       /* These types do not need a suffix.  They are listed so that
254          gcc -Wall will report types that may not have been considered.  */
255       break;
256     }
257 }
258
259 /* Print the name of the type (or the ultimate pointer target,
260    function value or array element), or the description of a
261    structure or union.
262
263    SHOW nonzero means don't print this type as just its name;
264    show its real definition even if it has a name.
265    SHOW zero means print just typename or struct tag if there is one
266    SHOW negative means abbreviate structure elements.
267    SHOW is decremented for printing of structure elements.
268
269    LEVEL is the depth to indent by.
270    We increase it for some recursive calls.  */
271
272 void
273 f_type_print_base (struct type *type, struct ui_file *stream, int show,
274                    int level)
275 {
276   int index;
277
278   QUIT;
279
280   wrap_here ("    ");
281   if (type == NULL)
282     {
283       fputs_filtered ("<type unknown>", stream);
284       return;
285     }
286
287   /* When SHOW is zero or less, and there is a valid type name, then always
288      just print the type name directly from the type.  */
289
290   if ((show <= 0) && (TYPE_NAME (type) != NULL))
291     {
292       const char *prefix = "";
293       if (TYPE_CODE (type) == TYPE_CODE_UNION)
294         prefix = "Type, C_Union :: ";
295       else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
296         prefix = "Type ";
297       fprintfi_filtered (level, stream, "%s%s", prefix, TYPE_NAME (type));
298       return;
299     }
300
301   if (TYPE_CODE (type) != TYPE_CODE_TYPEDEF)
302     type = check_typedef (type);
303
304   switch (TYPE_CODE (type))
305     {
306     case TYPE_CODE_TYPEDEF:
307       f_type_print_base (TYPE_TARGET_TYPE (type), stream, 0, level);
308       break;
309
310     case TYPE_CODE_ARRAY:
311       f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
312       break;
313     case TYPE_CODE_FUNC:
314       if (TYPE_TARGET_TYPE (type) == NULL)
315         type_print_unknown_return_type (stream);
316       else
317         f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
318       break;
319
320     case TYPE_CODE_PTR:
321       fprintfi_filtered (level, stream, "PTR TO -> ( ");
322       f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0);
323       break;
324
325     case TYPE_CODE_REF:
326       fprintfi_filtered (level, stream, "REF TO -> ( ");
327       f_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0);
328       break;
329
330     case TYPE_CODE_VOID:
331       {
332         gdbarch *gdbarch = get_type_arch (type);
333         struct type *void_type = builtin_f_type (gdbarch)->builtin_void;
334         fprintfi_filtered (level, stream, "%s", TYPE_NAME (void_type));
335       }
336       break;
337
338     case TYPE_CODE_UNDEF:
339       fprintfi_filtered (level, stream, "struct <unknown>");
340       break;
341
342     case TYPE_CODE_ERROR:
343       fprintfi_filtered (level, stream, "%s", TYPE_ERROR_NAME (type));
344       break;
345
346     case TYPE_CODE_RANGE:
347       /* This should not occur.  */
348       fprintfi_filtered (level, stream, "<range type>");
349       break;
350
351     case TYPE_CODE_CHAR:
352     case TYPE_CODE_INT:
353       /* There may be some character types that attempt to come
354          through as TYPE_CODE_INT since dbxstclass.h is so
355          C-oriented, we must change these to "character" from "char".  */
356
357       if (strcmp (TYPE_NAME (type), "char") == 0)
358         fprintfi_filtered (level, stream, "character");
359       else
360         goto default_case;
361       break;
362
363     case TYPE_CODE_STRING:
364       /* Strings may have dynamic upperbounds (lengths) like arrays.  */
365
366       if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
367         fprintfi_filtered (level, stream, "character*(*)");
368       else
369         {
370           LONGEST upper_bound = f77_get_upperbound (type);
371
372           fprintf_filtered (stream, "character*%s", pulongest (upper_bound));
373         }
374       break;
375
376     case TYPE_CODE_STRUCT:
377     case TYPE_CODE_UNION:
378       if (TYPE_CODE (type) == TYPE_CODE_UNION)
379         fprintfi_filtered (level, stream, "Type, C_Union :: ");
380       else
381         fprintfi_filtered (level, stream, "Type ");
382       fputs_filtered (TYPE_NAME (type), stream);
383       /* According to the definition,
384          we only print structure elements in case show > 0.  */
385       if (show > 0)
386         {
387           fputs_filtered ("\n", stream);
388           for (index = 0; index < TYPE_NFIELDS (type); index++)
389             {
390               f_type_print_base (TYPE_FIELD_TYPE (type, index), stream,
391                                  show - 1, level + 4);
392               fputs_filtered (" :: ", stream);
393               fputs_filtered (TYPE_FIELD_NAME (type, index), stream);
394               f_type_print_varspec_suffix (TYPE_FIELD_TYPE (type, index),
395                                            stream, show - 1, 0, 0, 0);
396               fputs_filtered ("\n", stream);
397             }
398           fprintfi_filtered (level, stream, "End Type ");
399           fputs_filtered (TYPE_NAME (type), stream);
400         }
401       break;
402
403     case TYPE_CODE_MODULE:
404       fprintfi_filtered (level, stream, "module %s", TYPE_NAME (type));
405       break;
406
407     default_case:
408     default:
409       /* Handle types not explicitly handled by the other cases,
410          such as fundamental types.  For these, just print whatever
411          the type name is, as recorded in the type itself.  If there
412          is no type name, then complain.  */
413       if (TYPE_NAME (type) != NULL)
414         fprintfi_filtered (level, stream, "%s", TYPE_NAME (type));
415       else
416         error (_("Invalid type code (%d) in symbol table."), TYPE_CODE (type));
417       break;
418     }
419 }