1*e4b17023SJohn Marino /* Tree-dumping functionality for intermediate representation.
2*e4b17023SJohn Marino Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2010
3*e4b17023SJohn Marino Free Software Foundation, Inc.
4*e4b17023SJohn Marino Written by Mark Mitchell <mark@codesourcery.com>
5*e4b17023SJohn Marino
6*e4b17023SJohn Marino This file is part of GCC.
7*e4b17023SJohn Marino
8*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify
9*e4b17023SJohn Marino it under the terms of the GNU General Public License as published by
10*e4b17023SJohn Marino the Free Software Foundation; either version 3, or (at your option)
11*e4b17023SJohn Marino any later version.
12*e4b17023SJohn Marino
13*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful,
14*e4b17023SJohn Marino but WITHOUT ANY WARRANTY; without even the implied warranty of
15*e4b17023SJohn Marino MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16*e4b17023SJohn Marino GNU General Public License for more details.
17*e4b17023SJohn Marino
18*e4b17023SJohn Marino You should have received a copy of the GNU General Public License
19*e4b17023SJohn Marino along with GCC; see the file COPYING3. If not see
20*e4b17023SJohn Marino <http://www.gnu.org/licenses/>. */
21*e4b17023SJohn Marino
22*e4b17023SJohn Marino #include "config.h"
23*e4b17023SJohn Marino #include "system.h"
24*e4b17023SJohn Marino #include "coretypes.h"
25*e4b17023SJohn Marino #include "tm.h"
26*e4b17023SJohn Marino #include "tree.h"
27*e4b17023SJohn Marino #include "cp-tree.h"
28*e4b17023SJohn Marino #include "tree-dump.h"
29*e4b17023SJohn Marino
30*e4b17023SJohn Marino static void dump_access (dump_info_p, tree);
31*e4b17023SJohn Marino
32*e4b17023SJohn Marino static void dump_op (dump_info_p, tree);
33*e4b17023SJohn Marino
34*e4b17023SJohn Marino /* Dump a representation of the accessibility information associated
35*e4b17023SJohn Marino with T. */
36*e4b17023SJohn Marino
37*e4b17023SJohn Marino static void
dump_access(dump_info_p di,tree t)38*e4b17023SJohn Marino dump_access (dump_info_p di, tree t)
39*e4b17023SJohn Marino {
40*e4b17023SJohn Marino if (TREE_PROTECTED(t))
41*e4b17023SJohn Marino dump_string_field (di, "accs", "prot");
42*e4b17023SJohn Marino else if (TREE_PRIVATE(t))
43*e4b17023SJohn Marino dump_string_field (di, "accs", "priv");
44*e4b17023SJohn Marino else
45*e4b17023SJohn Marino dump_string_field (di, "accs", "pub");
46*e4b17023SJohn Marino }
47*e4b17023SJohn Marino
48*e4b17023SJohn Marino /* Dump a representation of the specific operator for an overloaded
49*e4b17023SJohn Marino operator associated with node t. */
50*e4b17023SJohn Marino
51*e4b17023SJohn Marino static void
dump_op(dump_info_p di,tree t)52*e4b17023SJohn Marino dump_op (dump_info_p di, tree t)
53*e4b17023SJohn Marino {
54*e4b17023SJohn Marino switch (DECL_OVERLOADED_OPERATOR_P (t)) {
55*e4b17023SJohn Marino case NEW_EXPR:
56*e4b17023SJohn Marino dump_string (di, "new");
57*e4b17023SJohn Marino break;
58*e4b17023SJohn Marino case VEC_NEW_EXPR:
59*e4b17023SJohn Marino dump_string (di, "vecnew");
60*e4b17023SJohn Marino break;
61*e4b17023SJohn Marino case DELETE_EXPR:
62*e4b17023SJohn Marino dump_string (di, "delete");
63*e4b17023SJohn Marino break;
64*e4b17023SJohn Marino case VEC_DELETE_EXPR:
65*e4b17023SJohn Marino dump_string (di, "vecdelete");
66*e4b17023SJohn Marino break;
67*e4b17023SJohn Marino case UNARY_PLUS_EXPR:
68*e4b17023SJohn Marino dump_string (di, "pos");
69*e4b17023SJohn Marino break;
70*e4b17023SJohn Marino case NEGATE_EXPR:
71*e4b17023SJohn Marino dump_string (di, "neg");
72*e4b17023SJohn Marino break;
73*e4b17023SJohn Marino case ADDR_EXPR:
74*e4b17023SJohn Marino dump_string (di, "addr");
75*e4b17023SJohn Marino break;
76*e4b17023SJohn Marino case INDIRECT_REF:
77*e4b17023SJohn Marino dump_string(di, "deref");
78*e4b17023SJohn Marino break;
79*e4b17023SJohn Marino case BIT_NOT_EXPR:
80*e4b17023SJohn Marino dump_string(di, "not");
81*e4b17023SJohn Marino break;
82*e4b17023SJohn Marino case TRUTH_NOT_EXPR:
83*e4b17023SJohn Marino dump_string(di, "lnot");
84*e4b17023SJohn Marino break;
85*e4b17023SJohn Marino case PREINCREMENT_EXPR:
86*e4b17023SJohn Marino dump_string(di, "preinc");
87*e4b17023SJohn Marino break;
88*e4b17023SJohn Marino case PREDECREMENT_EXPR:
89*e4b17023SJohn Marino dump_string(di, "predec");
90*e4b17023SJohn Marino break;
91*e4b17023SJohn Marino case PLUS_EXPR:
92*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
93*e4b17023SJohn Marino dump_string (di, "plusassign");
94*e4b17023SJohn Marino else
95*e4b17023SJohn Marino dump_string(di, "plus");
96*e4b17023SJohn Marino break;
97*e4b17023SJohn Marino case MINUS_EXPR:
98*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
99*e4b17023SJohn Marino dump_string (di, "minusassign");
100*e4b17023SJohn Marino else
101*e4b17023SJohn Marino dump_string(di, "minus");
102*e4b17023SJohn Marino break;
103*e4b17023SJohn Marino case MULT_EXPR:
104*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
105*e4b17023SJohn Marino dump_string (di, "multassign");
106*e4b17023SJohn Marino else
107*e4b17023SJohn Marino dump_string (di, "mult");
108*e4b17023SJohn Marino break;
109*e4b17023SJohn Marino case TRUNC_DIV_EXPR:
110*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
111*e4b17023SJohn Marino dump_string (di, "divassign");
112*e4b17023SJohn Marino else
113*e4b17023SJohn Marino dump_string (di, "div");
114*e4b17023SJohn Marino break;
115*e4b17023SJohn Marino case TRUNC_MOD_EXPR:
116*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
117*e4b17023SJohn Marino dump_string (di, "modassign");
118*e4b17023SJohn Marino else
119*e4b17023SJohn Marino dump_string (di, "mod");
120*e4b17023SJohn Marino break;
121*e4b17023SJohn Marino case BIT_AND_EXPR:
122*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
123*e4b17023SJohn Marino dump_string (di, "andassign");
124*e4b17023SJohn Marino else
125*e4b17023SJohn Marino dump_string (di, "and");
126*e4b17023SJohn Marino break;
127*e4b17023SJohn Marino case BIT_IOR_EXPR:
128*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
129*e4b17023SJohn Marino dump_string (di, "orassign");
130*e4b17023SJohn Marino else
131*e4b17023SJohn Marino dump_string (di, "or");
132*e4b17023SJohn Marino break;
133*e4b17023SJohn Marino case BIT_XOR_EXPR:
134*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
135*e4b17023SJohn Marino dump_string (di, "xorassign");
136*e4b17023SJohn Marino else
137*e4b17023SJohn Marino dump_string (di, "xor");
138*e4b17023SJohn Marino break;
139*e4b17023SJohn Marino case LSHIFT_EXPR:
140*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
141*e4b17023SJohn Marino dump_string (di, "lshiftassign");
142*e4b17023SJohn Marino else
143*e4b17023SJohn Marino dump_string (di, "lshift");
144*e4b17023SJohn Marino break;
145*e4b17023SJohn Marino case RSHIFT_EXPR:
146*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
147*e4b17023SJohn Marino dump_string (di, "rshiftassign");
148*e4b17023SJohn Marino else
149*e4b17023SJohn Marino dump_string (di, "rshift");
150*e4b17023SJohn Marino break;
151*e4b17023SJohn Marino case EQ_EXPR:
152*e4b17023SJohn Marino dump_string (di, "eq");
153*e4b17023SJohn Marino break;
154*e4b17023SJohn Marino case NE_EXPR:
155*e4b17023SJohn Marino dump_string (di, "ne");
156*e4b17023SJohn Marino break;
157*e4b17023SJohn Marino case LT_EXPR:
158*e4b17023SJohn Marino dump_string (di, "lt");
159*e4b17023SJohn Marino break;
160*e4b17023SJohn Marino case GT_EXPR:
161*e4b17023SJohn Marino dump_string (di, "gt");
162*e4b17023SJohn Marino break;
163*e4b17023SJohn Marino case LE_EXPR:
164*e4b17023SJohn Marino dump_string (di, "le");
165*e4b17023SJohn Marino break;
166*e4b17023SJohn Marino case GE_EXPR:
167*e4b17023SJohn Marino dump_string (di, "ge");
168*e4b17023SJohn Marino break;
169*e4b17023SJohn Marino case TRUTH_ANDIF_EXPR:
170*e4b17023SJohn Marino dump_string (di, "land");
171*e4b17023SJohn Marino break;
172*e4b17023SJohn Marino case TRUTH_ORIF_EXPR:
173*e4b17023SJohn Marino dump_string (di, "lor");
174*e4b17023SJohn Marino break;
175*e4b17023SJohn Marino case COMPOUND_EXPR:
176*e4b17023SJohn Marino dump_string (di, "compound");
177*e4b17023SJohn Marino break;
178*e4b17023SJohn Marino case MEMBER_REF:
179*e4b17023SJohn Marino dump_string (di, "memref");
180*e4b17023SJohn Marino break;
181*e4b17023SJohn Marino case COMPONENT_REF:
182*e4b17023SJohn Marino dump_string (di, "ref");
183*e4b17023SJohn Marino break;
184*e4b17023SJohn Marino case ARRAY_REF:
185*e4b17023SJohn Marino dump_string (di, "subs");
186*e4b17023SJohn Marino break;
187*e4b17023SJohn Marino case POSTINCREMENT_EXPR:
188*e4b17023SJohn Marino dump_string (di, "postinc");
189*e4b17023SJohn Marino break;
190*e4b17023SJohn Marino case POSTDECREMENT_EXPR:
191*e4b17023SJohn Marino dump_string (di, "postdec");
192*e4b17023SJohn Marino break;
193*e4b17023SJohn Marino case CALL_EXPR:
194*e4b17023SJohn Marino dump_string (di, "call");
195*e4b17023SJohn Marino break;
196*e4b17023SJohn Marino case NOP_EXPR:
197*e4b17023SJohn Marino if (DECL_ASSIGNMENT_OPERATOR_P (t))
198*e4b17023SJohn Marino dump_string (di, "assign");
199*e4b17023SJohn Marino break;
200*e4b17023SJohn Marino default:
201*e4b17023SJohn Marino break;
202*e4b17023SJohn Marino }
203*e4b17023SJohn Marino }
204*e4b17023SJohn Marino
205*e4b17023SJohn Marino bool
cp_dump_tree(void * dump_info,tree t)206*e4b17023SJohn Marino cp_dump_tree (void* dump_info, tree t)
207*e4b17023SJohn Marino {
208*e4b17023SJohn Marino enum tree_code code;
209*e4b17023SJohn Marino dump_info_p di = (dump_info_p) dump_info;
210*e4b17023SJohn Marino
211*e4b17023SJohn Marino /* Figure out what kind of node this is. */
212*e4b17023SJohn Marino code = TREE_CODE (t);
213*e4b17023SJohn Marino
214*e4b17023SJohn Marino if (DECL_P (t))
215*e4b17023SJohn Marino {
216*e4b17023SJohn Marino if (DECL_LANG_SPECIFIC (t) && DECL_LANGUAGE (t) != lang_cplusplus)
217*e4b17023SJohn Marino dump_string_field (di, "lang", language_to_string (DECL_LANGUAGE (t)));
218*e4b17023SJohn Marino }
219*e4b17023SJohn Marino
220*e4b17023SJohn Marino switch (code)
221*e4b17023SJohn Marino {
222*e4b17023SJohn Marino case IDENTIFIER_NODE:
223*e4b17023SJohn Marino if (IDENTIFIER_OPNAME_P (t))
224*e4b17023SJohn Marino {
225*e4b17023SJohn Marino dump_string_field (di, "note", "operator");
226*e4b17023SJohn Marino return true;
227*e4b17023SJohn Marino }
228*e4b17023SJohn Marino else if (IDENTIFIER_TYPENAME_P (t))
229*e4b17023SJohn Marino {
230*e4b17023SJohn Marino dump_child ("tynm", TREE_TYPE (t));
231*e4b17023SJohn Marino return true;
232*e4b17023SJohn Marino }
233*e4b17023SJohn Marino break;
234*e4b17023SJohn Marino
235*e4b17023SJohn Marino case OFFSET_TYPE:
236*e4b17023SJohn Marino dump_string_field (di, "note", "ptrmem");
237*e4b17023SJohn Marino dump_child ("ptd", TYPE_PTRMEM_POINTED_TO_TYPE (t));
238*e4b17023SJohn Marino dump_child ("cls", TYPE_PTRMEM_CLASS_TYPE (t));
239*e4b17023SJohn Marino return true;
240*e4b17023SJohn Marino
241*e4b17023SJohn Marino case RECORD_TYPE:
242*e4b17023SJohn Marino if (TYPE_PTRMEMFUNC_P (t))
243*e4b17023SJohn Marino {
244*e4b17023SJohn Marino dump_string_field (di, "note", "ptrmem");
245*e4b17023SJohn Marino dump_child ("ptd", TYPE_PTRMEM_POINTED_TO_TYPE (t));
246*e4b17023SJohn Marino dump_child ("cls", TYPE_PTRMEM_CLASS_TYPE (t));
247*e4b17023SJohn Marino return true;
248*e4b17023SJohn Marino }
249*e4b17023SJohn Marino /* Fall through. */
250*e4b17023SJohn Marino
251*e4b17023SJohn Marino case UNION_TYPE:
252*e4b17023SJohn Marino /* Is it a type used as a base? */
253*e4b17023SJohn Marino if (TYPE_CONTEXT (t) && TREE_CODE (TYPE_CONTEXT (t)) == TREE_CODE (t)
254*e4b17023SJohn Marino && CLASSTYPE_AS_BASE (TYPE_CONTEXT (t)) == t)
255*e4b17023SJohn Marino {
256*e4b17023SJohn Marino dump_child ("bfld", TYPE_CONTEXT (t));
257*e4b17023SJohn Marino return true;
258*e4b17023SJohn Marino }
259*e4b17023SJohn Marino
260*e4b17023SJohn Marino if (! MAYBE_CLASS_TYPE_P (t))
261*e4b17023SJohn Marino break;
262*e4b17023SJohn Marino
263*e4b17023SJohn Marino dump_child ("vfld", TYPE_VFIELD (t));
264*e4b17023SJohn Marino if (CLASSTYPE_TEMPLATE_SPECIALIZATION(t))
265*e4b17023SJohn Marino dump_string(di, "spec");
266*e4b17023SJohn Marino
267*e4b17023SJohn Marino if (!dump_flag (di, TDF_SLIM, t) && TYPE_BINFO (t))
268*e4b17023SJohn Marino {
269*e4b17023SJohn Marino int i;
270*e4b17023SJohn Marino tree binfo;
271*e4b17023SJohn Marino tree base_binfo;
272*e4b17023SJohn Marino
273*e4b17023SJohn Marino for (binfo = TYPE_BINFO (t), i = 0;
274*e4b17023SJohn Marino BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
275*e4b17023SJohn Marino {
276*e4b17023SJohn Marino dump_child ("base", BINFO_TYPE (base_binfo));
277*e4b17023SJohn Marino if (BINFO_VIRTUAL_P (base_binfo))
278*e4b17023SJohn Marino dump_string_field (di, "spec", "virt");
279*e4b17023SJohn Marino dump_access (di, base_binfo);
280*e4b17023SJohn Marino }
281*e4b17023SJohn Marino }
282*e4b17023SJohn Marino break;
283*e4b17023SJohn Marino
284*e4b17023SJohn Marino case FIELD_DECL:
285*e4b17023SJohn Marino dump_access (di, t);
286*e4b17023SJohn Marino if (DECL_MUTABLE_P (t))
287*e4b17023SJohn Marino dump_string_field (di, "spec", "mutable");
288*e4b17023SJohn Marino break;
289*e4b17023SJohn Marino
290*e4b17023SJohn Marino case VAR_DECL:
291*e4b17023SJohn Marino if (TREE_CODE (CP_DECL_CONTEXT (t)) == RECORD_TYPE)
292*e4b17023SJohn Marino dump_access (di, t);
293*e4b17023SJohn Marino if (TREE_STATIC (t) && !TREE_PUBLIC (t))
294*e4b17023SJohn Marino dump_string_field (di, "link", "static");
295*e4b17023SJohn Marino break;
296*e4b17023SJohn Marino
297*e4b17023SJohn Marino case FUNCTION_DECL:
298*e4b17023SJohn Marino if (!DECL_THUNK_P (t))
299*e4b17023SJohn Marino {
300*e4b17023SJohn Marino if (DECL_OVERLOADED_OPERATOR_P (t)) {
301*e4b17023SJohn Marino dump_string_field (di, "note", "operator");
302*e4b17023SJohn Marino dump_op (di, t);
303*e4b17023SJohn Marino }
304*e4b17023SJohn Marino if (DECL_FUNCTION_MEMBER_P (t))
305*e4b17023SJohn Marino {
306*e4b17023SJohn Marino dump_string_field (di, "note", "member");
307*e4b17023SJohn Marino dump_access (di, t);
308*e4b17023SJohn Marino }
309*e4b17023SJohn Marino if (DECL_PURE_VIRTUAL_P (t))
310*e4b17023SJohn Marino dump_string_field (di, "spec", "pure");
311*e4b17023SJohn Marino if (DECL_VIRTUAL_P (t))
312*e4b17023SJohn Marino dump_string_field (di, "spec", "virt");
313*e4b17023SJohn Marino if (DECL_CONSTRUCTOR_P (t))
314*e4b17023SJohn Marino dump_string_field (di, "note", "constructor");
315*e4b17023SJohn Marino if (DECL_DESTRUCTOR_P (t))
316*e4b17023SJohn Marino dump_string_field (di, "note", "destructor");
317*e4b17023SJohn Marino if (DECL_CONV_FN_P (t))
318*e4b17023SJohn Marino dump_string_field (di, "note", "conversion");
319*e4b17023SJohn Marino if (DECL_GLOBAL_CTOR_P (t))
320*e4b17023SJohn Marino dump_string_field (di, "note", "global init");
321*e4b17023SJohn Marino if (DECL_GLOBAL_DTOR_P (t))
322*e4b17023SJohn Marino dump_string_field (di, "note", "global fini");
323*e4b17023SJohn Marino if (DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (t))
324*e4b17023SJohn Marino dump_string_field (di, "note", "pseudo tmpl");
325*e4b17023SJohn Marino }
326*e4b17023SJohn Marino else
327*e4b17023SJohn Marino {
328*e4b17023SJohn Marino tree virt = THUNK_VIRTUAL_OFFSET (t);
329*e4b17023SJohn Marino
330*e4b17023SJohn Marino dump_string_field (di, "note", "thunk");
331*e4b17023SJohn Marino if (DECL_THIS_THUNK_P (t))
332*e4b17023SJohn Marino dump_string_field (di, "note", "this adjusting");
333*e4b17023SJohn Marino else
334*e4b17023SJohn Marino {
335*e4b17023SJohn Marino dump_string_field (di, "note", "result adjusting");
336*e4b17023SJohn Marino if (virt)
337*e4b17023SJohn Marino virt = BINFO_VPTR_FIELD (virt);
338*e4b17023SJohn Marino }
339*e4b17023SJohn Marino dump_int (di, "fixd", THUNK_FIXED_OFFSET (t));
340*e4b17023SJohn Marino if (virt)
341*e4b17023SJohn Marino dump_int (di, "virt", tree_low_cst (virt, 0));
342*e4b17023SJohn Marino dump_child ("fn", DECL_INITIAL (t));
343*e4b17023SJohn Marino }
344*e4b17023SJohn Marino break;
345*e4b17023SJohn Marino
346*e4b17023SJohn Marino case NAMESPACE_DECL:
347*e4b17023SJohn Marino if (DECL_NAMESPACE_ALIAS (t))
348*e4b17023SJohn Marino dump_child ("alis", DECL_NAMESPACE_ALIAS (t));
349*e4b17023SJohn Marino else if (!dump_flag (di, TDF_SLIM, t))
350*e4b17023SJohn Marino dump_child ("dcls", cp_namespace_decls (t));
351*e4b17023SJohn Marino break;
352*e4b17023SJohn Marino
353*e4b17023SJohn Marino case TEMPLATE_DECL:
354*e4b17023SJohn Marino dump_child ("rslt", DECL_TEMPLATE_RESULT (t));
355*e4b17023SJohn Marino dump_child ("inst", DECL_TEMPLATE_INSTANTIATIONS (t));
356*e4b17023SJohn Marino dump_child ("spcs", DECL_TEMPLATE_SPECIALIZATIONS (t));
357*e4b17023SJohn Marino dump_child ("prms", DECL_TEMPLATE_PARMS (t));
358*e4b17023SJohn Marino break;
359*e4b17023SJohn Marino
360*e4b17023SJohn Marino case OVERLOAD:
361*e4b17023SJohn Marino dump_child ("crnt", OVL_CURRENT (t));
362*e4b17023SJohn Marino dump_child ("chan", OVL_CHAIN (t));
363*e4b17023SJohn Marino break;
364*e4b17023SJohn Marino
365*e4b17023SJohn Marino case TRY_BLOCK:
366*e4b17023SJohn Marino dump_stmt (di, t);
367*e4b17023SJohn Marino if (CLEANUP_P (t))
368*e4b17023SJohn Marino dump_string_field (di, "note", "cleanup");
369*e4b17023SJohn Marino dump_child ("body", TRY_STMTS (t));
370*e4b17023SJohn Marino dump_child ("hdlr", TRY_HANDLERS (t));
371*e4b17023SJohn Marino break;
372*e4b17023SJohn Marino
373*e4b17023SJohn Marino case EH_SPEC_BLOCK:
374*e4b17023SJohn Marino dump_stmt (di, t);
375*e4b17023SJohn Marino dump_child ("body", EH_SPEC_STMTS (t));
376*e4b17023SJohn Marino dump_child ("raises", EH_SPEC_RAISES (t));
377*e4b17023SJohn Marino break;
378*e4b17023SJohn Marino
379*e4b17023SJohn Marino case PTRMEM_CST:
380*e4b17023SJohn Marino dump_child ("clas", PTRMEM_CST_CLASS (t));
381*e4b17023SJohn Marino dump_child ("mbr", PTRMEM_CST_MEMBER (t));
382*e4b17023SJohn Marino break;
383*e4b17023SJohn Marino
384*e4b17023SJohn Marino case THROW_EXPR:
385*e4b17023SJohn Marino /* These nodes are unary, but do not have code class `1'. */
386*e4b17023SJohn Marino dump_child ("op 0", TREE_OPERAND (t, 0));
387*e4b17023SJohn Marino break;
388*e4b17023SJohn Marino
389*e4b17023SJohn Marino case AGGR_INIT_EXPR:
390*e4b17023SJohn Marino {
391*e4b17023SJohn Marino int i = 0;
392*e4b17023SJohn Marino tree arg;
393*e4b17023SJohn Marino aggr_init_expr_arg_iterator iter;
394*e4b17023SJohn Marino dump_int (di, "ctor", AGGR_INIT_VIA_CTOR_P (t));
395*e4b17023SJohn Marino dump_child ("fn", AGGR_INIT_EXPR_FN (t));
396*e4b17023SJohn Marino FOR_EACH_AGGR_INIT_EXPR_ARG (arg, iter, t)
397*e4b17023SJohn Marino {
398*e4b17023SJohn Marino char buffer[32];
399*e4b17023SJohn Marino sprintf (buffer, "%u", i);
400*e4b17023SJohn Marino dump_child (buffer, arg);
401*e4b17023SJohn Marino i++;
402*e4b17023SJohn Marino }
403*e4b17023SJohn Marino dump_child ("decl", AGGR_INIT_EXPR_SLOT (t));
404*e4b17023SJohn Marino }
405*e4b17023SJohn Marino break;
406*e4b17023SJohn Marino
407*e4b17023SJohn Marino case HANDLER:
408*e4b17023SJohn Marino dump_stmt (di, t);
409*e4b17023SJohn Marino dump_child ("parm", HANDLER_PARMS (t));
410*e4b17023SJohn Marino dump_child ("body", HANDLER_BODY (t));
411*e4b17023SJohn Marino break;
412*e4b17023SJohn Marino
413*e4b17023SJohn Marino case MUST_NOT_THROW_EXPR:
414*e4b17023SJohn Marino dump_stmt (di, t);
415*e4b17023SJohn Marino dump_child ("body", TREE_OPERAND (t, 0));
416*e4b17023SJohn Marino dump_child ("cond", MUST_NOT_THROW_COND (t));
417*e4b17023SJohn Marino break;
418*e4b17023SJohn Marino
419*e4b17023SJohn Marino case USING_STMT:
420*e4b17023SJohn Marino dump_stmt (di, t);
421*e4b17023SJohn Marino dump_child ("nmsp", USING_STMT_NAMESPACE (t));
422*e4b17023SJohn Marino break;
423*e4b17023SJohn Marino
424*e4b17023SJohn Marino case CLEANUP_STMT:
425*e4b17023SJohn Marino dump_stmt (di, t);
426*e4b17023SJohn Marino dump_child ("decl", CLEANUP_DECL (t));
427*e4b17023SJohn Marino dump_child ("expr", CLEANUP_EXPR (t));
428*e4b17023SJohn Marino dump_child ("body", CLEANUP_BODY (t));
429*e4b17023SJohn Marino break;
430*e4b17023SJohn Marino
431*e4b17023SJohn Marino case IF_STMT:
432*e4b17023SJohn Marino dump_stmt (di, t);
433*e4b17023SJohn Marino dump_child ("cond", IF_COND (t));
434*e4b17023SJohn Marino dump_child ("then", THEN_CLAUSE (t));
435*e4b17023SJohn Marino dump_child ("else", ELSE_CLAUSE (t));
436*e4b17023SJohn Marino break;
437*e4b17023SJohn Marino
438*e4b17023SJohn Marino case BREAK_STMT:
439*e4b17023SJohn Marino case CONTINUE_STMT:
440*e4b17023SJohn Marino dump_stmt (di, t);
441*e4b17023SJohn Marino break;
442*e4b17023SJohn Marino
443*e4b17023SJohn Marino case DO_STMT:
444*e4b17023SJohn Marino dump_stmt (di, t);
445*e4b17023SJohn Marino dump_child ("body", DO_BODY (t));
446*e4b17023SJohn Marino dump_child ("cond", DO_COND (t));
447*e4b17023SJohn Marino break;
448*e4b17023SJohn Marino
449*e4b17023SJohn Marino case FOR_STMT:
450*e4b17023SJohn Marino dump_stmt (di, t);
451*e4b17023SJohn Marino dump_child ("init", FOR_INIT_STMT (t));
452*e4b17023SJohn Marino dump_child ("cond", FOR_COND (t));
453*e4b17023SJohn Marino dump_child ("expr", FOR_EXPR (t));
454*e4b17023SJohn Marino dump_child ("body", FOR_BODY (t));
455*e4b17023SJohn Marino break;
456*e4b17023SJohn Marino
457*e4b17023SJohn Marino case RANGE_FOR_STMT:
458*e4b17023SJohn Marino dump_stmt (di, t);
459*e4b17023SJohn Marino dump_child ("decl", RANGE_FOR_DECL (t));
460*e4b17023SJohn Marino dump_child ("expr", RANGE_FOR_EXPR (t));
461*e4b17023SJohn Marino dump_child ("body", RANGE_FOR_BODY (t));
462*e4b17023SJohn Marino break;
463*e4b17023SJohn Marino
464*e4b17023SJohn Marino case SWITCH_STMT:
465*e4b17023SJohn Marino dump_stmt (di, t);
466*e4b17023SJohn Marino dump_child ("cond", SWITCH_STMT_COND (t));
467*e4b17023SJohn Marino dump_child ("body", SWITCH_STMT_BODY (t));
468*e4b17023SJohn Marino break;
469*e4b17023SJohn Marino
470*e4b17023SJohn Marino case WHILE_STMT:
471*e4b17023SJohn Marino dump_stmt (di, t);
472*e4b17023SJohn Marino dump_child ("cond", WHILE_COND (t));
473*e4b17023SJohn Marino dump_child ("body", WHILE_BODY (t));
474*e4b17023SJohn Marino break;
475*e4b17023SJohn Marino
476*e4b17023SJohn Marino case STMT_EXPR:
477*e4b17023SJohn Marino dump_child ("stmt", STMT_EXPR_STMT (t));
478*e4b17023SJohn Marino break;
479*e4b17023SJohn Marino
480*e4b17023SJohn Marino case EXPR_STMT:
481*e4b17023SJohn Marino dump_stmt (di, t);
482*e4b17023SJohn Marino dump_child ("expr", EXPR_STMT_EXPR (t));
483*e4b17023SJohn Marino break;
484*e4b17023SJohn Marino
485*e4b17023SJohn Marino default:
486*e4b17023SJohn Marino break;
487*e4b17023SJohn Marino }
488*e4b17023SJohn Marino
489*e4b17023SJohn Marino return c_dump_tree (di, t);
490*e4b17023SJohn Marino }
491