Exemplo n.º 1
0
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;
    }
}
Exemplo n.º 2
0
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;
    }
}