diff options
author | Gabriel Dos Reis <gdr@nerim.net> | 2002-07-30 13:48:06 +0000 |
---|---|---|
committer | Gabriel Dos Reis <gdr@gcc.gnu.org> | 2002-07-30 13:48:06 +0000 |
commit | 7ff4a7ef7036d7356ffeb5a753581b78b824a2d6 (patch) | |
tree | ed3862a805f13d16545214c641e4aa444b424cd8 | |
parent | a15e868a957adedfec71a27b4ff96293eff89d18 (diff) | |
download | gcc-7ff4a7ef7036d7356ffeb5a753581b78b824a2d6.zip gcc-7ff4a7ef7036d7356ffeb5a753581b78b824a2d6.tar.gz gcc-7ff4a7ef7036d7356ffeb5a753581b78b824a2d6.tar.bz2 |
c-pretty-print.h (pp_c_statement): Declare.
* c-pretty-print.h (pp_c_statement): Declare.
* c-pretty-print.c (pp_c_postfix_expression): #if 0 support for SRCLOC.
(pp_c_statement): Define.
From-SVN: r55874
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-pretty-print.c | 255 | ||||
-rw-r--r-- | gcc/c-pretty-print.h | 7 |
3 files changed, 261 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e85d904..f039b24 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2002-07-30 Gabriel Dos Reis <gdr@nerim.net> + + * c-pretty-print.h (pp_c_statement): Declare. + * c-pretty-print.c (pp_c_postfix_expression): #if 0 support for SRCLOC. + (pp_c_statement): Define. + 2002-07-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * alpha.h, arc.h, arm/aout.h, avr.h, c4x.h, cris.h, d30v.h, diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c index 19c83d4..c861d17 100644 --- a/gcc/c-pretty-print.c +++ b/gcc/c-pretty-print.c @@ -71,9 +71,6 @@ pp_c_cv_qualifier (ppi, cv) } -/* Statements. */ - - /* Expressions. */ /* Print out a c-char. */ @@ -501,6 +498,30 @@ pp_c_postfix_expression (ppi, e) pp_initializer (ppi, e); break; +#if 0 + case SRCLOC: + pp_left_paren (ppi); + pp_identifier (ppi, "__location__"); + pp_right_paren (ppi); + pp_whitespace (ppi); + pp_left_brace (ppi); + pp_dot (ppi); + pp_identifier (ppi, "file"); + pp_whitespace (ppi); + pp_equal (ppi); + pp_c_whitespace (ppi); + pp_c_expression (ppi, SRCLOC_FILE (e)); + pp_separate_with (ppi, ','); + pp_dot (ppi); + pp_identifier (ppi, "line"); + pp_whitespace (ppi); + pp_equal (ppi); + pp_c_whitespace (ppi); + pp_c_expression (ppi, SRCLOC_LINE (e)); + pp_right_brace (ppi); + break; +#endif + case VA_ARG_EXPR: pp_c_identifier (ppi, "__builtin_va_arg"); pp_c_left_paren (ppi); @@ -516,7 +537,7 @@ pp_c_postfix_expression (ppi, e) } } -/* Print out an expession-list; E is expected to be a TREE_LIST */ +/* Print out an expression-list; E is expected to be a TREE_LIST */ void pp_c_expression_list (ppi, e) c_pretty_print_info *ppi; @@ -1000,3 +1021,229 @@ pp_c_expression (ppi, e) } } + +/* Statements. */ +void +pp_c_statement (ppi, stmt) + c_pretty_print_info *ppi; + tree stmt; +{ + const enum tree_code code = TREE_CODE (stmt); + switch (code) + { + case LABEL_STMT: + case CASE_LABEL: + pp_newline (ppi); + if (code == LABEL_STMT) + pp_tree_identifier (ppi, DECL_NAME (LABEL_STMT_LABEL (stmt))); + else if (code == LABEL_STMT) + { + if (CASE_LOW (stmt) == NULL_TREE) + pp_identifier (ppi, "default"); + else + { + pp_c_identifier (ppi, "case"); + pp_c_whitespace (ppi); + pp_conditional_expression (ppi, CASE_LOW (stmt)); + if (CASE_HIGH (stmt)) + { + pp_identifier (ppi, "..."); + pp_conditional_expression (ppi, CASE_HIGH (stmt)); + } + } + } + pp_colon (ppi); + pp_newline_and_indent (ppi, 3); + break; + + case COMPOUND_STMT: + pp_left_brace (ppi); + pp_newline_and_indent (ppi, 3); + for (stmt = COMPOUND_BODY (stmt); stmt; stmt = TREE_CHAIN (stmt)) + pp_c_statement (ppi, stmt); + pp_newline_and_indent (ppi, -3); + pp_right_brace (ppi); + pp_newline (ppi); + break; + + case EXPR_STMT: + case CLEANUP_STMT: + pp_newline (ppi); + pp_c_expression (ppi, code == EXPR_STMT + ? EXPR_STMT_EXPR (stmt) + : CLEANUP_EXPR (stmt)); + pp_semicolon (ppi); + pp_newline (ppi); + break; + + case IF_STMT: + pp_c_identifier (ppi, "if"); + pp_whitespace (ppi); + pp_c_left_paren (ppi); + pp_c_expression (ppi, IF_COND (stmt)); + pp_right_paren (ppi); + pp_newline_and_indent (ppi, 3); + pp_statement (ppi, THEN_CLAUSE (stmt)); + pp_newline_and_indent (ppi, -3); + if (ELSE_CLAUSE (stmt)) + { + tree else_clause = ELSE_CLAUSE (stmt); + pp_c_identifier (ppi, "else"); + if (TREE_CODE (else_clause) == IF_STMT) + pp_c_whitespace (ppi); + else + pp_newline_and_indent (ppi, 3); + pp_statement (ppi, else_clause); + if (TREE_CODE (else_clause) != IF_STMT) + pp_newline_and_indent (ppi, -3); + } + break; + + case SWITCH_STMT: + pp_newline (ppi); + pp_c_identifier (ppi, "switch"); + pp_whitespace (ppi); + pp_c_left_paren (ppi); + pp_c_expression (ppi, SWITCH_COND (stmt)); + pp_right_paren (ppi); + pp_newline_and_indent (ppi, 3); + pp_statement (ppi, SWITCH_BODY (stmt)); + pp_newline_and_indent (ppi, -3); + break; + + case WHILE_STMT: + pp_c_identifier (ppi, "while"); + pp_whitespace (ppi); + pp_c_left_paren (ppi); + pp_c_expression (ppi, WHILE_COND (stmt)); + pp_right_paren (ppi); + pp_newline_and_indent (ppi, 3); + pp_statement (ppi, WHILE_BODY (stmt)); + pp_newline_and_indent (ppi, -3); + break; + + case DO_STMT: + pp_c_identifier (ppi, "do"); + pp_newline_and_indent (ppi, 3); + pp_statement (ppi, DO_BODY (stmt)); + pp_newline_and_indent (ppi, -3); + pp_c_identifier (ppi, "while"); + pp_whitespace (ppi); + pp_c_left_paren (ppi); + pp_c_expression (ppi, DO_COND (stmt)); + pp_c_right_paren (ppi); + pp_semicolon (ppi); + pp_newline (ppi); + break; + + case FOR_STMT: + pp_c_identifier (ppi, "for"); + pp_whitespace (ppi); + pp_c_left_paren (ppi); + pp_statement (ppi, FOR_INIT_STMT (stmt)); + pp_c_whitespace (ppi); + if (FOR_COND (stmt)) + pp_c_expression (ppi, FOR_COND (stmt)); + pp_semicolon (ppi); + pp_c_whitespace (ppi); + if (FOR_EXPR (stmt)) + pp_c_expression (ppi, FOR_EXPR (stmt)); + pp_right_paren (ppi); + pp_newline_and_indent (ppi, 3); + pp_statement (ppi, FOR_BODY (stmt)); + pp_newline_and_indent (ppi, -3); + break; + + case BREAK_STMT: + case CONTINUE_STMT: + pp_newline (ppi); + pp_identifier (ppi, code == BREAK_STMT ? "break" : "continue"); + pp_semicolon (ppi); + pp_newline (ppi); + break; + + case RETURN_STMT: + case GOTO_STMT: + { + tree e = code == RETURN_STMT + ? RETURN_EXPR (stmt) + : GOTO_DESTINATION (stmt); + + pp_newline (ppi); + pp_c_identifier (ppi, code == RETURN_STMT ? "return" : "goto"); + if (e) + pp_c_expression (ppi, e); + pp_semicolon (ppi); + pp_newline (ppi); + } + break; + + case SCOPE_STMT: + if (!SCOPE_NULLIFIED_P (stmt) && SCOPE_NO_CLEANUPS_P (stmt)) + { + if (SCOPE_BEGIN_P (stmt)) + { + pp_left_brace (ppi); + pp_newline_and_indent (ppi, 3); + } + else if (SCOPE_END_P (stmt)) + { + pp_right_brace (ppi); + pp_newline_and_indent (ppi, -3); + } + } + break; + + case DECL_STMT: + pp_declaration (ppi, DECL_STMT_DECL (stmt)); + pp_semicolon (ppi); + pp_newline (ppi); + break; + + case ASM_STMT: + { + bool has_volatile_p = ASM_VOLATILE_P (stmt); + bool is_extended = has_volatile_p || ASM_INPUTS (stmt) + || ASM_OUTPUTS (stmt) || ASM_CLOBBERS (stmt); + pp_c_identifier (ppi, is_extended ? "__asm__" : "asm"); + if (has_volatile_p) + pp_c_identifier (ppi, "__volatile__"); + pp_whitespace (ppi); + pp_c_left_paren (ppi); + pp_c_string_literal (ppi, ASM_STRING (stmt)); + if (is_extended) + { + pp_whitespace (ppi); + pp_separate_with (ppi, ':'); + if (ASM_OUTPUTS (stmt)) + pp_c_expression (ppi, ASM_OUTPUTS (stmt)); + pp_whitespace (ppi); + pp_separate_with (ppi, ':'); + if (ASM_INPUTS (stmt)) + pp_c_expression (ppi, ASM_INPUTS (stmt)); + pp_whitespace (ppi); + pp_separate_with (ppi, ':'); + if (ASM_CLOBBERS (stmt)) + pp_c_expression (ppi, ASM_CLOBBERS (stmt)); + } + pp_right_paren (ppi); + pp_newline (ppi); + } + break; + + case FILE_STMT: + pp_c_identifier (ppi, "__FILE__"); + pp_whitespace (ppi); + pp_equal (ppi); + pp_c_whitespace (ppi); + pp_c_identifier (ppi, FILE_STMT_FILENAME (stmt)); + pp_semicolon (ppi); + pp_newline (ppi); + break; + + default: + pp_unsupported_tree (ppi, stmt); + } + +} + diff --git a/gcc/c-pretty-print.h b/gcc/c-pretty-print.h index 53ff32f..13bd432 100644 --- a/gcc/c-pretty-print.h +++ b/gcc/c-pretty-print.h @@ -119,8 +119,8 @@ struct c_pretty_print_info #define pp_initializer(PPI, E) (*(PPI)->initializer) (PPI, E) #define pp_multiplicative_expression(PPI, E)\ (*(PPI)->multiplicative_expression) (PPI, E) -#define pp_conditional_expession(PPI, E) \ - (*(PPI)->conditional_expression (PPI, E)) +#define pp_conditional_expression(PPI, E) \ + (*(PPI)->conditional_expression) (PPI, E) #define pp_assignment_expression(PPI, E) \ (*(PPI)->assignment_expression) (PPI, E) @@ -131,7 +131,8 @@ void pp_c_parameter_declaration_clause PARAMS ((c_pretty_print_info *, tree)); void pp_c_declaration PARAMS ((c_pretty_print_info *, tree)); void pp_c_statement PARAMS ((c_pretty_print_info *, tree)); void pp_c_expression PARAMS ((c_pretty_print_info *, tree)); - +/* Statements. */ +void pp_c_statement PARAMS ((c_pretty_print_info *, tree)); /* Expressions. */ void pp_c_expression PARAMS ((c_pretty_print_info *, tree)); void pp_c_logical_or_expression PARAMS ((c_pretty_print_info *, tree)); |