OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.2/] [gdb/] [c-typeprint.c] - Blame information for rev 445

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
/* Support for printing C and C++ types for GDB, the GNU debugger.
2
   Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1998,
3
   1999, 2000, 2001, 2002, 2003, 2006, 2007, 2008, 2009, 2010
4
   Free Software Foundation, Inc.
5
 
6
   This file is part of GDB.
7
 
8
   This program is free software; you can redistribute it and/or modify
9
   it under the terms of the GNU General Public License as published by
10
   the Free Software Foundation; either version 3 of the License, or
11
   (at your option) any later version.
12
 
13
   This program is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
 
18
   You should have received a copy of the GNU General Public License
19
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
 
21
#include "defs.h"
22
#include "gdb_obstack.h"
23
#include "bfd.h"                /* Binary File Description */
24
#include "symtab.h"
25
#include "gdbtypes.h"
26
#include "expression.h"
27
#include "value.h"
28
#include "gdbcore.h"
29
#include "target.h"
30
#include "language.h"
31
#include "demangle.h"
32
#include "c-lang.h"
33
#include "typeprint.h"
34
#include "cp-abi.h"
35
#include "jv-lang.h"
36
 
37
#include "gdb_string.h"
38
#include <errno.h>
39
 
40
static void cp_type_print_method_args (struct type *mtype, char *prefix,
41
                                       char *varstring, int staticp,
42
                                       struct ui_file *stream);
43
 
44
static void cp_type_print_derivation_info (struct ui_file *, struct type *);
45
 
46
static void c_type_print_varspec_prefix (struct type *, struct ui_file *, int,
47
                                         int, int);
48
 
49
/* Print "const", "volatile", or address space modifiers. */
50
static void c_type_print_modifier (struct type *, struct ui_file *,
51
                                   int, int);
52
 
53
 
54
 
55
 
56
/* LEVEL is the depth to indent lines by.  */
57
 
58
void
59
c_print_type (struct type *type, const char *varstring, struct ui_file *stream,
60
              int show, int level)
61
{
62
  enum type_code code;
63
  int demangled_args;
64
  int need_post_space;
65
 
66
  if (show > 0)
67
    CHECK_TYPEDEF (type);
68
 
69
  c_type_print_base (type, stream, show, level);
70
  code = TYPE_CODE (type);
71
  if ((varstring != NULL && *varstring != '\0')
72
  /* Need a space if going to print stars or brackets;
73
     but not if we will print just a type name.  */
74
      || ((show > 0 || TYPE_NAME (type) == 0)
75
          && (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC
76
              || code == TYPE_CODE_METHOD
77
              || code == TYPE_CODE_ARRAY
78
              || code == TYPE_CODE_MEMBERPTR
79
              || code == TYPE_CODE_METHODPTR
80
              || code == TYPE_CODE_REF)))
81
    fputs_filtered (" ", stream);
82
  need_post_space = (varstring != NULL && strcmp (varstring, "") != 0);
83
  c_type_print_varspec_prefix (type, stream, show, 0, need_post_space);
84
 
85
  if (varstring != NULL)
86
    {
87
      fputs_filtered (varstring, stream);
88
 
89
      /* For demangled function names, we have the arglist as part of the name,
90
         so don't print an additional pair of ()'s */
91
 
92
      demangled_args = strchr (varstring, '(') != NULL;
93
      c_type_print_varspec_suffix (type, stream, show, 0, demangled_args);
94
    }
95
}
96
 
97
/* Print a typedef using C syntax.  TYPE is the underlying type.
98
   NEW_SYMBOL is the symbol naming the type.  STREAM is the stream on
99
   which to print.  */
100
 
101
void
102
c_print_typedef (struct type *type, struct symbol *new_symbol,
103
                 struct ui_file *stream)
104
{
105
  CHECK_TYPEDEF (type);
106
  fprintf_filtered (stream, "typedef ");
107
  type_print (type, "", stream, 0);
108
  if (TYPE_NAME ((SYMBOL_TYPE (new_symbol))) == 0
109
      || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))),
110
                 SYMBOL_LINKAGE_NAME (new_symbol)) != 0
111
      || TYPE_CODE (SYMBOL_TYPE (new_symbol)) == TYPE_CODE_TYPEDEF)
112
    fprintf_filtered (stream, " %s", SYMBOL_PRINT_NAME (new_symbol));
113
  fprintf_filtered (stream, ";\n");
114
}
115
 
116
/* If TYPE is a derived type, then print out derivation information.
117
   Print only the actual base classes of this type, not the base classes
118
   of the base classes.  I.E.  for the derivation hierarchy:
119
 
120
   class A { int a; };
121
   class B : public A {int b; };
122
   class C : public B {int c; };
123
 
124
   Print the type of class C as:
125
 
126
   class C : public B {
127
   int c;
128
   }
129
 
130
   Not as the following (like gdb used to), which is not legal C++ syntax for
131
   derived types and may be confused with the multiple inheritance form:
132
 
133
   class C : public B : public A {
134
   int c;
135
   }
136
 
137
   In general, gdb should try to print the types as closely as possible to
138
   the form that they appear in the source code.
139
   Note that in case of protected derivation gcc will not say 'protected'
140
   but 'private'. The HP's aCC compiler emits specific information for
141
   derivation via protected inheritance, so gdb can print it out */
142
 
143
static void
144
cp_type_print_derivation_info (struct ui_file *stream, struct type *type)
145
{
146
  char *name;
147
  int i;
148
 
149
  for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
150
    {
151
      fputs_filtered (i == 0 ? ": " : ", ", stream);
152
      fprintf_filtered (stream, "%s%s ",
153
                        BASETYPE_VIA_PUBLIC (type, i) ? "public"
154
               : (TYPE_FIELD_PROTECTED (type, i) ? "protected" : "private"),
155
                        BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : "");
156
      name = type_name_no_tag (TYPE_BASECLASS (type, i));
157
      fprintf_filtered (stream, "%s", name ? name : "(null)");
158
    }
159
  if (i > 0)
160
    {
161
      fputs_filtered (" ", stream);
162
    }
163
}
164
 
165
/* Print the C++ method arguments ARGS to the file STREAM.  */
166
 
167
static void
168
cp_type_print_method_args (struct type *mtype, char *prefix, char *varstring,
169
                           int staticp, struct ui_file *stream)
170
{
171
  struct field *args = TYPE_FIELDS (mtype);
172
  int nargs = TYPE_NFIELDS (mtype);
173
  int varargs = TYPE_VARARGS (mtype);
174
  int i;
175
 
176
  fprintf_symbol_filtered (stream, prefix, language_cplus, DMGL_ANSI);
177
  fprintf_symbol_filtered (stream, varstring, language_cplus, DMGL_ANSI);
178
  fputs_filtered ("(", stream);
179
 
180
  /* Skip the class variable.  */
181
  i = staticp ? 0 : 1;
182
  if (nargs > i)
183
    {
184
      while (i < nargs)
185
        {
186
          type_print (args[i++].type, "", stream, 0);
187
 
188
          if (i == nargs && varargs)
189
            fprintf_filtered (stream, ", ...");
190
          else if (i < nargs)
191
            fprintf_filtered (stream, ", ");
192
        }
193
    }
194
  else if (varargs)
195
    fprintf_filtered (stream, "...");
196
  else if (current_language->la_language == language_cplus)
197
    fprintf_filtered (stream, "void");
198
 
199
  fprintf_filtered (stream, ")");
200
 
201
  /* For non-static methods, read qualifiers from the type of
202
     THIS.  */
203
  if (!staticp)
204
    {
205
      struct type *domain;
206
 
207
      gdb_assert (nargs > 0);
208
      gdb_assert (TYPE_CODE (args[0].type) == TYPE_CODE_PTR);
209
      domain = TYPE_TARGET_TYPE (args[0].type);
210
 
211
      if (TYPE_CONST (domain))
212
        fprintf_filtered (stream, " const");
213
 
214
      if (TYPE_VOLATILE (domain))
215
        fprintf_filtered (stream, " volatile");
216
    }
217
}
218
 
219
 
220
/* Print any asterisks or open-parentheses needed before the
221
   variable name (to describe its type).
222
 
223
   On outermost call, pass 0 for PASSED_A_PTR.
224
   On outermost call, SHOW > 0 means should ignore
225
   any typename for TYPE and show its details.
226
   SHOW is always zero on recursive calls.
227
 
228
   NEED_POST_SPACE is non-zero when a space will be be needed
229
   between a trailing qualifier and a field, variable, or function
230
   name.  */
231
 
232
void
233
c_type_print_varspec_prefix (struct type *type, struct ui_file *stream,
234
                             int show, int passed_a_ptr, int need_post_space)
235
{
236
  char *name;
237
 
238
  if (type == 0)
239
    return;
240
 
241
  if (TYPE_NAME (type) && show <= 0)
242
    return;
243
 
244
  QUIT;
245
 
246
  switch (TYPE_CODE (type))
247
    {
248
    case TYPE_CODE_PTR:
249
      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 1, 1);
250
      fprintf_filtered (stream, "*");
251
      c_type_print_modifier (type, stream, 1, need_post_space);
252
      break;
253
 
254
    case TYPE_CODE_MEMBERPTR:
255
      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0);
256
      name = type_name_no_tag (TYPE_DOMAIN_TYPE (type));
257
      if (name)
258
        fputs_filtered (name, stream);
259
      else
260
        c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
261
      fprintf_filtered (stream, "::*");
262
      break;
263
 
264
    case TYPE_CODE_METHODPTR:
265
      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0);
266
      fprintf_filtered (stream, "(");
267
      name = type_name_no_tag (TYPE_DOMAIN_TYPE (type));
268
      if (name)
269
        fputs_filtered (name, stream);
270
      else
271
        c_type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0, passed_a_ptr);
272
      fprintf_filtered (stream, "::*");
273
      break;
274
 
275
    case TYPE_CODE_REF:
276
      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 1, 0);
277
      fprintf_filtered (stream, "&");
278
      c_type_print_modifier (type, stream, 1, need_post_space);
279
      break;
280
 
281
    case TYPE_CODE_METHOD:
282
    case TYPE_CODE_FUNC:
283
      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0);
284
      if (passed_a_ptr)
285
        fprintf_filtered (stream, "(");
286
      break;
287
 
288
    case TYPE_CODE_ARRAY:
289
      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0);
290
      if (passed_a_ptr)
291
        fprintf_filtered (stream, "(");
292
      break;
293
 
294
    case TYPE_CODE_TYPEDEF:
295
      c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0);
296
      break;
297
 
298
    case TYPE_CODE_UNDEF:
299
    case TYPE_CODE_STRUCT:
300
    case TYPE_CODE_UNION:
301
    case TYPE_CODE_ENUM:
302
    case TYPE_CODE_INT:
303
    case TYPE_CODE_FLT:
304
    case TYPE_CODE_VOID:
305
    case TYPE_CODE_ERROR:
306
    case TYPE_CODE_CHAR:
307
    case TYPE_CODE_BOOL:
308
    case TYPE_CODE_SET:
309
    case TYPE_CODE_RANGE:
310
    case TYPE_CODE_STRING:
311
    case TYPE_CODE_BITSTRING:
312
    case TYPE_CODE_COMPLEX:
313
    case TYPE_CODE_NAMESPACE:
314
    case TYPE_CODE_DECFLOAT:
315
      /* These types need no prefix.  They are listed here so that
316
         gcc -Wall will reveal any types that haven't been handled.  */
317
      break;
318
    default:
319
      error (_("type not handled in c_type_print_varspec_prefix()"));
320
      break;
321
    }
322
}
323
 
324
/* Print out "const" and "volatile" attributes.
325
   TYPE is a pointer to the type being printed out.
326
   STREAM is the output destination.
327
   NEED_SPACE = 1 indicates an initial white space is needed */
328
 
329
static void
330
c_type_print_modifier (struct type *type, struct ui_file *stream,
331
                       int need_pre_space, int need_post_space)
332
{
333
  int did_print_modifier = 0;
334
  const char *address_space_id;
335
 
336
  /* We don't print `const' qualifiers for references --- since all
337
     operators affect the thing referenced, not the reference itself,
338
     every reference is `const'.  */
339
  if (TYPE_CONST (type)
340
      && TYPE_CODE (type) != TYPE_CODE_REF)
341
    {
342
      if (need_pre_space)
343
        fprintf_filtered (stream, " ");
344
      fprintf_filtered (stream, "const");
345
      did_print_modifier = 1;
346
    }
347
 
348
  if (TYPE_VOLATILE (type))
349
    {
350
      if (did_print_modifier || need_pre_space)
351
        fprintf_filtered (stream, " ");
352
      fprintf_filtered (stream, "volatile");
353
      did_print_modifier = 1;
354
    }
355
 
356
  address_space_id = address_space_int_to_name (get_type_arch (type),
357
                                                TYPE_INSTANCE_FLAGS (type));
358
  if (address_space_id)
359
    {
360
      if (did_print_modifier || need_pre_space)
361
        fprintf_filtered (stream, " ");
362
      fprintf_filtered (stream, "@%s", address_space_id);
363
      did_print_modifier = 1;
364
    }
365
 
366
  if (did_print_modifier && need_post_space)
367
    fprintf_filtered (stream, " ");
368
}
369
 
370
 
371
/* Print out the arguments of TYPE, which should have TYPE_CODE_METHOD
372
   or TYPE_CODE_FUNC, to STREAM.  Artificial arguments, such as "this"
373
   in non-static methods, are displayed if SHOW_ARTIFICIAL is
374
   non-zero. LANGUAGE is the language in which TYPE was defined.  This is
375
   a necessary evil since this code is used by the C, C++, and Java
376
   backends. */
377
 
378
void
379
c_type_print_args (struct type *type, struct ui_file *stream,
380
                   int show_artificial, enum language language)
381
{
382
  int i, len;
383
  struct field *args;
384
  int printed_any = 0;
385
 
386
  fprintf_filtered (stream, "(");
387
  args = TYPE_FIELDS (type);
388
  len = TYPE_NFIELDS (type);
389
 
390
  for (i = 0; i < TYPE_NFIELDS (type); i++)
391
    {
392
      if (TYPE_FIELD_ARTIFICIAL (type, i) && !show_artificial)
393
        continue;
394
 
395
      if (printed_any)
396
        {
397
          fprintf_filtered (stream, ", ");
398
          wrap_here ("    ");
399
        }
400
 
401
      if (language == language_java)
402
        java_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0);
403
      else
404
        c_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0);
405
      printed_any = 1;
406
    }
407
 
408
  if (printed_any && TYPE_VARARGS (type))
409
    {
410
      /* Print out a trailing ellipsis for varargs functions.  Ignore
411
         TYPE_VARARGS if the function has no named arguments; that
412
         represents unprototyped (K&R style) C functions.  */
413
      if (printed_any && TYPE_VARARGS (type))
414
        {
415
          fprintf_filtered (stream, ", ");
416
          wrap_here ("    ");
417
          fprintf_filtered (stream, "...");
418
        }
419
    }
420
  else if (!printed_any
421
           && ((TYPE_PROTOTYPED (type) && language != language_java)
422
               || language == language_cplus))
423
    fprintf_filtered (stream, "void");
424
 
425
  fprintf_filtered (stream, ")");
426
}
427
 
428
 
429
/* Return true iff the j'th overloading of the i'th method of TYPE
430
   is a type conversion operator, like `operator int () { ... }'.
431
   When listing a class's methods, we don't print the return type of
432
   such operators.  */
433
static int
434
is_type_conversion_operator (struct type *type, int i, int j)
435
{
436
  /* I think the whole idea of recognizing type conversion operators
437
     by their name is pretty terrible.  But I don't think our present
438
     data structure gives us any other way to tell.  If you know of
439
     some other way, feel free to rewrite this function.  */
440
  char *name = TYPE_FN_FIELDLIST_NAME (type, i);
441
 
442
  if (strncmp (name, "operator", 8) != 0)
443
    return 0;
444
 
445
  name += 8;
446
  if (! strchr (" \t\f\n\r", *name))
447
    return 0;
448
 
449
  while (strchr (" \t\f\n\r", *name))
450
    name++;
451
 
452
  if (!('a' <= *name && *name <= 'z')
453
      && !('A' <= *name && *name <= 'Z')
454
      && *name != '_')
455
    /* If this doesn't look like the start of an identifier, then it
456
       isn't a type conversion operator.  */
457
    return 0;
458
  else if (strncmp (name, "new", 3) == 0)
459
    name += 3;
460
  else if (strncmp (name, "delete", 6) == 0)
461
    name += 6;
462
  else
463
    /* If it doesn't look like new or delete, it's a type conversion
464
       operator.  */
465
    return 1;
466
 
467
  /* Is that really the end of the name?  */
468
  if (('a' <= *name && *name <= 'z')
469
      || ('A' <= *name && *name <= 'Z')
470
      || ('0' <= *name && *name <= '9')
471
      || *name == '_')
472
    /* No, so the identifier following "operator" must be a type name,
473
       and this is a type conversion operator.  */
474
    return 1;
475
 
476
  /* That was indeed the end of the name, so it was `operator new' or
477
     `operator delete', neither of which are type conversion operators.  */
478
  return 0;
479
}
480
 
481
 
482
/* Given a C++ qualified identifier QID, strip off the qualifiers,
483
   yielding the unqualified name.  The return value is a pointer into
484
   the original string.
485
 
486
   It's a pity we don't have this information in some more structured
487
   form.  Even the author of this function feels that writing little
488
   parsers like this everywhere is stupid.  */
489
static char *
490
remove_qualifiers (char *qid)
491
{
492
  int quoted = 0;                /* zero if we're not in quotes;
493
                                   '"' if we're in a double-quoted string;
494
                                   '\'' if we're in a single-quoted string.  */
495
  int depth = 0;         /* number of unclosed parens we've seen */
496
  char *parenstack = (char *) alloca (strlen (qid));
497
  char *scan;
498
  char *last = 0;                /* The character after the rightmost
499
                                   `::' token we've seen so far.  */
500
 
501
  for (scan = qid; *scan; scan++)
502
    {
503
      if (quoted)
504
        {
505
          if (*scan == quoted)
506
            quoted = 0;
507
          else if (*scan == '\\' && *(scan + 1))
508
            scan++;
509
        }
510
      else if (scan[0] == ':' && scan[1] == ':')
511
        {
512
          /* If we're inside parenthesis (i.e., an argument list) or
513
             angle brackets (i.e., a list of template arguments), then
514
             we don't record the position of this :: token, since it's
515
             not relevant to the top-level structure we're trying
516
             to operate on.  */
517
          if (depth == 0)
518
            {
519
              last = scan + 2;
520
              scan++;
521
            }
522
        }
523
      else if (*scan == '"' || *scan == '\'')
524
        quoted = *scan;
525
      else if (*scan == '(')
526
        parenstack[depth++] = ')';
527
      else if (*scan == '[')
528
        parenstack[depth++] = ']';
529
      /* We're going to treat <> as a pair of matching characters,
530
         since we're more likely to see those in template id's than
531
         real less-than characters.  What a crock.  */
532
      else if (*scan == '<')
533
        parenstack[depth++] = '>';
534
      else if (*scan == ')' || *scan == ']' || *scan == '>')
535
        {
536
          if (depth > 0 && parenstack[depth - 1] == *scan)
537
            depth--;
538
          else
539
            {
540
              /* We're going to do a little error recovery here.  If we
541
                 don't find a match for *scan on the paren stack, but
542
                 there is something lower on the stack that does match, we
543
                 pop the stack to that point.  */
544
              int i;
545
 
546
              for (i = depth - 1; i >= 0; i--)
547
                if (parenstack[i] == *scan)
548
                  {
549
                    depth = i;
550
                    break;
551
                  }
552
            }
553
        }
554
    }
555
 
556
  if (last)
557
    return last;
558
  else
559
    /* We didn't find any :: tokens at the top level, so declare the
560
       whole thing an unqualified identifier.  */
561
    return qid;
562
}
563
 
564
 
565
/* Print any array sizes, function arguments or close parentheses
566
   needed after the variable name (to describe its type).
567
   Args work like c_type_print_varspec_prefix.  */
568
 
569
void
570
c_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
571
                             int show, int passed_a_ptr, int demangled_args)
572
{
573
  if (type == 0)
574
    return;
575
 
576
  if (TYPE_NAME (type) && show <= 0)
577
    return;
578
 
579
  QUIT;
580
 
581
  switch (TYPE_CODE (type))
582
    {
583
    case TYPE_CODE_ARRAY:
584
      if (passed_a_ptr)
585
        fprintf_filtered (stream, ")");
586
 
587
      fprintf_filtered (stream, "[");
588
      if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
589
        && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
590
        fprintf_filtered (stream, "%d",
591
                          (TYPE_LENGTH (type)
592
                           / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
593
      fprintf_filtered (stream, "]");
594
 
595
      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
596
                                   0, 0);
597
      break;
598
 
599
    case TYPE_CODE_MEMBERPTR:
600
      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
601
                                   0, 0);
602
      break;
603
 
604
    case TYPE_CODE_METHODPTR:
605
      fprintf_filtered (stream, ")");
606
      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
607
                                   0, 0);
608
      break;
609
 
610
    case TYPE_CODE_PTR:
611
    case TYPE_CODE_REF:
612
      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
613
                                   1, 0);
614
      break;
615
 
616
    case TYPE_CODE_METHOD:
617
    case TYPE_CODE_FUNC:
618
      if (passed_a_ptr)
619
        fprintf_filtered (stream, ")");
620
      if (!demangled_args)
621
        c_type_print_args (type, stream, 1, current_language->la_language);
622
      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
623
                                   passed_a_ptr, 0);
624
      break;
625
 
626
    case TYPE_CODE_TYPEDEF:
627
      c_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, show,
628
                                   passed_a_ptr, 0);
629
      break;
630
 
631
    case TYPE_CODE_UNDEF:
632
    case TYPE_CODE_STRUCT:
633
    case TYPE_CODE_UNION:
634
    case TYPE_CODE_ENUM:
635
    case TYPE_CODE_INT:
636
    case TYPE_CODE_FLT:
637
    case TYPE_CODE_VOID:
638
    case TYPE_CODE_ERROR:
639
    case TYPE_CODE_CHAR:
640
    case TYPE_CODE_BOOL:
641
    case TYPE_CODE_SET:
642
    case TYPE_CODE_RANGE:
643
    case TYPE_CODE_STRING:
644
    case TYPE_CODE_BITSTRING:
645
    case TYPE_CODE_COMPLEX:
646
    case TYPE_CODE_NAMESPACE:
647
    case TYPE_CODE_DECFLOAT:
648
      /* These types do not need a suffix.  They are listed so that
649
         gcc -Wall will report types that may not have been considered.  */
650
      break;
651
    default:
652
      error (_("type not handled in c_type_print_varspec_suffix()"));
653
      break;
654
    }
655
}
656
 
657
/* Print the name of the type (or the ultimate pointer target,
658
   function value or array element), or the description of a
659
   structure or union.
660
 
661
   SHOW positive means print details about the type (e.g. enum values),
662
   and print structure elements passing SHOW - 1 for show.
663
   SHOW negative means just print the type name or struct tag if there is one.
664
   If there is no name, print something sensible but concise like
665
   "struct {...}".
666
   SHOW zero means just print the type name or struct tag if there is one.
667
   If there is no name, print something sensible but not as concise like
668
   "struct {int x; int y;}".
669
 
670
   LEVEL is the number of spaces to indent by.
671
   We increase it for some recursive calls.  */
672
 
673
void
674
c_type_print_base (struct type *type, struct ui_file *stream, int show,
675
                   int level)
676
{
677
  int i;
678
  int len, real_len;
679
  int lastval;
680
  char *mangled_name;
681
  char *demangled_name;
682
  char *demangled_no_static;
683
  enum
684
    {
685
      s_none, s_public, s_private, s_protected
686
    }
687
  section_type;
688
  int need_access_label = 0;
689
  int j, len2;
690
 
691
  QUIT;
692
 
693
  wrap_here ("    ");
694
  if (type == NULL)
695
    {
696
      fputs_filtered (_("<type unknown>"), stream);
697
      return;
698
    }
699
 
700
  /* When SHOW is zero or less, and there is a valid type name, then always
701
     just print the type name directly from the type.  */
702
  /* If we have "typedef struct foo {. . .} bar;" do we want to print it
703
     as "struct foo" or as "bar"?  Pick the latter, because C++ folk tend
704
     to expect things like "class5 *foo" rather than "struct class5 *foo".  */
705
 
706
  if (show <= 0
707
      && TYPE_NAME (type) != NULL)
708
    {
709
      c_type_print_modifier (type, stream, 0, 1);
710
      fputs_filtered (TYPE_NAME (type), stream);
711
      return;
712
    }
713
 
714
  CHECK_TYPEDEF (type);
715
 
716
  switch (TYPE_CODE (type))
717
    {
718
    case TYPE_CODE_TYPEDEF:
719
    case TYPE_CODE_ARRAY:
720
    case TYPE_CODE_PTR:
721
    case TYPE_CODE_MEMBERPTR:
722
    case TYPE_CODE_REF:
723
    case TYPE_CODE_FUNC:
724
    case TYPE_CODE_METHOD:
725
    case TYPE_CODE_METHODPTR:
726
      c_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
727
      break;
728
 
729
    case TYPE_CODE_STRUCT:
730
      c_type_print_modifier (type, stream, 0, 1);
731
      if (TYPE_DECLARED_CLASS (type))
732
        fprintf_filtered (stream, "class ");
733
      else
734
        fprintf_filtered (stream, "struct ");
735
      goto struct_union;
736
 
737
    case TYPE_CODE_UNION:
738
      c_type_print_modifier (type, stream, 0, 1);
739
      fprintf_filtered (stream, "union ");
740
 
741
    struct_union:
742
 
743
      /* Print the tag if it exists.
744
       * The HP aCC compiler emits
745
       * a spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
746
       * tag  for unnamed struct/union/enum's, which we don't
747
       * want to print.
748
       */
749
      if (TYPE_TAG_NAME (type) != NULL
750
          && strncmp (TYPE_TAG_NAME (type), "{unnamed", 8))
751
        {
752
          fputs_filtered (TYPE_TAG_NAME (type), stream);
753
          if (show > 0)
754
            fputs_filtered (" ", stream);
755
        }
756
      wrap_here ("    ");
757
      if (show < 0)
758
        {
759
          /* If we just printed a tag name, no need to print anything else.  */
760
          if (TYPE_TAG_NAME (type) == NULL)
761
            fprintf_filtered (stream, "{...}");
762
        }
763
      else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
764
        {
765
          struct type *basetype;
766
          int vptr_fieldno;
767
 
768
          cp_type_print_derivation_info (stream, type);
769
 
770
          fprintf_filtered (stream, "{\n");
771
          if (TYPE_NFIELDS (type) == 0 && TYPE_NFN_FIELDS (type) == 0
772
              && TYPE_TYPEDEF_FIELD_COUNT (type) == 0)
773
            {
774
              if (TYPE_STUB (type))
775
                fprintfi_filtered (level + 4, stream, _("<incomplete type>\n"));
776
              else
777
                fprintfi_filtered (level + 4, stream, _("<no data fields>\n"));
778
            }
779
 
780
          /* Start off with no specific section type, so we can print
781
             one for the first field we find, and use that section type
782
             thereafter until we find another type. */
783
 
784
          section_type = s_none;
785
 
786
          /* For a class, if all members are private, there's no need
787
             for a "private:" label; similarly, for a struct or union
788
             masquerading as a class, if all members are public, there's
789
             no need for a "public:" label. */
790
 
791
          if (TYPE_DECLARED_CLASS (type))
792
            {
793
              QUIT;
794
              len = TYPE_NFIELDS (type);
795
              for (i = TYPE_N_BASECLASSES (type); i < len; i++)
796
                if (!TYPE_FIELD_PRIVATE (type, i))
797
                  {
798
                    need_access_label = 1;
799
                    break;
800
                  }
801
              QUIT;
802
              if (!need_access_label)
803
                {
804
                  len2 = TYPE_NFN_FIELDS (type);
805
                  for (j = 0; j < len2; j++)
806
                    {
807
                      len = TYPE_FN_FIELDLIST_LENGTH (type, j);
808
                      for (i = 0; i < len; i++)
809
                        if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, j), i))
810
                          {
811
                            need_access_label = 1;
812
                            break;
813
                          }
814
                      if (need_access_label)
815
                        break;
816
                    }
817
                }
818
            }
819
          else
820
            {
821
              QUIT;
822
              len = TYPE_NFIELDS (type);
823
              for (i = TYPE_N_BASECLASSES (type); i < len; i++)
824
                if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i))
825
                  {
826
                    need_access_label = 1;
827
                    break;
828
                  }
829
              QUIT;
830
              if (!need_access_label)
831
                {
832
                  len2 = TYPE_NFN_FIELDS (type);
833
                  for (j = 0; j < len2; j++)
834
                    {
835
                      QUIT;
836
                      len = TYPE_FN_FIELDLIST_LENGTH (type, j);
837
                      for (i = 0; i < len; i++)
838
                        if (TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, j), i)
839
                            || TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type, j), i))
840
                          {
841
                            need_access_label = 1;
842
                            break;
843
                          }
844
                      if (need_access_label)
845
                        break;
846
                    }
847
                }
848
            }
849
 
850
          /* If there is a base class for this type,
851
             do not print the field that it occupies.  */
852
 
853
          len = TYPE_NFIELDS (type);
854
          vptr_fieldno = get_vptr_fieldno (type, &basetype);
855
          for (i = TYPE_N_BASECLASSES (type); i < len; i++)
856
            {
857
              QUIT;
858
 
859
              /* If we have a virtual table pointer, omit it.  Even if
860
                 virtual table pointers are not specifically marked in
861
                 the debug info, they should be artificial.  */
862
              if ((i == vptr_fieldno && type == basetype)
863
                  || TYPE_FIELD_ARTIFICIAL (type, i))
864
                continue;
865
 
866
              if (need_access_label)
867
                {
868
                  if (TYPE_FIELD_PROTECTED (type, i))
869
                    {
870
                      if (section_type != s_protected)
871
                        {
872
                          section_type = s_protected;
873
                          fprintfi_filtered (level + 2, stream,
874
                                             "protected:\n");
875
                        }
876
                    }
877
                  else if (TYPE_FIELD_PRIVATE (type, i))
878
                    {
879
                      if (section_type != s_private)
880
                        {
881
                          section_type = s_private;
882
                          fprintfi_filtered (level + 2, stream, "private:\n");
883
                        }
884
                    }
885
                  else
886
                    {
887
                      if (section_type != s_public)
888
                        {
889
                          section_type = s_public;
890
                          fprintfi_filtered (level + 2, stream, "public:\n");
891
                        }
892
                    }
893
                }
894
 
895
              print_spaces_filtered (level + 4, stream);
896
              if (field_is_static (&TYPE_FIELD (type, i)))
897
                fprintf_filtered (stream, "static ");
898
              c_print_type (TYPE_FIELD_TYPE (type, i),
899
                            TYPE_FIELD_NAME (type, i),
900
                            stream, show - 1, level + 4);
901
              if (!field_is_static (&TYPE_FIELD (type, i))
902
                  && TYPE_FIELD_PACKED (type, i))
903
                {
904
                  /* It is a bitfield.  This code does not attempt
905
                     to look at the bitpos and reconstruct filler,
906
                     unnamed fields.  This would lead to misleading
907
                     results if the compiler does not put out fields
908
                     for such things (I don't know what it does).  */
909
                  fprintf_filtered (stream, " : %d",
910
                                    TYPE_FIELD_BITSIZE (type, i));
911
                }
912
              fprintf_filtered (stream, ";\n");
913
            }
914
 
915
          /* If there are both fields and methods, put a blank line
916
              between them.  Make sure to count only method that we will
917
              display; artificial methods will be hidden.  */
918
          len = TYPE_NFN_FIELDS (type);
919
          real_len = 0;
920
          for (i = 0; i < len; i++)
921
            {
922
              struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
923
              int len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
924
              int j;
925
 
926
              for (j = 0; j < len2; j++)
927
                if (!TYPE_FN_FIELD_ARTIFICIAL (f, j))
928
                  real_len++;
929
            }
930
          if (real_len > 0 && section_type != s_none)
931
            fprintf_filtered (stream, "\n");
932
 
933
          /* C++: print out the methods */
934
          for (i = 0; i < len; i++)
935
            {
936
              struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
937
              int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
938
              char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
939
              char *name = type_name_no_tag (type);
940
              int is_constructor = name && strcmp (method_name, name) == 0;
941
 
942
              for (j = 0; j < len2; j++)
943
                {
944
                  char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
945
                  int is_full_physname_constructor =
946
                    is_constructor_name (physname)
947
                    || is_destructor_name (physname)
948
                    || method_name[0] == '~';
949
 
950
                  /* Do not print out artificial methods.  */
951
                  if (TYPE_FN_FIELD_ARTIFICIAL (f, j))
952
                    continue;
953
 
954
                  QUIT;
955
                  if (TYPE_FN_FIELD_PROTECTED (f, j))
956
                    {
957
                      if (section_type != s_protected)
958
                        {
959
                          section_type = s_protected;
960
                          fprintfi_filtered (level + 2, stream,
961
                                             "protected:\n");
962
                        }
963
                    }
964
                  else if (TYPE_FN_FIELD_PRIVATE (f, j))
965
                    {
966
                      if (section_type != s_private)
967
                        {
968
                          section_type = s_private;
969
                          fprintfi_filtered (level + 2, stream, "private:\n");
970
                        }
971
                    }
972
                  else
973
                    {
974
                      if (section_type != s_public)
975
                        {
976
                          section_type = s_public;
977
                          fprintfi_filtered (level + 2, stream, "public:\n");
978
                        }
979
                    }
980
 
981
                  print_spaces_filtered (level + 4, stream);
982
                  if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
983
                    fprintf_filtered (stream, "virtual ");
984
                  else if (TYPE_FN_FIELD_STATIC_P (f, j))
985
                    fprintf_filtered (stream, "static ");
986
                  if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
987
                    {
988
                      /* Keep GDB from crashing here.  */
989
                      fprintf_filtered (stream, _("<undefined type> %s;\n"),
990
                                        TYPE_FN_FIELD_PHYSNAME (f, j));
991
                      break;
992
                    }
993
                  else if (!is_constructor      /* constructors don't have declared types */
994
                           && !is_full_physname_constructor     /*    " "  */
995
                           && !is_type_conversion_operator (type, i, j))
996
                    {
997
                      type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
998
                                  "", stream, -1);
999
                      fputs_filtered (" ", stream);
1000
                    }
1001
                  if (TYPE_FN_FIELD_STUB (f, j))
1002
                    /* Build something we can demangle.  */
1003
                    mangled_name = gdb_mangle_name (type, i, j);
1004
                  else
1005
                    mangled_name = TYPE_FN_FIELD_PHYSNAME (f, j);
1006
 
1007
                  demangled_name =
1008
                    cplus_demangle (mangled_name,
1009
                                    DMGL_ANSI | DMGL_PARAMS);
1010
                  if (demangled_name == NULL)
1011
                    {
1012
                      /* in some cases (for instance with the HP demangling),
1013
                         if a function has more than 10 arguments,
1014
                         the demangling will fail.
1015
                         Let's try to reconstruct the function signature from
1016
                         the symbol information */
1017
                      if (!TYPE_FN_FIELD_STUB (f, j))
1018
                        {
1019
                          int staticp = TYPE_FN_FIELD_STATIC_P (f, j);
1020
                          struct type *mtype = TYPE_FN_FIELD_TYPE (f, j);
1021
 
1022
                          cp_type_print_method_args (mtype,
1023
                                                     "",
1024
                                                     method_name,
1025
                                                     staticp,
1026
                                                     stream);
1027
                        }
1028
                      else
1029
                        fprintf_filtered (stream, _("<badly mangled name '%s'>"),
1030
                                          mangled_name);
1031
                    }
1032
                  else
1033
                    {
1034
                      char *p;
1035
                      char *demangled_no_class
1036
                        = remove_qualifiers (demangled_name);
1037
 
1038
                      /* get rid of the `static' appended by the demangler */
1039
                      p = strstr (demangled_no_class, " static");
1040
                      if (p != NULL)
1041
                        {
1042
                          int length = p - demangled_no_class;
1043
 
1044
                          demangled_no_static = (char *) xmalloc (length + 1);
1045
                          strncpy (demangled_no_static, demangled_no_class, length);
1046
                          *(demangled_no_static + length) = '\0';
1047
                          fputs_filtered (demangled_no_static, stream);
1048
                          xfree (demangled_no_static);
1049
                        }
1050
                      else
1051
                        fputs_filtered (demangled_no_class, stream);
1052
                      xfree (demangled_name);
1053
                    }
1054
 
1055
                  if (TYPE_FN_FIELD_STUB (f, j))
1056
                    xfree (mangled_name);
1057
 
1058
                  fprintf_filtered (stream, ";\n");
1059
                }
1060
            }
1061
 
1062
          /* Print typedefs defined in this class.  */
1063
 
1064
          if (TYPE_TYPEDEF_FIELD_COUNT (type) != 0)
1065
            {
1066
              if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0)
1067
                fprintf_filtered (stream, "\n");
1068
 
1069
              for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); i++)
1070
                {
1071
                  struct type *target = TYPE_TYPEDEF_FIELD_TYPE (type, i);
1072
 
1073
                  /* Dereference the typedef declaration itself.  */
1074
                  gdb_assert (TYPE_CODE (target) == TYPE_CODE_TYPEDEF);
1075
                  target = TYPE_TARGET_TYPE (target);
1076
 
1077
                  print_spaces_filtered (level + 4, stream);
1078
                  fprintf_filtered (stream, "typedef ");
1079
                  c_print_type (target, TYPE_TYPEDEF_FIELD_NAME (type, i),
1080
                                stream, show - 1, level + 4);
1081
                  fprintf_filtered (stream, ";\n");
1082
                }
1083
            }
1084
 
1085
          fprintfi_filtered (level, stream, "}");
1086
 
1087
          if (TYPE_LOCALTYPE_PTR (type) && show >= 0)
1088
            fprintfi_filtered (level, stream, _(" (Local at %s:%d)\n"),
1089
                               TYPE_LOCALTYPE_FILE (type),
1090
                               TYPE_LOCALTYPE_LINE (type));
1091
        }
1092
      break;
1093
 
1094
    case TYPE_CODE_ENUM:
1095
      c_type_print_modifier (type, stream, 0, 1);
1096
      fprintf_filtered (stream, "enum ");
1097
      /* Print the tag name if it exists.
1098
         The aCC compiler emits a spurious
1099
         "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}"
1100
         tag for unnamed struct/union/enum's, which we don't
1101
         want to print. */
1102
      if (TYPE_TAG_NAME (type) != NULL
1103
          && strncmp (TYPE_TAG_NAME (type), "{unnamed", 8))
1104
        {
1105
          fputs_filtered (TYPE_TAG_NAME (type), stream);
1106
          if (show > 0)
1107
            fputs_filtered (" ", stream);
1108
        }
1109
 
1110
      wrap_here ("    ");
1111
      if (show < 0)
1112
        {
1113
          /* If we just printed a tag name, no need to print anything else.  */
1114
          if (TYPE_TAG_NAME (type) == NULL)
1115
            fprintf_filtered (stream, "{...}");
1116
        }
1117
      else if (show > 0 || TYPE_TAG_NAME (type) == NULL)
1118
        {
1119
          fprintf_filtered (stream, "{");
1120
          len = TYPE_NFIELDS (type);
1121
          lastval = 0;
1122
          for (i = 0; i < len; i++)
1123
            {
1124
              QUIT;
1125
              if (i)
1126
                fprintf_filtered (stream, ", ");
1127
              wrap_here ("    ");
1128
              fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
1129
              if (lastval != TYPE_FIELD_BITPOS (type, i))
1130
                {
1131
                  fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i));
1132
                  lastval = TYPE_FIELD_BITPOS (type, i);
1133
                }
1134
              lastval++;
1135
            }
1136
          fprintf_filtered (stream, "}");
1137
        }
1138
      break;
1139
 
1140
    case TYPE_CODE_VOID:
1141
      fprintf_filtered (stream, "void");
1142
      break;
1143
 
1144
    case TYPE_CODE_UNDEF:
1145
      fprintf_filtered (stream, _("struct <unknown>"));
1146
      break;
1147
 
1148
    case TYPE_CODE_ERROR:
1149
      fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
1150
      break;
1151
 
1152
    case TYPE_CODE_RANGE:
1153
      /* This should not occur */
1154
      fprintf_filtered (stream, _("<range type>"));
1155
      break;
1156
 
1157
    case TYPE_CODE_NAMESPACE:
1158
      fputs_filtered ("namespace ", stream);
1159
      fputs_filtered (TYPE_TAG_NAME (type), stream);
1160
      break;
1161
 
1162
    default:
1163
      /* Handle types not explicitly handled by the other cases,
1164
         such as fundamental types.  For these, just print whatever
1165
         the type name is, as recorded in the type itself.  If there
1166
         is no type name, then complain. */
1167
      if (TYPE_NAME (type) != NULL)
1168
        {
1169
          c_type_print_modifier (type, stream, 0, 1);
1170
          fputs_filtered (TYPE_NAME (type), stream);
1171
        }
1172
      else
1173
        {
1174
          /* At least for dump_symtab, it is important that this not be
1175
             an error ().  */
1176
          fprintf_filtered (stream, _("<invalid type code %d>"),
1177
                            TYPE_CODE (type));
1178
        }
1179
      break;
1180
    }
1181
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.