#include "langhooks-def.h"
#include "cxx-pretty-print.h"
-#define pp_template_argument_list_start(PP) \
- pp_non_consecutive_character (PP, '<')
-#define pp_template_argument_list_end(PP) \
- pp_non_consecutive_character (PP, '>')
-#define pp_separate_with_comma(PP) pp_string (PP, ", ")
+#define pp_separate_with_comma(PP) pp_cxx_separate_with (PP, ',')
/* The global buffer where we dump everything. It is there only for
transitional purpose. It is expected, in the near future, to be
# define NEXT_CODE(T) (TREE_CODE (TREE_TYPE (T)))
-#define reinit_global_formatting_buffer() \
- pp_clear_output_area (scratch_buffer)
-
static const char *args_to_string (tree, int);
static const char *assop_to_string (enum tree_code);
static const char *code_to_string (enum tree_code);
static void cp_print_error_function (diagnostic_context *, diagnostic_info *);
static bool cp_printer (pretty_printer *, text_info *);
-static void pp_non_consecutive_character (cxx_pretty_printer *, int);
static tree locate_error (const char *, va_list);
static location_t location_of (tree);
if (scope != global_namespace)
{
dump_decl (scope, f);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
}
}
else if (AGGREGATE_TYPE_P (scope))
{
dump_type (scope, f);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
}
else if ((flags & TFF_SCOPE) && TREE_CODE (scope) == FUNCTION_DECL)
{
dump_function_decl (scope, f);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
}
}
{
if (flags & TFF_DECL_SPECIFIERS)
{
- pp_identifier (cxx_pp, "class");
+ pp_cxx_identifier (cxx_pp, "class");
if (DECL_NAME (p))
- {
- pp_space (cxx_pp);
- pp_tree_identifier (cxx_pp, DECL_NAME (p));
- }
+ pp_cxx_tree_identifier (cxx_pp, DECL_NAME (p));
}
else if (DECL_NAME (p))
- pp_tree_identifier (cxx_pp, DECL_NAME (p));
+ pp_cxx_tree_identifier (cxx_pp, DECL_NAME (p));
else
pp_cxx_canonical_template_parameter (cxx_pp, TREE_TYPE (p));
}
if ((flags & TFF_FUNCTION_DEFAULT_ARGUMENTS) && a != NULL_TREE)
{
- pp_string (cxx_pp, " = ");
+ pp_cxx_whitespace (cxx_pp);
+ pp_equal (cxx_pp);
+ pp_cxx_whitespace (cxx_pp);
if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
dump_type (a, flags & ~TFF_CHASE_TYPEDEF);
else
if (need_comma)
pp_separate_with_comma (cxx_pp);
dump_template_parameter (TREE_VEC_ELT (p, i), TFF_PLAIN_IDENTIFIER);
- pp_string (cxx_pp, " = ");
+ pp_cxx_whitespace (cxx_pp);
+ pp_equal (cxx_pp);
+ pp_cxx_whitespace (cxx_pp);
if (arg)
dump_template_argument (arg, TFF_PLAIN_IDENTIFIER);
else
break;
case IDENTIFIER_NODE:
- pp_tree_identifier (cxx_pp, t);
+ pp_cxx_tree_identifier (cxx_pp, t);
break;
case TREE_VEC:
case BOOLEAN_TYPE:
case COMPLEX_TYPE:
case VECTOR_TYPE:
- pp_base (cxx_pp)->padding = pp_none;
pp_type_specifier_seq (cxx_pp, t);
break;
case TEMPLATE_TEMPLATE_PARM:
/* For parameters inside template signature. */
if (TYPE_IDENTIFIER (t))
- pp_tree_identifier (cxx_pp, TYPE_IDENTIFIER (t));
+ pp_cxx_tree_identifier (cxx_pp, TYPE_IDENTIFIER (t));
else
pp_cxx_canonical_template_parameter (cxx_pp, t);
break;
case BOUND_TEMPLATE_TEMPLATE_PARM:
{
tree args = TYPE_TI_ARGS (t);
- pp_tree_identifier (cxx_pp, TYPE_IDENTIFIER (t));
- pp_template_argument_list_start (cxx_pp);
+ pp_cxx_tree_identifier (cxx_pp, TYPE_IDENTIFIER (t));
+ pp_cxx_begin_template_argument_list (cxx_pp);
dump_template_argument_list (args, flags);
- pp_template_argument_list_end (cxx_pp);
+ pp_cxx_end_template_argument_list (cxx_pp);
}
break;
case TEMPLATE_TYPE_PARM:
pp_cxx_cv_qualifier_seq (cxx_pp, t);
if (TYPE_IDENTIFIER (t))
- pp_tree_identifier (cxx_pp, TYPE_IDENTIFIER (t));
+ pp_cxx_tree_identifier (cxx_pp, TYPE_IDENTIFIER (t));
else
pp_cxx_canonical_template_parameter
(cxx_pp, TEMPLATE_TYPE_PARM_INDEX (t));
}
case TYPENAME_TYPE:
pp_cxx_cv_qualifier_seq (cxx_pp, t);
- pp_string (cxx_pp, "typename ");
+ pp_cxx_identifier (cxx_pp, "typename");
dump_typename (t, flags);
break;
case UNBOUND_CLASS_TEMPLATE:
dump_type (TYPE_CONTEXT (t), flags);
- pp_colon_colon (cxx_pp);
- pp_identifier (cxx_pp, "template ");
+ pp_cxx_colon_colon (cxx_pp);
+ pp_cxx_identifier (cxx_pp, "template");
dump_type (DECL_NAME (TYPE_NAME (t)), flags);
break;
case TYPEOF_TYPE:
- pp_string (cxx_pp, "__typeof (");
+ pp_cxx_identifier (cxx_pp, "__typeof__");
+ pp_cxx_whitespace (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr (TYPEOF_TYPE_EXPR (t), flags & ~TFF_EXPR_IN_PARENS);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
break;
default:
dump_typename (ctx, flags);
else
dump_type (ctx, flags & ~TFF_CLASS_KEY_OR_ENUM);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
dump_decl (TYPENAME_TYPE_FULLNAME (t), flags);
}
pp_cxx_cv_qualifier_seq (cxx_pp, t);
if (flags & TFF_CLASS_KEY_OR_ENUM)
- {
- pp_identifier (cxx_pp, variety);
- pp_space (cxx_pp);
- }
+ pp_cxx_identifier (cxx_pp, variety);
if (flags & TFF_CHASE_TYPEDEF)
t = TYPE_MAIN_VARIANT (t);
pp_printf (pp_base (cxx_pp), "<anonymous %s>", variety);
}
else
- pp_tree_identifier (cxx_pp, name);
+ pp_cxx_tree_identifier (cxx_pp, name);
if (tmplate)
dump_template_parms (TYPE_TEMPLATE_INFO (t),
!CLASSTYPE_USE_TEMPLATE (t),
static void
dump_type_prefix (tree t, int flags)
{
- pp_base (cxx_pp)->padding = pp_none;
-
if (TYPE_PTRMEMFUNC_P (t))
{
t = TYPE_PTRMEMFUNC_FN_TYPE (t);
dump_type_prefix (sub, flags);
if (TREE_CODE (sub) == ARRAY_TYPE)
{
- pp_space (cxx_pp);
- pp_left_paren (cxx_pp);
+ pp_cxx_whitespace (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
}
pp_character (cxx_pp, "&*"[TREE_CODE (t) == POINTER_TYPE]);
pp_base (cxx_pp)->padding = pp_before;
{
pp_maybe_space (cxx_pp);
dump_type (TYPE_OFFSET_BASETYPE (t), flags);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
}
- pp_star (cxx_pp);
+ pp_cxx_star (cxx_pp);
pp_cxx_cv_qualifier_seq (cxx_pp, t);
break;
case FUNCTION_TYPE:
dump_type_prefix (TREE_TYPE (t), flags);
pp_maybe_space (cxx_pp);
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
break;
case METHOD_TYPE:
dump_type_prefix (TREE_TYPE (t), flags);
pp_maybe_space (cxx_pp);
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_aggr_type (TYPE_METHOD_BASETYPE (t), flags);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
break;
case ARRAY_TYPE:
case REFERENCE_TYPE:
case OFFSET_TYPE:
if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
dump_type_suffix (TREE_TYPE (t), flags);
break;
case METHOD_TYPE:
{
tree arg;
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
arg = TYPE_ARG_TYPES (t);
if (TREE_CODE (t) == METHOD_TYPE)
arg = TREE_CHAIN (arg);
}
case ARRAY_TYPE:
- pp_left_bracket (cxx_pp);
+ pp_cxx_left_bracket (cxx_pp);
if (TYPE_DOMAIN (t))
{
if (host_integerp (TYPE_MAX_VALUE (TYPE_DOMAIN (t)), 0))
integer_one_node)),
flags & ~TFF_EXPR_IN_PARENS);
}
- pp_right_bracket (cxx_pp);
+ pp_cxx_right_bracket (cxx_pp);
dump_type_suffix (TREE_TYPE (t), flags);
break;
if ((flags & TFF_DECL_SPECIFIERS)
&& TREE_CODE (TREE_TYPE (t)) == TEMPLATE_TYPE_PARM)
/* Say `class T' not just `T'. */
- pp_string (cxx_pp, "class ");
+ pp_cxx_identifier (cxx_pp, "class");
dump_type (TREE_TYPE (t), flags);
break;
}
}
if (flags & TFF_DECL_SPECIFIERS)
- pp_string (cxx_pp, "typedef ");
+ pp_cxx_identifier (cxx_pp, "typedef");
dump_simple_decl (t, DECL_ORIGINAL_TYPE (t)
? DECL_ORIGINAL_TYPE (t) : TREE_TYPE (t),
flags);
if (DECL_NAME (t) == NULL_TREE)
pp_identifier (cxx_pp, "<unnamed>");
else
- pp_tree_identifier (cxx_pp, DECL_NAME (t));
+ pp_cxx_tree_identifier (cxx_pp, DECL_NAME (t));
}
break;
case ARRAY_REF:
dump_decl (TREE_OPERAND (t, 0), flags);
- pp_left_bracket (cxx_pp);
+ pp_cxx_left_bracket (cxx_pp);
dump_decl (TREE_OPERAND (t, 1), flags);
- pp_right_bracket (cxx_pp);
+ pp_cxx_right_bracket (cxx_pp);
break;
/* So that we can do dump_decl on an aggr type. */
case BIT_NOT_EXPR:
/* This is a pseudo destructor call which has not been folded into
a PSEUDO_DTOR_EXPR yet. */
- pp_complement (cxx_pp);
+ pp_cxx_complement (cxx_pp);
dump_type (TREE_OPERAND (t, 0), flags);
break;
case IDENTIFIER_NODE:
if (IDENTIFIER_TYPENAME_P (t))
{
- pp_string (cxx_pp, "operator ");
+ pp_cxx_identifier (cxx_pp, "operator");
/* Not exactly IDENTIFIER_TYPE_VALUE. */
dump_type (TREE_TYPE (t), flags);
break;
}
else
- pp_tree_identifier (cxx_pp, t);
+ pp_cxx_tree_identifier (cxx_pp, t);
break;
case OVERLOAD:
if (DECL_CLASS_SCOPE_P (t))
{
dump_type (DECL_CONTEXT (t), flags);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
}
else if (DECL_CONTEXT (t))
{
dump_decl (DECL_CONTEXT (t), flags);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
}
dump_decl (DECL_NAME (t), flags);
break;
if (is_overloaded_fn (name))
name = DECL_NAME (get_first_fn (name));
dump_decl (name, flags);
- pp_template_argument_list_start (cxx_pp);
+ pp_cxx_begin_template_argument_list (cxx_pp);
if (TREE_OPERAND (t, 1))
dump_template_argument_list (TREE_OPERAND (t, 1), flags);
- pp_template_argument_list_end (cxx_pp);
+ pp_cxx_end_template_argument_list (cxx_pp);
}
break;
case LABEL_DECL:
- pp_tree_identifier (cxx_pp, DECL_NAME (t));
+ pp_cxx_tree_identifier (cxx_pp, DECL_NAME (t));
break;
case CONST_DECL:
break;
case USING_DECL:
- pp_string (cxx_pp, "using ");
+ pp_cxx_identifier (cxx_pp, "using");
dump_type (DECL_INITIAL (t), flags);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
dump_decl (DECL_NAME (t), flags);
break;
tree inner_parms = INNERMOST_TEMPLATE_PARMS (parms);
int len = TREE_VEC_LENGTH (inner_parms);
- pp_string (cxx_pp, "template<");
+ pp_cxx_identifier (cxx_pp, "template");
+ pp_cxx_begin_template_argument_list (cxx_pp);
/* If we've shown the template prefix, we'd better show the
parameters' and decl's type too. */
pp_separate_with_comma (cxx_pp);
dump_template_parameter (TREE_VEC_ELT (inner_parms, i), flags);
}
- pp_template_argument_list_end (cxx_pp);
- pp_space (cxx_pp);
+ pp_cxx_end_template_argument_list (cxx_pp);
+ pp_cxx_whitespace (cxx_pp);
}
nreverse(orig_parms);
if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
/* Say `template<arg> class TT' not just `template<arg> TT'. */
- pp_string (cxx_pp, "class ");
+ pp_cxx_identifier (cxx_pp, "class");
}
if (TREE_CODE (DECL_TEMPLATE_RESULT (t)) == TYPE_DECL)
if (!(flags & TFF_DECL_SPECIFIERS))
/* OK */;
else if (DECL_STATIC_FUNCTION_P (t))
- pp_identifier (cxx_pp, "static ");
+ pp_cxx_identifier (cxx_pp, "static");
else if (DECL_VIRTUAL_P (t))
- pp_identifier (cxx_pp, "virtual ");
+ pp_cxx_identifier (cxx_pp, "virtual");
/* Print the return type? */
if (show_return)
show_return = !DECL_CONV_FN_P (t) && !DECL_CONSTRUCTOR_P (t)
&& !DECL_DESTRUCTOR_P (t);
if (show_return)
- {
- dump_type_prefix (TREE_TYPE (fntype), flags);
- pp_space (cxx_pp);
- }
+ dump_type_prefix (TREE_TYPE (fntype), flags);
/* Print the function name. */
if (cname)
{
dump_type (cname, flags);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
}
else
dump_scope (CP_DECL_CONTEXT (t), flags);
dump_parameters (parmtypes, flags);
if (TREE_CODE (fntype) == METHOD_TYPE)
- pp_cxx_cv_qualifier_seq
- (cxx_pp, TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype))));
+ {
+ pp_base (cxx_pp)->padding = pp_before;
+ pp_cxx_cv_qualifier_seq
+ (cxx_pp, TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype))));
+ }
if (flags & TFF_EXCEPTION_SPECIFICATION)
- dump_exception_spec (TYPE_RAISES_EXCEPTIONS (fntype), flags);
+ {
+ pp_base (cxx_pp)->padding = pp_before;
+ dump_exception_spec (TYPE_RAISES_EXCEPTIONS (fntype), flags);
+ }
if (show_return)
dump_type_suffix (TREE_TYPE (fntype), flags);
/* If T is a template instantiation, dump the parameter binding. */
if (template_parms != NULL_TREE && template_args != NULL_TREE)
{
- pp_string (cxx_pp, " [with ");
+ pp_cxx_whitespace (cxx_pp);
+ pp_cxx_left_bracket (cxx_pp);
+ pp_cxx_identifier (cxx_pp, "with");
+ pp_cxx_whitespace (cxx_pp);
dump_template_bindings (template_parms, template_args);
- pp_right_bracket (cxx_pp);
+ pp_cxx_right_bracket (cxx_pp);
}
}
{
int first;
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
for (first = 1; parmtypes != void_list_node;
parmtypes = TREE_CHAIN (parmtypes))
first = 0;
if (!parmtypes)
{
- pp_identifier (cxx_pp, "...");
+ pp_cxx_identifier (cxx_pp, "...");
break;
}
dump_type (TREE_VALUE (parmtypes), flags);
if ((flags & TFF_FUNCTION_DEFAULT_ARGUMENTS) && TREE_PURPOSE (parmtypes))
{
- pp_string (cxx_pp, " = ");
+ pp_cxx_whitespace (cxx_pp);
+ pp_equal (cxx_pp);
+ pp_cxx_whitespace (cxx_pp);
dump_expr (TREE_PURPOSE (parmtypes), flags | TFF_EXPR_IN_PARENS);
}
}
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
/* Print an exception specification. T is the exception specification. */
{
if (t)
{
- pp_string (cxx_pp, " throw (");
+ pp_cxx_identifier (cxx_pp, "throw");
+ pp_cxx_whitespace (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
if (TREE_VALUE (t) != NULL_TREE)
while (1)
{
break;
pp_separate_with_comma (cxx_pp);
}
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
}
literal name. */
if (!DECL_LANG_SPECIFIC (t))
{
- pp_tree_identifier (cxx_pp, name);
+ pp_cxx_tree_identifier (cxx_pp, name);
return;
}
if (DECL_DESTRUCTOR_P (t))
{
- pp_complement (cxx_pp);
+ pp_cxx_complement (cxx_pp);
dump_decl (name, TFF_PLAIN_IDENTIFIER);
}
else if (DECL_CONV_FN_P (t))
declarations, both will have the same name, yet
the types will be different, hence the TREE_TYPE field
of the first name will be clobbered by the second. */
- pp_string (cxx_pp, "operator ");
+ pp_cxx_identifier (cxx_pp, "operator");
dump_type (TREE_TYPE (TREE_TYPE (t)), flags);
}
else if (IDENTIFIER_OPNAME_P (name))
- pp_tree_identifier (cxx_pp, name);
+ pp_cxx_tree_identifier (cxx_pp, name);
else
dump_decl (name, flags);
if (primary && flags & TFF_TEMPLATE_NAME)
return;
flags &= ~(TFF_CLASS_KEY_OR_ENUM | TFF_TEMPLATE_NAME);
- pp_template_argument_list_start (cxx_pp);
+ pp_cxx_begin_template_argument_list (cxx_pp);
/* Be careful only to print things when we have them, so as not
to crash producing error messages. */
dump_decl (parm, flags & ~TFF_DECL_SPECIFIERS);
}
}
- pp_template_argument_list_end (cxx_pp);
+ pp_cxx_end_template_argument_list (cxx_pp);
}
/* Print out a list of initializers (subr of dump_expr). */
break;
case THROW_EXPR:
- pp_identifier (cxx_pp, "throw");
+ pp_cxx_identifier (cxx_pp, "throw");
dump_expr (TREE_OPERAND (t, 0), flags);
break;
case PTRMEM_CST:
pp_ampersand (cxx_pp);
dump_type (PTRMEM_CST_CLASS (t), flags);
- pp_colon_colon (cxx_pp);
- pp_tree_identifier (cxx_pp, DECL_NAME (PTRMEM_CST_MEMBER (t)));
+ pp_cxx_colon_colon (cxx_pp);
+ pp_cxx_tree_identifier (cxx_pp, DECL_NAME (PTRMEM_CST_MEMBER (t)));
break;
case COMPOUND_EXPR:
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr (TREE_OPERAND (t, 0), flags | TFF_EXPR_IN_PARENS);
pp_separate_with_comma (cxx_pp);
dump_expr (TREE_OPERAND (t, 1), flags | TFF_EXPR_IN_PARENS);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
break;
case COND_EXPR:
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr (TREE_OPERAND (t, 0), flags | TFF_EXPR_IN_PARENS);
pp_string (cxx_pp, " ? ");
dump_expr (TREE_OPERAND (t, 1), flags | TFF_EXPR_IN_PARENS);
pp_string (cxx_pp, " : ");
dump_expr (TREE_OPERAND (t, 2), flags | TFF_EXPR_IN_PARENS);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
break;
case SAVE_EXPR:
if (TREE_HAS_CONSTRUCTOR (t))
{
- pp_string (cxx_pp, "new ");
+ pp_cxx_identifier (cxx_pp, "new");
+ pp_cxx_whitespace (cxx_pp);
dump_type (TREE_TYPE (TREE_TYPE (t)), flags);
}
else
if (fn && TREE_CODE (fn) == FUNCTION_DECL)
{
if (DECL_CONSTRUCTOR_P (fn))
- pp_tree_identifier (cxx_pp, TYPE_IDENTIFIER (TREE_TYPE (t)));
+ pp_cxx_tree_identifier (cxx_pp, TYPE_IDENTIFIER (TREE_TYPE (t)));
else
dump_decl (fn, 0);
}
else
dump_expr (TREE_OPERAND (t, 0), 0);
}
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
if (TREE_OPERAND (t, 1))
dump_expr_list (TREE_CHAIN (TREE_OPERAND (t, 1)), flags);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
break;
case CALL_EXPR:
args = TREE_CHAIN (args);
}
dump_expr (fn, flags | TFF_EXPR_IN_PARENS);
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr_list (args, flags);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
break;
tree type = TREE_OPERAND (t, 1);
tree init = TREE_OPERAND (t, 2);
if (NEW_EXPR_USE_GLOBAL (t))
- pp_colon_colon (cxx_pp);
- pp_string (cxx_pp, "new ");
+ pp_cxx_colon_colon (cxx_pp);
+ pp_cxx_identifier (cxx_pp, "new");
if (TREE_OPERAND (t, 0))
{
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr_list (TREE_OPERAND (t, 0), flags);
- pp_string (cxx_pp, ") ");
+ pp_cxx_right_paren (cxx_pp);
+ pp_cxx_whitespace (cxx_pp);
}
if (TREE_CODE (type) == ARRAY_REF)
type = build_cplus_array_type
dump_type (type, flags);
if (init)
{
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
if (TREE_CODE (init) == TREE_LIST)
dump_expr_list (init, flags);
else if (init == void_zero_node)
;
else
dump_expr (init, flags);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
}
break;
|| strcmp (IDENTIFIER_POINTER (DECL_NAME (ob)), "this"))
{
dump_expr (ob, flags | TFF_EXPR_IN_PARENS);
- pp_arrow (cxx_pp);
+ pp_cxx_arrow (cxx_pp);
}
}
else
{
dump_expr (ob, flags | TFF_EXPR_IN_PARENS);
- pp_dot (cxx_pp);
+ pp_cxx_dot (cxx_pp);
}
dump_expr (TREE_OPERAND (t, 1), flags & ~TFF_EXPR_IN_PARENS);
}
case ARRAY_REF:
dump_expr (TREE_OPERAND (t, 0), flags | TFF_EXPR_IN_PARENS);
- pp_left_bracket (cxx_pp);
+ pp_cxx_left_bracket (cxx_pp);
dump_expr (TREE_OPERAND (t, 1), flags | TFF_EXPR_IN_PARENS);
- pp_right_bracket (cxx_pp);
+ pp_cxx_right_bracket (cxx_pp);
break;
case CONVERT_EXPR:
if (TREE_TYPE (t) && VOID_TYPE_P (TREE_TYPE (t)))
{
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_type (TREE_TYPE (t), flags);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
dump_expr (TREE_OPERAND (t, 0), flags);
}
else
t = TREE_OPERAND (t, 0);
my_friendly_assert (TREE_CODE (t) == CALL_EXPR, 237);
dump_expr (TREE_OPERAND (t, 0), flags | TFF_EXPR_IN_PARENS);
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr_list (TREE_CHAIN (TREE_OPERAND (t, 1)), flags);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
else
{
case POSTDECREMENT_EXPR:
case POSTINCREMENT_EXPR:
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr (TREE_OPERAND (t, 0), flags | TFF_EXPR_IN_PARENS);
- pp_identifier (cxx_pp, operator_name_info[(int)TREE_CODE (t)].name);
- pp_right_paren (cxx_pp);
+ pp_cxx_identifier (cxx_pp, operator_name_info[(int)TREE_CODE (t)].name);
+ pp_cxx_right_paren (cxx_pp);
break;
case NON_LVALUE_EXPR:
if (TREE_CODE (next) == FUNCTION_TYPE)
{
if (flags & TFF_EXPR_IN_PARENS)
- pp_left_paren (cxx_pp);
- pp_star (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
+ pp_cxx_star (cxx_pp);
dump_expr (TREE_OPERAND (t, 0), flags & ~TFF_EXPR_IN_PARENS);
if (flags & TFF_EXPR_IN_PARENS)
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
break;
}
/* Else fall through. */
/* It is a cast, but we cannot tell whether it is a
reinterpret or static cast. Use the C style notation. */
if (flags & TFF_EXPR_IN_PARENS)
- pp_left_paren (cxx_pp);
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_type (TREE_TYPE (t), flags);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
dump_expr (op, flags | TFF_EXPR_IN_PARENS);
if (flags & TFF_EXPR_IN_PARENS)
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
else
dump_expr (op, flags);
if (integer_zerop (idx))
{
/* A NULL pointer-to-member constant. */
- pp_left_paren (cxx_pp);
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_type (TREE_TYPE (t), flags);
- pp_right_paren (cxx_pp);
- pp_string (cxx_pp, ")0)");
+ pp_cxx_right_paren (cxx_pp);
+ pp_character (cxx_pp, '0');
+ pp_cxx_right_paren (cxx_pp);
break;
}
else if (host_integerp (idx, 0))
if (TREE_TYPE (t) && !CONSTRUCTOR_ELTS (t))
{
dump_type (TREE_TYPE (t), 0);
- pp_left_paren (cxx_pp);
- pp_right_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
else
{
- pp_left_brace (cxx_pp);
+ pp_cxx_left_brace (cxx_pp);
dump_expr_list (CONSTRUCTOR_ELTS (t), flags);
- pp_right_brace (cxx_pp);
+ pp_cxx_right_brace (cxx_pp);
}
break;
if (TREE_CODE (ob) == INDIRECT_REF)
{
dump_expr (TREE_OPERAND (ob, 0), flags | TFF_EXPR_IN_PARENS);
- pp_string (cxx_pp, "->*");
+ pp_cxx_arrow (cxx_pp);
+ pp_cxx_star (cxx_pp);
}
else
{
dump_expr (ob, flags | TFF_EXPR_IN_PARENS);
- pp_string (cxx_pp, ".*");
+ pp_cxx_dot (cxx_pp);
+ pp_cxx_star (cxx_pp);
}
dump_expr (TREE_OPERAND (t, 1), flags | TFF_EXPR_IN_PARENS);
}
case SCOPE_REF:
dump_type (TREE_OPERAND (t, 0), flags);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
dump_expr (TREE_OPERAND (t, 1), flags | TFF_EXPR_IN_PARENS);
break;
|| TREE_CHAIN (TREE_OPERAND (t, 0)))
{
dump_type (TREE_TYPE (t), flags);
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr_list (TREE_OPERAND (t, 0), flags);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
else
{
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_type (TREE_TYPE (t), flags);
- pp_string (cxx_pp, ")(");
+ pp_cxx_right_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr_list (TREE_OPERAND (t, 0), flags);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
break;
case STATIC_CAST_EXPR:
- pp_string (cxx_pp, "static_cast<");
+ pp_cxx_identifier (cxx_pp, "static_cast");
goto cast;
case REINTERPRET_CAST_EXPR:
- pp_string (cxx_pp, "reinterpret_cast<");
+ pp_cxx_identifier (cxx_pp, "reinterpret_cast");
goto cast;
case CONST_CAST_EXPR:
- pp_string (cxx_pp, "const_cast<");
+ pp_cxx_identifier (cxx_pp, "const_cast");
goto cast;
case DYNAMIC_CAST_EXPR:
- pp_string (cxx_pp, "dynamic_cast<");
+ pp_cxx_identifier (cxx_pp, "dynamic_cast");
cast:
+ pp_cxx_begin_template_argument_list (cxx_pp);
dump_type (TREE_TYPE (t), flags);
- pp_string (cxx_pp, ">(");
+ pp_cxx_end_template_argument_list (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr (TREE_OPERAND (t, 0), flags);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
break;
case ARROW_EXPR:
dump_expr (TREE_OPERAND (t, 0), flags);
- pp_arrow (cxx_pp);
+ pp_cxx_arrow (cxx_pp);
break;
case SIZEOF_EXPR:
case ALIGNOF_EXPR:
if (TREE_CODE (t) == SIZEOF_EXPR)
- pp_string (cxx_pp, "sizeof (");
+ pp_cxx_identifier (cxx_pp, "sizeof");
else
{
my_friendly_assert (TREE_CODE (t) == ALIGNOF_EXPR, 0);
- pp_string (cxx_pp, "__alignof__ (");
+ pp_cxx_identifier (cxx_pp, "__alignof__");
}
+ pp_cxx_whitespace (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
if (TYPE_P (TREE_OPERAND (t, 0)))
dump_type (TREE_OPERAND (t, 0), flags);
else
dump_expr (TREE_OPERAND (t, 0), flags);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
break;
case REALPART_EXPR:
case IMAGPART_EXPR:
- pp_identifier (cxx_pp, operator_name_info[TREE_CODE (t)].name);
- pp_space (cxx_pp);
+ pp_cxx_identifier (cxx_pp, operator_name_info[TREE_CODE (t)].name);
+ pp_cxx_whitespace (cxx_pp);
dump_expr (TREE_OPERAND (t, 0), flags);
break;
case PSEUDO_DTOR_EXPR:
dump_expr (TREE_OPERAND (t, 2), flags);
- pp_dot (cxx_pp);
+ pp_cxx_dot (cxx_pp);
dump_type (TREE_OPERAND (t, 0), flags);
- pp_colon_colon (cxx_pp);
- pp_complement (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
+ pp_cxx_complement (cxx_pp);
dump_type (TREE_OPERAND (t, 1), flags);
break;
break;
case BIND_EXPR:
- pp_left_brace (cxx_pp);
+ pp_cxx_left_brace (cxx_pp);
dump_expr (TREE_OPERAND (t, 1), flags & ~TFF_EXPR_IN_PARENS);
- pp_right_brace (cxx_pp);
+ pp_cxx_right_brace (cxx_pp);
break;
case LOOP_EXPR:
pp_string (cxx_pp, "while (1) { ");
dump_expr (TREE_OPERAND (t, 0), flags & ~TFF_EXPR_IN_PARENS);
- pp_right_brace (cxx_pp);
+ pp_cxx_right_brace (cxx_pp);
break;
case EXIT_EXPR:
case EMPTY_CLASS_EXPR:
dump_type (TREE_TYPE (t), flags);
- pp_left_paren (cxx_pp);
- pp_right_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
break;
case NON_DEPENDENT_EXPR:
static void
dump_binary_op (const char *opstring, tree t, int flags)
{
- pp_left_paren (cxx_pp);
+ pp_cxx_left_paren (cxx_pp);
dump_expr (TREE_OPERAND (t, 0), flags | TFF_EXPR_IN_PARENS);
- pp_space (cxx_pp);
+ pp_cxx_whitespace (cxx_pp);
if (opstring)
- pp_identifier (cxx_pp, opstring);
+ pp_cxx_identifier (cxx_pp, opstring);
else
pp_identifier (cxx_pp, "<unknown operator>");
- pp_space (cxx_pp);
+ pp_cxx_whitespace (cxx_pp);
dump_expr (TREE_OPERAND (t, 1), flags | TFF_EXPR_IN_PARENS);
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
static void
dump_unary_op (const char *opstring, tree t, int flags)
{
if (flags & TFF_EXPR_IN_PARENS)
- pp_left_paren (cxx_pp);
- pp_identifier (cxx_pp, opstring);
+ pp_cxx_left_paren (cxx_pp);
+ pp_cxx_identifier (cxx_pp, opstring);
dump_expr (TREE_OPERAND (t, 0), flags & ~TFF_EXPR_IN_PARENS);
if (flags & TFF_EXPR_IN_PARENS)
- pp_right_paren (cxx_pp);
+ pp_cxx_right_paren (cxx_pp);
}
+static void
+reinit_cxx_pp (void)
+{
+ pp_clear_output_area (cxx_pp);
+ pp_base (cxx_pp)->padding = pp_none;
+ pp_indentation (cxx_pp) = 0;
+ pp_needs_newline (cxx_pp) = false;
+ cxx_pp->enclosing_scope = 0;
+}
+
+
/* Exported interface to stringifying types, exprs and decls under TFF_*
control. */
const char *
type_as_string (tree typ, int flags)
{
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
dump_type (typ, flags);
return pp_formatted_text (cxx_pp);
}
const char *
expr_as_string (tree decl, int flags)
{
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
dump_expr (decl, flags);
return pp_formatted_text (cxx_pp);
}
const char *
decl_as_string (tree decl, int flags)
{
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
dump_decl (decl, flags);
return pp_formatted_text (cxx_pp);
}
const char *
context_as_string (tree context, int flags)
{
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
dump_scope (context, flags);
return pp_formatted_text (cxx_pp);
}
if (v >= 2)
return decl_as_string (decl, TFF_DECL_SPECIFIERS);
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
if (v == 1 && DECL_CLASS_SCOPE_P (decl))
{
dump_type (CP_DECL_CONTEXT (decl), TFF_PLAIN_IDENTIFIER);
- pp_colon_colon (cxx_pp);
+ pp_cxx_colon_colon (cxx_pp);
}
if (TREE_CODE (decl) == FUNCTION_DECL)
flags |= TFF_DECL_SPECIFIERS | TFF_RETURN_TYPE;
flags |= TFF_TEMPLATE_HEADER;
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
dump_decl (decl, flags);
return pp_formatted_text (cxx_pp);
}
static const char *
expr_to_string (tree decl)
{
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
dump_expr (decl, 0);
return pp_formatted_text (cxx_pp);
}
flags = TFF_EXCEPTION_SPECIFICATION | TFF_DECL_SPECIFIERS;
if (verbose)
flags |= TFF_FUNCTION_DEFAULT_ARGUMENTS;
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
dump_decl (fndecl, flags);
return pp_formatted_text (cxx_pp);
}
static const char *
parm_to_string (int p)
{
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
if (p < 0)
pp_string (cxx_pp, "'this'");
else
flags |= TFF_CLASS_KEY_OR_ENUM;
flags |= TFF_TEMPLATE_HEADER;
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
dump_type (typ, flags);
return pp_formatted_text (cxx_pp);
}
if (TYPE_P (TREE_VALUE (p)))
return type_as_string (p, flags);
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
for (; p; p = TREE_CHAIN (p))
{
if (TREE_VALUE (p) == null_node)
- pp_identifier (cxx_pp, "NULL");
+ pp_cxx_identifier (cxx_pp, "NULL");
else
dump_type (error_type (TREE_VALUE (p)), flags);
if (TREE_CHAIN (p))
static const char *
cv_to_string (tree p, int v)
{
- pp_clear_output_area (cxx_pp);
+ reinit_cxx_pp ();
pp_base (cxx_pp)->padding = v ? pp_before : pp_none;
pp_cxx_cv_qualifier_seq (cxx_pp, p);
return pp_formatted_text (cxx_pp);
#undef next_int
}
-static void
-pp_non_consecutive_character (cxx_pretty_printer *pp, int c)
-{
- const char *p = pp_last_position_in_text (pp);
-
- if (p != NULL && *p == c)
- pp_space (pp);
- pp_character (pp, c);
-}
-
/* These are temporary wrapper functions which handle the historic
behavior of cp_*_at. */