static void pp_cxx_simple_type_specifier (cxx_pretty_printer *pp, tree t) { switch (TREE_CODE (t)) { case RECORD_TYPE: case UNION_TYPE: case ENUMERAL_TYPE: pp_cxx_qualified_id (pp, t); break; case TEMPLATE_TYPE_PARM: case TEMPLATE_TEMPLATE_PARM: case TEMPLATE_PARM_INDEX: pp_cxx_unqualified_id (pp, t); break; case TYPENAME_TYPE: pp_cxx_identifier (pp, "typename"); pp_cxx_nested_name_specifier (pp, TYPE_CONTEXT (t)); pp_cxx_unqualified_id (pp, TYPE_NAME (t)); break; default: pp_c_type_specifier (pp_c_base (pp), t); break; } }
void pp_c_type_specifier (c_pretty_printer *pp, tree t) { const enum tree_code code = TREE_CODE (t); switch (code) { case ERROR_MARK: pp_c_identifier (pp, "<type-error>"); break; case IDENTIFIER_NODE: pp_c_tree_decl_identifier (pp, t); break; case VOID_TYPE: case BOOLEAN_TYPE: case INTEGER_TYPE: case REAL_TYPE: if (TYPE_NAME (t)) { t = TYPE_NAME (t); pp_c_type_specifier (pp, t); } else { int prec = TYPE_PRECISION (t); t = c_common_type_for_mode (TYPE_MODE (t), TYPE_UNSIGNED (t)); if (TYPE_NAME (t)) { pp_c_type_specifier (pp, t); if (TYPE_PRECISION (t) != prec) { pp_string (pp, ":"); pp_decimal_int (pp, prec); } } else { switch (code) { case INTEGER_TYPE: pp_string (pp, (TYPE_UNSIGNED (t) ? "<unnamed-unsigned:" : "<unnamed-signed:")); break; case REAL_TYPE: pp_string (pp, "<unnamed-float:"); break; default: gcc_unreachable (); } pp_decimal_int (pp, prec); pp_string (pp, ">"); } } break; case TYPE_DECL: if (DECL_NAME (t)) pp_id_expression (pp, t); else pp_c_identifier (pp, "<typedef-error>"); break; case UNION_TYPE: case RECORD_TYPE: case ENUMERAL_TYPE: if (code == UNION_TYPE) pp_c_identifier (pp, "union"); else if (code == RECORD_TYPE) pp_c_identifier (pp, "struct"); else if (code == ENUMERAL_TYPE) pp_c_identifier (pp, "enum"); else pp_c_identifier (pp, "<tag-error>"); if (TYPE_NAME (t)) pp_id_expression (pp, TYPE_NAME (t)); else pp_c_identifier (pp, "<anonymous>"); break; default: pp_unsupported_tree (pp, t); break; } }