FreeBSD/contrib/gcc/cp/error.c
/* Dump the suffix of type T, under control of FLAGS.  This is the part
   which appears after the identifier (or function parms).  */
Dump the suffix of type T, under control of FLAGS.  This is the part
which appears after the identifier (or function parms).
Dump the suffix of type T under control of FLAGS . This is the part which appears after the identifier ( or function parms ) .
static void
dump_type_suffix (tree t, int flags)
{
  if (TYPE_PTRMEMFUNC_P (t))
    t = TYPE_PTRMEMFUNC_FN_TYPE (t);
  switch (TREE_CODE (t))
    {
    case POINTER_TYPE:
    case BLOCK_POINTER_TYPE:
    case REFERENCE_TYPE:
    case OFFSET_TYPE:
      if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
	pp_cxx_right_paren (cxx_pp);
      dump_type_suffix (TREE_TYPE (t), flags);
      break;
    case FUNCTION_TYPE:
    case METHOD_TYPE:
      {
	tree arg;
	pp_cxx_right_paren (cxx_pp);
	arg = TYPE_ARG_TYPES (t);
	if (TREE_CODE (t) == METHOD_TYPE)
	  arg = TREE_CHAIN (arg);
	dump_parameters (arg, flags & ~TFF_FUNCTION_DEFAULT_ARGUMENTS);
	if (TREE_CODE (t) == METHOD_TYPE)
	  pp_cxx_cv_qualifier_seq
	    (cxx_pp, TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t))));
	else
	  pp_cxx_cv_qualifier_seq(cxx_pp, t);
	dump_exception_spec (TYPE_RAISES_EXCEPTIONS (t), flags);
	dump_type_suffix (TREE_TYPE (t), flags);
	break;
      }
    case ARRAY_TYPE:
      pp_maybe_space (cxx_pp);
      pp_cxx_left_bracket (cxx_pp);
      if (TYPE_DOMAIN (t))
	{
	  if (host_integerp (TYPE_MAX_VALUE (TYPE_DOMAIN (t)), 0))
	    pp_wide_integer
	      (cxx_pp, tree_low_cst (TYPE_MAX_VALUE (TYPE_DOMAIN (t)), 0) + 1);
	  else if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (t))) == MINUS_EXPR)
	    dump_expr (TREE_OPERAND (TYPE_MAX_VALUE (TYPE_DOMAIN (t)), 0),
		       flags & ~TFF_EXPR_IN_PARENS);
	  else
	    dump_expr (fold (cp_build_binary_op
			     (PLUS_EXPR, TYPE_MAX_VALUE (TYPE_DOMAIN (t)),
			      integer_one_node)),
		       flags & ~TFF_EXPR_IN_PARENS);
	}
      pp_cxx_right_bracket (cxx_pp);
      dump_type_suffix (TREE_TYPE (t), flags);
      break;
    case ENUMERAL_TYPE:
    case IDENTIFIER_NODE:
    case INTEGER_TYPE:
    case BOOLEAN_TYPE:
    case REAL_TYPE:
    case RECORD_TYPE:
    case TEMPLATE_TYPE_PARM:
    case TEMPLATE_TEMPLATE_PARM:
    case BOUND_TEMPLATE_TEMPLATE_PARM:
    case TREE_LIST:
    case TYPE_DECL:
    case TREE_VEC:
    case UNION_TYPE:
    case UNKNOWN_TYPE:
    case VOID_TYPE:
    case TYPENAME_TYPE:
    case COMPLEX_TYPE:
    case VECTOR_TYPE:
    case TYPEOF_TYPE:
      break;
    default:
      pp_unsupported_tree (cxx_pp, t);
    case ERROR_MARK:
      break;
    }
}
static void dump_type_suffix ( tree t , int flags ) { if ( TYPE_PTRMEMFUNC_P ( t ) ) t = TYPE_PTRMEMFUNC_FN_TYPE ( t ) ; switch ( TREE_CODE ( t ) ) { case POINTER_TYPE : case BLOCK_POINTER_TYPE : case REFERENCE_TYPE : case OFFSET_TYPE : if ( TREE_CODE ( TREE_TYPE ( t ) ) == ARRAY_TYPE ) pp_cxx_right_paren ( cxx_pp ) ; dump_type_suffix ( TREE_TYPE ( t ) , flags ) ; break ; case FUNCTION_TYPE : case METHOD_TYPE : { tree arg ; pp_cxx_right_paren ( cxx_pp ) ; arg = TYPE_ARG_TYPES ( t ) ; if ( TREE_CODE ( t ) == METHOD_TYPE ) arg = TREE_CHAIN ( arg ) ; dump_parameters ( arg , flags & ~ TFF_FUNCTION_DEFAULT_ARGUMENTS ) ; if ( TREE_CODE ( t ) == METHOD_TYPE ) pp_cxx_cv_qualifier_seq ( cxx_pp , TREE_TYPE ( TREE_VALUE ( TYPE_ARG_TYPES ( t ) ) ) ) ; else pp_cxx_cv_qualifier_seq ( cxx_pp , t ) ; dump_exception_spec ( TYPE_RAISES_EXCEPTIONS ( t ) , flags ) ; dump_type_suffix ( TREE_TYPE ( t ) , flags ) ; break ; } case ARRAY_TYPE : pp_maybe_space ( cxx_pp ) ; pp_cxx_left_bracket ( cxx_pp ) ; if ( TYPE_DOMAIN ( t ) ) { if ( host_integerp ( TYPE_MAX_VALUE ( TYPE_DOMAIN ( t ) ) , 0 ) ) pp_wide_integer ( cxx_pp , tree_low_cst ( TYPE_MAX_VALUE ( TYPE_DOMAIN ( t ) ) , 0 ) + 1 ) ; else if ( TREE_CODE ( TYPE_MAX_VALUE ( TYPE_DOMAIN ( t ) ) ) == MINUS_EXPR ) dump_expr ( TREE_OPERAND ( TYPE_MAX_VALUE ( TYPE_DOMAIN ( t ) ) , 0 ) , flags & ~ TFF_EXPR_IN_PARENS ) ; else dump_expr ( fold ( cp_build_binary_op ( PLUS_EXPR , TYPE_MAX_VALUE ( TYPE_DOMAIN ( t ) ) , integer_one_node ) ) , flags & ~ TFF_EXPR_IN_PARENS ) ; } pp_cxx_right_bracket ( cxx_pp ) ; dump_type_suffix ( TREE_TYPE ( t ) , flags ) ; break ; case ENUMERAL_TYPE : case IDENTIFIER_NODE : case INTEGER_TYPE : case BOOLEAN_TYPE : case REAL_TYPE : case RECORD_TYPE : case TEMPLATE_TYPE_PARM : case TEMPLATE_TEMPLATE_PARM : case BOUND_TEMPLATE_TEMPLATE_PARM : case TREE_LIST : case TYPE_DECL : case TREE_VEC : case UNION_TYPE : case UNKNOWN_TYPE : case VOID_TYPE : case TYPENAME_TYPE : case COMPLEX_TYPE : case VECTOR_TYPE : case TYPEOF_TYPE : break ; default : pp_unsupported_tree ( cxx_pp , t ) ; case ERROR_MARK : break ; } }
Dump the suffix of type T, under control of FLAGS.
Dump the suffix of type T under control of FLAGS .
/* APPLE LOCAL blocks 6040305 */ /* Can only be reached through function pointer.  */ /* Function pointers don't have default args.  Not in standard C++,
	   anyway; they may in g++, but we'll just pretend otherwise.  */ /* Don't mark it here, we should have already done in
	 dump_type_prefix.  */