c-dump.c revision 132718
1139825Simp/* Tree-dumping functionality for C-family languages. 286227Stmm Copyright (C) 2002 Free Software Foundation, Inc. 3128776Stmm Written by Mark Mitchell <mark@codesourcery.com> 4167308Smarius 5128776StmmThis file is part of GCC. 686227Stmm 786227StmmGCC is free software; you can redistribute it and/or modify it under 886227Stmmthe terms of the GNU General Public License as published by the Free 986227StmmSoftware Foundation; either version 2, or (at your option) any later 1086227Stmmversion. 1186227Stmm 1286227StmmGCC is distributed in the hope that it will be useful, but WITHOUT ANY 1386227StmmWARRANTY; without even the implied warranty of MERCHANTABILITY or 1486227StmmFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1586227Stmmfor more details. 1686227Stmm 1786227StmmYou should have received a copy of the GNU General Public License 18128776Stmmalong with GCC; see the file COPYING. If not, write to the Free 1986227StmmSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA 2086227Stmm02111-1307, USA. */ 2186227Stmm 2286227Stmm#include "config.h" 2386227Stmm#include "system.h" 2486227Stmm#include "coretypes.h" 2586227Stmm#include "tm.h" 2686227Stmm#include "tree.h" 2786227Stmm#include "c-tree.h" 2886227Stmm#include "tree-dump.h" 2986227Stmm 3086227Stmm/* Dump information common to statements from STMT. */ 3186227Stmm 3286227Stmmvoid 3386227Stmmdump_stmt (dump_info_p di, tree t) 3486227Stmm{ 35146474Smarius dump_int (di, "line", STMT_LINENO (t)); 36146474Smarius} 37146474Smarius 3886227Stmm/* Dump the next statement after STMT. */ 3986227Stmm 4086227Stmmvoid 4186227Stmmdump_next_stmt (dump_info_p di, tree t) 4286227Stmm{ 43130068Sphk dump_child ("next", TREE_CHAIN (t)); 4486227Stmm} 45167308Smarius 46167308Smarius/* Dump any C-specific tree codes and attributes of common codes. */ 4786227Stmm 4886227Stmmbool 4986227Stmmc_dump_tree (void *dump_info, tree t) 50167308Smarius{ 5186227Stmm enum tree_code code; 52167308Smarius dump_info_p di = (dump_info_p) dump_info; 5386227Stmm 54167308Smarius /* Figure out what kind of node this is. */ 5586227Stmm code = TREE_CODE (t); 5686227Stmm 5786227Stmm switch (code) 5886227Stmm { 5986227Stmm case FIELD_DECL: 60133862Smarius if (DECL_C_BIT_FIELD (t)) 6186227Stmm dump_string (di, "bitfield"); 62128776Stmm break; 6386227Stmm 6486227Stmm case ASM_STMT: 6586227Stmm dump_stmt (di, t); 6686227Stmm if (ASM_VOLATILE_P (t)) 6786227Stmm dump_string (di, "volatile"); 68133862Smarius dump_child ("strg", ASM_STRING (t)); 6986227Stmm dump_child ("outs", ASM_OUTPUTS (t)); 7086227Stmm dump_child ("ins", ASM_INPUTS (t)); 7186227Stmm dump_child ("clbr", ASM_CLOBBERS (t)); 72167308Smarius dump_next_stmt (di, t); 73167308Smarius break; 7486227Stmm 7586227Stmm case BREAK_STMT: 7688823Stmm case CONTINUE_STMT: 7788823Stmm dump_stmt (di, t); 7888823Stmm dump_next_stmt (di, t); 7988823Stmm break; 8088823Stmm 81128776Stmm case CASE_LABEL: 82128776Stmm /* Note that a case label is not like other statements; there is 83167308Smarius no way to get the line-number of a case label. */ 84146474Smarius dump_child ("low", CASE_LOW (t)); 85128776Stmm dump_child ("high", CASE_HIGH (t)); 86128776Stmm dump_next_stmt (di, t); 87128776Stmm break; 88128776Stmm 89128776Stmm case CLEANUP_STMT: 90128776Stmm dump_stmt (di, t); 91128776Stmm dump_child ("decl", CLEANUP_DECL (t)); 92167308Smarius dump_child ("expr", CLEANUP_EXPR (t)); 93167308Smarius dump_next_stmt (di, t); 94167308Smarius break; 9586227Stmm 96178443Smarius case COMPOUND_STMT: 97178443Smarius dump_stmt (di, t); 98178443Smarius dump_child ("body", COMPOUND_BODY (t)); 99185133Smarius dump_next_stmt (di, t); 100167308Smarius break; 101167308Smarius 102167308Smarius case DECL_STMT: 103167308Smarius dump_stmt (di, t); 10486227Stmm dump_child ("decl", DECL_STMT_DECL (t)); 10586227Stmm dump_next_stmt (di, t); 10686227Stmm break; 107128776Stmm 10886227Stmm case DO_STMT: 10986227Stmm dump_stmt (di, t); 11086227Stmm dump_child ("body", DO_BODY (t)); 11186227Stmm dump_child ("cond", DO_COND (t)); 11286227Stmm dump_next_stmt (di, t); 113167308Smarius break; 114167308Smarius 115167308Smarius case EXPR_STMT: 116167308Smarius dump_stmt (di, t); 117167308Smarius dump_child ("expr", EXPR_STMT_EXPR (t)); 118146474Smarius dump_next_stmt (di, t); 11986227Stmm break; 12086227Stmm 12186227Stmm case FOR_STMT: 12286227Stmm dump_stmt (di, t); 123167308Smarius dump_child ("init", FOR_INIT_STMT (t)); 124167308Smarius dump_child ("cond", FOR_COND (t)); 125178443Smarius dump_child ("expr", FOR_EXPR (t)); 126178443Smarius dump_child ("body", FOR_BODY (t)); 127178443Smarius dump_next_stmt (di, t); 128185133Smarius break; 129167308Smarius 130167308Smarius case GOTO_STMT: 131167308Smarius dump_stmt (di, t); 13286227Stmm dump_child ("dest", GOTO_DESTINATION (t)); 133167308Smarius dump_next_stmt (di, t); 134167308Smarius break; 135167308Smarius 136167308Smarius case IF_STMT: 137167308Smarius dump_stmt (di, t); 138167308Smarius dump_child ("cond", IF_COND (t)); 139167308Smarius dump_child ("then", THEN_CLAUSE (t)); 140167308Smarius dump_child ("else", ELSE_CLAUSE (t)); 14186227Stmm dump_next_stmt (di, t); 14286227Stmm break; 14386227Stmm 14486227Stmm case LABEL_STMT: 14586227Stmm dump_stmt (di, t); 146167308Smarius dump_child ("labl", LABEL_STMT_LABEL (t)); 14786227Stmm dump_next_stmt (di, t); 14886227Stmm break; 149185133Smarius 15090622Stmm case RETURN_STMT: 151167308Smarius dump_stmt (di, t); 15290622Stmm dump_child ("expr", RETURN_STMT_EXPR (t)); 15390622Stmm dump_next_stmt (di, t); 15486227Stmm break; 15590622Stmm 15686227Stmm case SWITCH_STMT: 15786227Stmm dump_stmt (di, t); 158167308Smarius dump_child ("cond", SWITCH_COND (t)); 15990622Stmm dump_child ("body", SWITCH_BODY (t)); 16086227Stmm dump_next_stmt (di, t); 16186227Stmm break; 16286227Stmm 163185133Smarius case WHILE_STMT: 16486227Stmm dump_stmt (di, t); 16586227Stmm dump_child ("cond", WHILE_COND (t)); 16686227Stmm dump_child ("body", WHILE_BODY (t)); 16786227Stmm dump_next_stmt (di, t); 16886227Stmm break; 16986227Stmm 17086227Stmm case SCOPE_STMT: 17186227Stmm dump_stmt (di, t); 172185133Smarius if (SCOPE_BEGIN_P (t)) 17386227Stmm dump_string (di, "begn"); 17486227Stmm else 17586227Stmm dump_string (di, "end"); 176167308Smarius if (SCOPE_NULLIFIED_P (t)) 177167308Smarius dump_string (di, "null"); 17886227Stmm if (!SCOPE_NO_CLEANUPS_P (t)) 17986227Stmm dump_string (di, "clnp"); 18086227Stmm dump_next_stmt (di, t); 18186227Stmm break; 18286227Stmm 18386227Stmm case STMT_EXPR: 18486227Stmm dump_child ("stmt", STMT_EXPR_STMT (t)); 18586227Stmm break; 18686227Stmm 18786227Stmm default: 18886227Stmm break; 18986227Stmm } 19086227Stmm 191128776Stmm return false; 192128776Stmm} 193133862Smarius