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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [cp/] [ptree.c] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
/* Prints out trees in human readable form.
2
   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998,
3
   1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4
   Hacked by Michael Tiemann (tiemann@cygnus.com)
5
 
6
This file is part of GCC.
7
 
8
GCC 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 2, or (at your option)
11
any later version.
12
 
13
GCC 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 GCC; see the file COPYING.  If not, write to
20
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21
Boston, MA 02110-1301, USA.  */
22
 
23
 
24
#include "config.h"
25
#include "system.h"
26
#include "coretypes.h"
27
#include "tm.h"
28
#include "tree.h"
29
#include "cp-tree.h"
30
 
31
void
32
cxx_print_decl (FILE *file, tree node, int indent)
33
{
34
  if (TREE_CODE (node) == FIELD_DECL)
35
    {
36
      if (DECL_MUTABLE_P (node))
37
        {
38
          indent_to (file, indent + 3);
39
          fprintf (file, " mutable ");
40
        }
41
      return;
42
    }
43
 
44
  if (!DECL_LANG_SPECIFIC (node))
45
    return;
46
  indent_to (file, indent + 3);
47
  if (TREE_CODE (node) == FUNCTION_DECL
48
      && DECL_PENDING_INLINE_INFO (node))
49
    fprintf (file, " pending-inline-info %p",
50
             (void *) DECL_PENDING_INLINE_INFO (node));
51
  if (TREE_CODE (node) == TYPE_DECL
52
      && DECL_SORTED_FIELDS (node))
53
    fprintf (file, " sorted-fields %p",
54
             (void *) DECL_SORTED_FIELDS (node));
55
  if ((TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
56
      && DECL_TEMPLATE_INFO (node))
57
    fprintf (file, " template-info %p",
58
             (void *) DECL_TEMPLATE_INFO (node));
59
}
60
 
61
void
62
cxx_print_type (FILE *file, tree node, int indent)
63
{
64
  switch (TREE_CODE (node))
65
    {
66
    case TEMPLATE_TYPE_PARM:
67
    case TEMPLATE_TEMPLATE_PARM:
68
    case BOUND_TEMPLATE_TEMPLATE_PARM:
69
      indent_to (file, indent + 3);
70
      fprintf (file, "index " HOST_WIDE_INT_PRINT_DEC " level "
71
               HOST_WIDE_INT_PRINT_DEC " orig_level " HOST_WIDE_INT_PRINT_DEC,
72
               TEMPLATE_TYPE_IDX (node), TEMPLATE_TYPE_LEVEL (node),
73
               TEMPLATE_TYPE_ORIG_LEVEL (node));
74
      return;
75
 
76
    case FUNCTION_TYPE:
77
    case METHOD_TYPE:
78
      if (TYPE_RAISES_EXCEPTIONS (node))
79
        print_node (file, "throws", TYPE_RAISES_EXCEPTIONS (node), indent + 4);
80
      return;
81
 
82
    case RECORD_TYPE:
83
    case UNION_TYPE:
84
      break;
85
 
86
    default:
87
      return;
88
    }
89
 
90
  if (TYPE_PTRMEMFUNC_P (node))
91
    print_node (file, "ptrmemfunc fn type", TYPE_PTRMEMFUNC_FN_TYPE (node),
92
                indent + 4);
93
 
94
  if (! CLASS_TYPE_P (node))
95
    return;
96
 
97
  indent_to (file, indent + 3);
98
 
99
  if (TYPE_NEEDS_CONSTRUCTING (node))
100
    fputs ( "needs-constructor", file);
101
  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (node))
102
    fputs (" needs-destructor", file);
103
  if (TYPE_HAS_DEFAULT_CONSTRUCTOR (node))
104
    fputs (" X()", file);
105
  if (TYPE_HAS_CONVERSION (node))
106
    fputs (" has-type-conversion", file);
107
  if (TYPE_HAS_INIT_REF (node))
108
    {
109
      if (TYPE_HAS_CONST_INIT_REF (node))
110
        fputs (" X(constX&)", file);
111
      else
112
        fputs (" X(X&)", file);
113
    }
114
  if (TYPE_HAS_NEW_OPERATOR (node))
115
    fputs (" new", file);
116
  if (TYPE_HAS_ARRAY_NEW_OPERATOR (node))
117
    fputs (" new[]", file);
118
  if (TYPE_GETS_DELETE (node) & 1)
119
    fputs (" delete", file);
120
  if (TYPE_GETS_DELETE (node) & 2)
121
    fputs (" delete[]", file);
122
  if (TYPE_HAS_ASSIGN_REF (node))
123
    fputs (" this=(X&)", file);
124
 
125
  if (TREE_CODE (node) == RECORD_TYPE)
126
    {
127
      if (TYPE_BINFO (node))
128
        fprintf (file, " n_parents=%d",
129
                 BINFO_N_BASE_BINFOS (TYPE_BINFO (node)));
130
      else
131
        fprintf (file, " no-binfo");
132
 
133
      fprintf (file, " use_template=%d", CLASSTYPE_USE_TEMPLATE (node));
134
      if (CLASSTYPE_INTERFACE_ONLY (node))
135
        fprintf (file, " interface-only");
136
      if (CLASSTYPE_INTERFACE_UNKNOWN (node))
137
        fprintf (file, " interface-unknown");
138
    }
139
}
140
 
141
 
142
static void
143
cxx_print_binding (FILE *stream, cxx_binding *binding, const char *prefix)
144
{
145
  fprintf (stream, "%s <%p>",
146
           prefix, (void *) binding);
147
}
148
 
149
void
150
cxx_print_identifier (FILE *file, tree node, int indent)
151
{
152
  if (indent == 0)
153
    fprintf (file, " ");
154
  else
155
    indent_to (file, indent);
156
  cxx_print_binding (file, IDENTIFIER_NAMESPACE_BINDINGS (node), "bindings");
157
  if (indent == 0)
158
    fprintf (file, " ");
159
  else
160
    indent_to (file, indent);
161
  cxx_print_binding (file, IDENTIFIER_BINDING (node), "local bindings");
162
  print_node (file, "label", IDENTIFIER_LABEL_VALUE (node), indent + 4);
163
  print_node (file, "template", IDENTIFIER_TEMPLATE (node), indent + 4);
164
}
165
 
166
void
167
cxx_print_xnode (FILE *file, tree node, int indent)
168
{
169
  switch (TREE_CODE (node))
170
    {
171
    case BASELINK:
172
      print_node (file, "functions", BASELINK_FUNCTIONS (node), indent + 4);
173
      print_node (file, "binfo", BASELINK_BINFO (node), indent + 4);
174
      print_node (file, "access_binfo", BASELINK_ACCESS_BINFO (node),
175
                  indent + 4);
176
      break;
177
    case OVERLOAD:
178
      print_node (file, "function", OVL_FUNCTION (node), indent+4);
179
      print_node (file, "chain", TREE_CHAIN (node), indent+4);
180
      break;
181
    case TEMPLATE_PARM_INDEX:
182
      indent_to (file, indent + 3);
183
      fprintf (file, "index " HOST_WIDE_INT_PRINT_DEC " level "
184
               HOST_WIDE_INT_PRINT_DEC " orig_level " HOST_WIDE_INT_PRINT_DEC,
185
               TEMPLATE_PARM_IDX (node), TEMPLATE_PARM_LEVEL (node),
186
               TEMPLATE_PARM_ORIG_LEVEL (node));
187
      break;
188
    default:
189
      break;
190
    }
191
}

powered by: WebSVN 2.1.0

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