From 558ee214f31ef39421944b6c78cf3218b61c1337 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 26 Jul 2002 09:45:38 -0400 Subject: [PATCH] c-dump.c: Resurrect. * c-dump.c: Resurrect. * tree-dump.c: Move C-specific stuff to c-dump.c. * c-common.h: Declare c_dump_tree. * c-lang.c (LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN): Define. * Makefile.in (C_AND_OBJC_OBJS): Add c-dump.o. (c-dump.o): New rule. cp/ * dump.c (cp_dump_tree): Call c_dump_tree. * Make-lang.in (CXX_C_OBJS): Add c-dump.o. From-SVN: r55776 --- gcc/ChangeLog | 9 ++ gcc/Makefile.in | 4 +- gcc/c-common.h | 2 + gcc/c-dump.c | 196 ++++++++++++++++++++++++++++++++++++++++++++ gcc/c-lang.c | 2 + gcc/cp/ChangeLog | 5 ++ gcc/cp/Make-lang.in | 2 +- gcc/cp/dump.c | 6 +- gcc/tree-dump.c | 146 --------------------------------- 9 files changed, 220 insertions(+), 152 deletions(-) create mode 100644 gcc/c-dump.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index da23465410f..dbcc464ef8e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2002-07-26 Jason Merrill + + * c-dump.c: Resurrect. + * tree-dump.c: Move C-specific stuff to c-dump.c. + * c-common.h: Declare c_dump_tree. + * c-lang.c (LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN): Define. + * Makefile.in (C_AND_OBJC_OBJS): Add c-dump.o. + (c-dump.o): New rule. + 2002-07-26 Alan Modra * config/rs6000/rs6000.md: Enable patterns using rlwinm for diff --git a/gcc/Makefile.in b/gcc/Makefile.in index d5ab8754c4a..f878050a84d 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -713,7 +713,7 @@ CXX_TARGET_OBJS=@cxx_target_objs@ # Language-specific object files for C and Objective C. C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \ c-convert.o c-aux-info.o c-common.o c-format.o c-semantics.o \ - c-objc-common.o libcpp.a $(C_TARGET_OBJS) + c-objc-common.o c-dump.o libcpp.a $(C_TARGET_OBJS) # Language-specific object files for C. C_OBJS = c-parse.o c-lang.o $(C_AND_OBJC_OBJS) @@ -1251,6 +1251,8 @@ c-semantics.o : c-semantics.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \ flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \ $(EXPR_H) $(PREDICT_H) +c-dump.o : c-dump.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) tree-dump.h + # Language-independent files. DRIVER_DEFINES = \ diff --git a/gcc/c-common.h b/gcc/c-common.h index 5dfa2d610f4..abdd859c54e 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -912,4 +912,6 @@ struct c_fileinfo struct c_fileinfo *get_fileinfo PARAMS ((const char *)); extern void dump_time_statistics PARAMS ((void)); +extern int c_dump_tree PARAMS ((void *, tree)); + #endif /* ! GCC_C_COMMON_H */ diff --git a/gcc/c-dump.c b/gcc/c-dump.c new file mode 100644 index 00000000000..6ca07664fbe --- /dev/null +++ b/gcc/c-dump.c @@ -0,0 +1,196 @@ +/* Tree-dumping functionality for C-family languages. + Copyright (C) 2002 Free Software Foundation, Inc. + Written by Mark Mitchell + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + +#include "config.h" +#include "system.h" +#include "tree.h" +#include "c-tree.h" +#include "tree-dump.h" + +/* Dump information common to statements from STMT. */ + +void +dump_stmt (di, t) + dump_info_p di; + tree t; +{ + dump_int (di, "line", STMT_LINENO (t)); +} + +/* Dump the next statement after STMT. */ + +void +dump_next_stmt (di, t) + dump_info_p di; + tree t; +{ + dump_child ("next", TREE_CHAIN (t)); +} + +/* Dump any C-specific tree codes and attributes of common codes. */ + +int +c_dump_tree (dump_info, t) + void *dump_info; + tree t; +{ + enum tree_code code; + dump_info_p di = (dump_info_p) dump_info; + + /* Figure out what kind of node this is. */ + code = TREE_CODE (t); + + switch (code) + { + case FIELD_DECL: + if (DECL_C_BIT_FIELD (t)) + dump_string (di, "bitfield"); + break; + + case ASM_STMT: + dump_stmt (di, t); + if (ASM_VOLATILE_P (t)) + dump_string (di, "volatile"); + dump_child ("strg", ASM_STRING (t)); + dump_child ("outs", ASM_OUTPUTS (t)); + dump_child ("ins", ASM_INPUTS (t)); + dump_child ("clbr", ASM_CLOBBERS (t)); + dump_next_stmt (di, t); + break; + + case BREAK_STMT: + case CONTINUE_STMT: + dump_stmt (di, t); + dump_next_stmt (di, t); + break; + + case CASE_LABEL: + /* Note that a case label is not like other statements; there is + no way to get the line-number of a case label. */ + dump_child ("low", CASE_LOW (t)); + dump_child ("high", CASE_HIGH (t)); + dump_next_stmt (di, t); + break; + + case CLEANUP_STMT: + dump_stmt (di, t); + dump_child ("decl", CLEANUP_DECL (t)); + dump_child ("expr", CLEANUP_EXPR (t)); + dump_next_stmt (di, t); + break; + + case COMPOUND_STMT: + dump_stmt (di, t); + dump_child ("body", COMPOUND_BODY (t)); + dump_next_stmt (di, t); + break; + + case DECL_STMT: + dump_stmt (di, t); + dump_child ("decl", DECL_STMT_DECL (t)); + dump_next_stmt (di, t); + break; + + case DO_STMT: + dump_stmt (di, t); + dump_child ("body", DO_BODY (t)); + dump_child ("cond", DO_COND (t)); + dump_next_stmt (di, t); + break; + + case EXPR_STMT: + dump_stmt (di, t); + dump_child ("expr", EXPR_STMT_EXPR (t)); + dump_next_stmt (di, t); + break; + + case FOR_STMT: + dump_stmt (di, t); + dump_child ("init", FOR_INIT_STMT (t)); + dump_child ("cond", FOR_COND (t)); + dump_child ("expr", FOR_EXPR (t)); + dump_child ("body", FOR_BODY (t)); + dump_next_stmt (di, t); + break; + + case GOTO_STMT: + dump_stmt (di, t); + dump_child ("dest", GOTO_DESTINATION (t)); + dump_next_stmt (di, t); + break; + + case IF_STMT: + dump_stmt (di, t); + dump_child ("cond", IF_COND (t)); + dump_child ("then", THEN_CLAUSE (t)); + dump_child ("else", ELSE_CLAUSE (t)); + dump_next_stmt (di, t); + break; + + case LABEL_STMT: + dump_stmt (di, t); + dump_child ("labl", LABEL_STMT_LABEL (t)); + dump_next_stmt (di, t); + break; + + case RETURN_STMT: + dump_stmt (di, t); + dump_child ("expr", RETURN_EXPR (t)); + dump_next_stmt (di, t); + break; + + case SWITCH_STMT: + dump_stmt (di, t); + dump_child ("cond", SWITCH_COND (t)); + dump_child ("body", SWITCH_BODY (t)); + dump_next_stmt (di, t); + break; + + case WHILE_STMT: + dump_stmt (di, t); + dump_child ("cond", WHILE_COND (t)); + dump_child ("body", WHILE_BODY (t)); + dump_next_stmt (di, t); + break; + + case SCOPE_STMT: + dump_stmt (di, t); + if (SCOPE_BEGIN_P (t)) + dump_string (di, "begn"); + else + dump_string (di, "end"); + if (SCOPE_NULLIFIED_P (t)) + dump_string (di, "null"); + if (!SCOPE_NO_CLEANUPS_P (t)) + dump_string (di, "clnp"); + dump_next_stmt (di, t); + break; + + case STMT_EXPR: + dump_child ("stmt", STMT_EXPR_STMT (t)); + break; + + default: + break; + } + + return 0; +} diff --git a/gcc/c-lang.c b/gcc/c-lang.c index 60588fbd82d..346e2aa3e06 100644 --- a/gcc/c-lang.c +++ b/gcc/c-lang.c @@ -95,6 +95,8 @@ static void c_init_options PARAMS ((void)); #undef LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING #define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \ c_convert_parm_for_inlining +#undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN +#define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN c_dump_tree #undef LANG_HOOKS_TYPE_FOR_MODE #define LANG_HOOKS_TYPE_FOR_MODE c_common_type_for_mode diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4ee3d41a48a..bd9af440946 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2002-07-26 Jason Merrill + + * dump.c (cp_dump_tree): Call c_dump_tree. + * Make-lang.in (CXX_C_OBJS): Add c-dump.o. + 2002-07-25 Neil Booth * error.c (print_whitespace): Remove. diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index 40d2388e0d8..44966f4c46a 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -96,7 +96,7 @@ $(DEMANGLER_PROG): cxxmain.o underscore.o $(LIBDEPS) # The compiler itself. # Shared with C front end: CXX_C_OBJS = attribs.o c-common.o c-format.o c-pragma.o c-semantics.o c-lex.o \ - $(CXX_TARGET_OBJS) + c-dump.o $(CXX_TARGET_OBJS) # Language-specific object files. CXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o \ diff --git a/gcc/cp/dump.c b/gcc/cp/dump.c index e0bc410bcae..0b404a1bab3 100644 --- a/gcc/cp/dump.c +++ b/gcc/cp/dump.c @@ -48,8 +48,7 @@ dump_access (di, t) } /* Dump a representation of the specific operator for an overloaded - operator associated with node t. -*/ + operator associated with node t. */ static void dump_op (di, t) @@ -413,6 +412,5 @@ cp_dump_tree (dump_info, t) break; } - return 0; + return c_dump_tree (di, t); } - diff --git a/gcc/tree-dump.c b/gcc/tree-dump.c index 293a8d188ae..5348c2d1be3 100644 --- a/gcc/tree-dump.c +++ b/gcc/tree-dump.c @@ -22,7 +22,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "config.h" #include "system.h" #include "tree.h" -#include "c-tree.h" #include "splay-tree.h" #include "diagnostic.h" #include "toplev.h" @@ -225,26 +224,6 @@ dump_string_field (di, field, string) di->column += 14; } -/* Dump information common to statements from STMT. */ - -void -dump_stmt (di, t) - dump_info_p di; - tree t; -{ - dump_int (di, "line", STMT_LINENO (t)); -} - -/* Dump the next statement after STMT. */ - -void -dump_next_stmt (di, t) - dump_info_p di; - tree t; -{ - dump_child ("next", TREE_CHAIN (t)); -} - /* Dump the next node in the queue. */ static void @@ -497,8 +476,6 @@ dequeue_and_dump (di) if (TREE_CODE (t) == FIELD_DECL) { - if (DECL_C_BIT_FIELD (t)) - dump_string (di, "bitfield"); if (DECL_FIELD_OFFSET (t)) dump_child ("bpos", bit_position (t)); } @@ -523,125 +500,6 @@ dequeue_and_dump (di) dump_child ("body", DECL_SAVED_TREE (t)); break; - case ASM_STMT: - dump_stmt (di, t); - if (ASM_VOLATILE_P (t)) - dump_string (di, "volatile"); - dump_child ("strg", ASM_STRING (t)); - dump_child ("outs", ASM_OUTPUTS (t)); - dump_child ("ins", ASM_INPUTS (t)); - dump_child ("clbr", ASM_CLOBBERS (t)); - dump_next_stmt (di, t); - break; - - case BREAK_STMT: - case CONTINUE_STMT: - dump_stmt (di, t); - dump_next_stmt (di, t); - break; - - case CASE_LABEL: - /* Note that a case label is not like other statements; there is - no way to get the line-number of a case label. */ - dump_child ("low", CASE_LOW (t)); - dump_child ("high", CASE_HIGH (t)); - dump_next_stmt (di, t); - break; - - case CLEANUP_STMT: - dump_stmt (di, t); - dump_child ("decl", CLEANUP_DECL (t)); - dump_child ("expr", CLEANUP_EXPR (t)); - dump_next_stmt (di, t); - break; - - case COMPOUND_STMT: - dump_stmt (di, t); - dump_child ("body", COMPOUND_BODY (t)); - dump_next_stmt (di, t); - break; - - case DECL_STMT: - dump_stmt (di, t); - dump_child ("decl", DECL_STMT_DECL (t)); - dump_next_stmt (di, t); - break; - - case DO_STMT: - dump_stmt (di, t); - dump_child ("body", DO_BODY (t)); - dump_child ("cond", DO_COND (t)); - dump_next_stmt (di, t); - break; - - case EXPR_STMT: - dump_stmt (di, t); - dump_child ("expr", EXPR_STMT_EXPR (t)); - dump_next_stmt (di, t); - break; - - case FOR_STMT: - dump_stmt (di, t); - dump_child ("init", FOR_INIT_STMT (t)); - dump_child ("cond", FOR_COND (t)); - dump_child ("expr", FOR_EXPR (t)); - dump_child ("body", FOR_BODY (t)); - dump_next_stmt (di, t); - break; - - case GOTO_STMT: - dump_stmt (di, t); - dump_child ("dest", GOTO_DESTINATION (t)); - dump_next_stmt (di, t); - break; - - case IF_STMT: - dump_stmt (di, t); - dump_child ("cond", IF_COND (t)); - dump_child ("then", THEN_CLAUSE (t)); - dump_child ("else", ELSE_CLAUSE (t)); - dump_next_stmt (di, t); - break; - - case LABEL_STMT: - dump_stmt (di, t); - dump_child ("labl", LABEL_STMT_LABEL (t)); - dump_next_stmt (di, t); - break; - - case RETURN_STMT: - dump_stmt (di, t); - dump_child ("expr", RETURN_EXPR (t)); - dump_next_stmt (di, t); - break; - - case SWITCH_STMT: - dump_stmt (di, t); - dump_child ("cond", SWITCH_COND (t)); - dump_child ("body", SWITCH_BODY (t)); - dump_next_stmt (di, t); - break; - - case WHILE_STMT: - dump_stmt (di, t); - dump_child ("cond", WHILE_COND (t)); - dump_child ("body", WHILE_BODY (t)); - dump_next_stmt (di, t); - break; - - case SCOPE_STMT: - dump_stmt (di, t); - if (SCOPE_BEGIN_P (t)) - dump_string (di, "begn"); - else - dump_string (di, "end"); - if (SCOPE_NULLIFIED_P (t)) - dump_string (di, "null"); - if (!SCOPE_NO_CLEANUPS_P (t)) - dump_string (di, "clnp"); - dump_next_stmt (di, t); - break; - case INTEGER_CST: if (TREE_INT_CST_HIGH (t)) dump_int (di, "high", TREE_INT_CST_HIGH (t)); @@ -693,10 +551,6 @@ dequeue_and_dump (di) dump_child ("elts", TREE_OPERAND (t, 1)); break; - case STMT_EXPR: - dump_child ("stmt", STMT_EXPR_STMT (t)); - break; - case BIND_EXPR: dump_child ("vars", TREE_OPERAND (t, 0)); dump_child ("body", TREE_OPERAND (t, 1)); -- 2.30.2