Branch data Line data Source code
1 : : /* Tree-dumping functionality for C-family languages.
2 : : Copyright (C) 2002-2024 Free Software Foundation, Inc.
3 : : Written by Mark Mitchell <mark@codesourcery.com>
4 : :
5 : : This file is part of GCC.
6 : :
7 : : GCC is free software; you can redistribute it and/or modify it under
8 : : the terms of the GNU General Public License as published by the Free
9 : : Software Foundation; either version 3, or (at your option) any later
10 : : version.
11 : :
12 : : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 : : WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 : : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 : : for more details.
16 : :
17 : : You should have received a copy of the GNU General Public License
18 : : along with GCC; see the file COPYING3. If not see
19 : : <http://www.gnu.org/licenses/>. */
20 : :
21 : : #include "config.h"
22 : : #include "system.h"
23 : : #include "coretypes.h"
24 : : #include "c-common.h"
25 : : #include "tree-dump.h"
26 : :
27 : : /* Dump any C-specific tree codes and attributes of common codes. */
28 : :
29 : : static void
30 : 0 : dump_stmt (dump_info_p di, const_tree t)
31 : : {
32 : 0 : if (EXPR_HAS_LOCATION (t))
33 : 0 : dump_int (di, "line", EXPR_LINENO (t));
34 : 0 : }
35 : :
36 : : bool
37 : 21005 : c_dump_tree (void *dump_info, tree t)
38 : : {
39 : 21005 : enum tree_code code;
40 : 21005 : dump_info_p di = (dump_info_p) dump_info;
41 : :
42 : : /* Figure out what kind of node this is. */
43 : 21005 : code = TREE_CODE (t);
44 : :
45 : 21005 : switch (code)
46 : : {
47 : 36 : case FIELD_DECL:
48 : 36 : if (DECL_C_BIT_FIELD (t))
49 : 0 : dump_string (di, "bitfield");
50 : : break;
51 : :
52 : 0 : case BREAK_STMT:
53 : 0 : case CONTINUE_STMT:
54 : 0 : dump_stmt (di, t);
55 : 0 : break;
56 : :
57 : 0 : case DO_STMT:
58 : 0 : dump_stmt (di, t);
59 : 0 : dump_child ("body", DO_BODY (t));
60 : 0 : dump_child ("cond", DO_COND (t));
61 : 0 : break;
62 : :
63 : 0 : case FOR_STMT:
64 : 0 : dump_stmt (di, t);
65 : 0 : dump_child ("init", FOR_INIT_STMT (t));
66 : 0 : dump_child ("cond", FOR_COND (t));
67 : 0 : dump_child ("expr", FOR_EXPR (t));
68 : 0 : dump_child ("body", FOR_BODY (t));
69 : 0 : break;
70 : :
71 : 0 : case SWITCH_STMT:
72 : 0 : dump_stmt (di, t);
73 : 0 : dump_child ("cond", SWITCH_STMT_COND (t));
74 : 0 : dump_child ("body", SWITCH_STMT_BODY (t));
75 : 0 : break;
76 : :
77 : 0 : case WHILE_STMT:
78 : 0 : dump_stmt (di, t);
79 : 0 : dump_child ("cond", WHILE_COND (t));
80 : 0 : dump_child ("body", WHILE_BODY (t));
81 : 0 : break;
82 : :
83 : : default:
84 : : break;
85 : : }
86 : :
87 : 21005 : return false;
88 : : }
|