Home | History | Annotate | Line # | Download | only in c-family
      1 /* Tree-dumping functionality for C-family languages.
      2    Copyright (C) 2002-2022 Free Software Foundation, Inc.
      3    Written by Mark Mitchell <mark (at) 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 dump_stmt (dump_info_p di, const_tree t)
     31 {
     32   if (EXPR_HAS_LOCATION (t))
     33     dump_int (di, "line", EXPR_LINENO (t));
     34 }
     35 
     36 bool
     37 c_dump_tree (void *dump_info, tree t)
     38 {
     39   enum tree_code code;
     40   dump_info_p di = (dump_info_p) dump_info;
     41 
     42   /* Figure out what kind of node this is.  */
     43   code = TREE_CODE (t);
     44 
     45   switch (code)
     46     {
     47     case FIELD_DECL:
     48       if (DECL_C_BIT_FIELD (t))
     49 	dump_string (di, "bitfield");
     50       break;
     51 
     52     case BREAK_STMT:
     53     case CONTINUE_STMT:
     54       dump_stmt (di, t);
     55       break;
     56 
     57     case DO_STMT:
     58       dump_stmt (di, t);
     59       dump_child ("body", DO_BODY (t));
     60       dump_child ("cond", DO_COND (t));
     61       break;
     62 
     63     case FOR_STMT:
     64       dump_stmt (di, t);
     65       dump_child ("init", FOR_INIT_STMT (t));
     66       dump_child ("cond", FOR_COND (t));
     67       dump_child ("expr", FOR_EXPR (t));
     68       dump_child ("body", FOR_BODY (t));
     69       break;
     70 
     71     case SWITCH_STMT:
     72       dump_stmt (di, t);
     73       dump_child ("cond", SWITCH_STMT_COND (t));
     74       dump_child ("body", SWITCH_STMT_BODY (t));
     75       break;
     76 
     77     case WHILE_STMT:
     78       dump_stmt (di, t);
     79       dump_child ("cond", WHILE_COND (t));
     80       dump_child ("body", WHILE_BODY (t));
     81       break;
     82 
     83     default:
     84       break;
     85     }
     86 
     87   return false;
     88 }
     89