diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a62178dd99710880b9d231f780afa2bf27b23fdc..22e6673eadcf84a023bf57851ef1d02ae866e3b8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-12-30 Gabriel Dos Reis <gdr@integrable-solutions.net> + + * c-pretty-print.h (struct c_pretty_print_info): Add new member + "constant". + (pp_constant): New macro. + * c-pretty-print.c (pp_c_pretty_printer_init): Set pp->constant. + 2005-12-30 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> PR fortran/25586 diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c index 058d3b9644c2a03fd3f88ccb39d7c8bf2d7f0386..516022340ca978669dbe544045b7b2982721a308 100644 --- a/gcc/c-pretty-print.c +++ b/gcc/c-pretty-print.c @@ -2001,6 +2001,7 @@ pp_c_pretty_printer_init (c_pretty_printer *pp) pp->statement = pp_c_statement; + pp->constant = pp_c_constant; pp->id_expression = pp_c_id_expression; pp->primary_expression = pp_c_primary_expression; pp->postfix_expression = pp_c_postfix_expression; diff --git a/gcc/c-pretty-print.h b/gcc/c-pretty-print.h index 0f9d46a86e7596a4ebe74167035c5dfba8c90ad8..14cb670c7edbdf1c55046c2e49e2938843e71e24 100644 --- a/gcc/c-pretty-print.h +++ b/gcc/c-pretty-print.h @@ -80,6 +80,7 @@ struct c_pretty_print_info c_pretty_print_fn statement; + c_pretty_print_fn constant; c_pretty_print_fn id_expression; c_pretty_print_fn primary_expression; c_pretty_print_fn postfix_expression; @@ -129,6 +130,8 @@ struct c_pretty_print_info #define pp_statement(PPI, S) \ pp_c_base (PPI)->statement (pp_c_base (PPI), S) +#define pp_constant(PP, E) \ + pp_c_base (PP)->constant (pp_c_base (PP), E) #define pp_id_expression(PP, E) \ pp_c_base (PP)->id_expression (pp_c_base (PP), E) #define pp_primary_expression(PPI, E) \ diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7391d15018fdffaf887976028ac1739e708543ae..c895ce58f862cd30d5fc700be953cfa6d676f22b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2005-12-30 Gabriel Dos Reis <gdr@integrable-solutions.net> + + * cxx-pretty-print.c (pp_cxx_constant): New. Print + string-literal in parens if input program says so. + (pp_cxx_primary_expression): Hand off constant printing to + pp_cxx_constant. + (pp_cxx_pretty_printer_init): Set pp->c_base.constant. + (pp_cxx_expression): Use pp_cxx_constant for literals. + * error.c (dump_expr): Use pp_constant for literals. + 2005-12-29 Nathan Sidwell <nathan@codesourcery.com> * method.c (make_thunk): Don't set comdat_linkage here. diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index cdaf470ce26e2336ffbb3a111f917e8813c566ac..43fbe2b3bfa02b9bb1cdafa789e21b54c166a01e 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -292,6 +292,29 @@ pp_cxx_qualified_id (cxx_pretty_printer *pp, tree t) } } + +static void +pp_cxx_constant (cxx_pretty_printer *pp, tree t) +{ + switch (TREE_CODE (t)) + { + case STRING_CST: + { + const bool in_parens = PAREN_STRING_LITERAL_P (t); + if (in_parens) + pp_cxx_left_paren (pp); + pp_c_constant (pp_c_base (pp), t); + if (in_parens) + pp_cxx_right_paren (pp); + } + break; + + default: + pp_c_constant (pp_c_base (pp), t); + break; + } +} + /* id-expression: unqualified-id qualified-id */ @@ -321,10 +344,10 @@ pp_cxx_primary_expression (cxx_pretty_printer *pp, tree t) { switch (TREE_CODE (t)) { - case STRING_CST: case INTEGER_CST: case REAL_CST: - pp_c_constant (pp_c_base (pp), t); + case STRING_CST: + pp_cxx_constant (pp, t); break; case BASELINK: @@ -848,7 +871,7 @@ pp_cxx_expression (cxx_pretty_printer *pp, tree t) case STRING_CST: case INTEGER_CST: case REAL_CST: - pp_c_constant (pp_c_base (pp), t); + pp_cxx_constant (pp, t); break; case RESULT_DECL: @@ -1961,6 +1984,7 @@ pp_cxx_pretty_printer_init (cxx_pretty_printer *pp) /* pp->c_base.statement = (pp_fun) pp_cxx_statement; */ + pp->c_base.constant = (pp_fun) pp_cxx_constant; pp->c_base.id_expression = (pp_fun) pp_cxx_id_expression; pp->c_base.primary_expression = (pp_fun) pp_cxx_primary_expression; pp->c_base.postfix_expression = (pp_fun) pp_cxx_postfix_expression; diff --git a/gcc/cp/error.c b/gcc/cp/error.c index be0ee5968eedc673fa8bc8c8b0ee0f866d7fe102..d2ee9c509d7cdd3e2d59d78f2a881972c47fa92c 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1318,17 +1318,10 @@ dump_expr (tree t, int flags) dump_decl (t, (flags & ~TFF_DECL_SPECIFIERS) | TFF_NO_FUNCTION_ARGUMENTS); break; - case STRING_CST: - if (PAREN_STRING_LITERAL_P (t)) - pp_cxx_left_paren (cxx_pp); - pp_c_constant (pp_c_base (cxx_pp), t); - if (PAREN_STRING_LITERAL_P (t)) - pp_cxx_right_paren (cxx_pp); - break; - case INTEGER_CST: case REAL_CST: - pp_c_constant (pp_c_base (cxx_pp), t); + case STRING_CST: + pp_constant (cxx_pp, t); break; case THROW_EXPR: