00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "config.h"
00023 #include "system.h"
00024 #include "tree.h"
00025 #include "c-tree.h"
00026 #include "tree-dump.h"
00027
00028
00029
00030 void
00031 dump_stmt (di, t)
00032 dump_info_p di;
00033 tree t;
00034 {
00035 dump_int (di, "line", STMT_LINENO (t));
00036 }
00037
00038
00039
00040 void
00041 dump_next_stmt (di, t)
00042 dump_info_p di;
00043 tree t;
00044 {
00045 dump_child ("next", TREE_CHAIN (t));
00046 }
00047
00048
00049
00050 int
00051 c_dump_tree (dump_info, t)
00052 void *dump_info;
00053 tree t;
00054 {
00055 enum tree_code code;
00056 dump_info_p di = (dump_info_p) dump_info;
00057
00058
00059 code = TREE_CODE (t);
00060
00061 switch (code)
00062 {
00063 case FIELD_DECL:
00064 if (DECL_C_BIT_FIELD (t))
00065 dump_string (di, "bitfield");
00066 break;
00067
00068 case ASM_STMT:
00069 dump_stmt (di, t);
00070 if (ASM_VOLATILE_P (t))
00071 dump_string (di, "volatile");
00072 dump_child ("strg", ASM_STRING (t));
00073 dump_child ("outs", ASM_OUTPUTS (t));
00074 dump_child ("ins", ASM_INPUTS (t));
00075 dump_child ("clbr", ASM_CLOBBERS (t));
00076 dump_next_stmt (di, t);
00077 break;
00078
00079 case BREAK_STMT:
00080 case CONTINUE_STMT:
00081 dump_stmt (di, t);
00082 dump_next_stmt (di, t);
00083 break;
00084
00085 case CASE_LABEL:
00086
00087
00088 dump_child ("low", CASE_LOW (t));
00089 dump_child ("high", CASE_HIGH (t));
00090 dump_next_stmt (di, t);
00091 break;
00092
00093 case CLEANUP_STMT:
00094 dump_stmt (di, t);
00095 dump_child ("decl", CLEANUP_DECL (t));
00096 dump_child ("expr", CLEANUP_EXPR (t));
00097 dump_next_stmt (di, t);
00098 break;
00099
00100 case COMPOUND_STMT:
00101 dump_stmt (di, t);
00102 dump_child ("body", COMPOUND_BODY (t));
00103 dump_next_stmt (di, t);
00104 break;
00105
00106 case DECL_STMT:
00107 dump_stmt (di, t);
00108 dump_child ("decl", DECL_STMT_DECL (t));
00109 dump_next_stmt (di, t);
00110 break;
00111
00112 case DO_STMT:
00113 dump_stmt (di, t);
00114 dump_child ("body", DO_BODY (t));
00115 dump_child ("cond", DO_COND (t));
00116 dump_next_stmt (di, t);
00117 break;
00118
00119 case EXPR_STMT:
00120 dump_stmt (di, t);
00121 dump_child ("expr", EXPR_STMT_EXPR (t));
00122 dump_next_stmt (di, t);
00123 break;
00124
00125 case FOR_STMT:
00126 dump_stmt (di, t);
00127 dump_child ("init", FOR_INIT_STMT (t));
00128 dump_child ("cond", FOR_COND (t));
00129 dump_child ("expr", FOR_EXPR (t));
00130 dump_child ("body", FOR_BODY (t));
00131 dump_next_stmt (di, t);
00132 break;
00133
00134 case GOTO_STMT:
00135 dump_stmt (di, t);
00136 dump_child ("dest", GOTO_DESTINATION (t));
00137 dump_next_stmt (di, t);
00138 break;
00139
00140 case IF_STMT:
00141 dump_stmt (di, t);
00142 dump_child ("cond", IF_COND (t));
00143 dump_child ("then", THEN_CLAUSE (t));
00144 dump_child ("else", ELSE_CLAUSE (t));
00145 dump_next_stmt (di, t);
00146 break;
00147
00148 case LABEL_STMT:
00149 dump_stmt (di, t);
00150 dump_child ("labl", LABEL_STMT_LABEL (t));
00151 dump_next_stmt (di, t);
00152 break;
00153
00154 case RETURN_STMT:
00155 dump_stmt (di, t);
00156 dump_child ("expr", RETURN_STMT_EXPR (t));
00157 dump_next_stmt (di, t);
00158 break;
00159
00160 case SWITCH_STMT:
00161 dump_stmt (di, t);
00162 dump_child ("cond", SWITCH_COND (t));
00163 dump_child ("body", SWITCH_BODY (t));
00164 dump_next_stmt (di, t);
00165 break;
00166
00167 case WHILE_STMT:
00168 dump_stmt (di, t);
00169 dump_child ("cond", WHILE_COND (t));
00170 dump_child ("body", WHILE_BODY (t));
00171 dump_next_stmt (di, t);
00172 break;
00173
00174 case SCOPE_STMT:
00175 dump_stmt (di, t);
00176 if (SCOPE_BEGIN_P (t))
00177 dump_string (di, "begn");
00178 else
00179 dump_string (di, "end");
00180 if (SCOPE_NULLIFIED_P (t))
00181 dump_string (di, "null");
00182 if (!SCOPE_NO_CLEANUPS_P (t))
00183 dump_string (di, "clnp");
00184 dump_next_stmt (di, t);
00185 break;
00186
00187 case STMT_EXPR:
00188 dump_child ("stmt", STMT_EXPR_STMT (t));
00189 break;
00190
00191 default:
00192 break;
00193 }
00194
00195 return 0;
00196 }