⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 error.c

📁 gcc-2.95.3 Linux下最常用的C编译器
💻 C
📖 第 1 页 / 共 4 页
字号:
    dump_exception_spec (TYPE_RAISES_EXCEPTIONS (fntype), 0);}/* Print a parameter list. V indicates if we show default values or not. If   these are for a member function, the member object ptr   (and any other hidden args) should have already been removed. */static voiddump_parameters (parmtypes, v, canonical_name)     tree parmtypes;     int v;     int canonical_name;{  int first;  OB_PUTC ('(');  for (first = 1; parmtypes != void_list_node;       parmtypes = TREE_CHAIN (parmtypes))    {      if (!first)        OB_PUTC2 (',', ' ');      first = 0;      if (!parmtypes)        {          OB_PUTS ("...");          break;        }      dump_type_real (TREE_VALUE (parmtypes), 0, canonical_name);            if (TREE_PURPOSE (parmtypes) && v)        {          OB_PUTS (" = ");          dump_expr (TREE_PURPOSE (parmtypes), 0);        }    }  OB_PUTC (')');}/* Print an exception specification. T is the exception specification. */static voiddump_exception_spec (t, canonical_name)     tree t;     int canonical_name;{  if (t)    {      OB_PUTS (" throw (");      if (TREE_VALUE (t) != NULL_TREE)        while (1)          {            dump_type_real (TREE_VALUE (t), 0, canonical_name);            t = TREE_CHAIN (t);            if (!t)              break;            OB_PUTC2 (',', ' ');          }      OB_PUTC (')');    }}/* Handle the function name for a FUNCTION_DECL node, grokking operators   and destructors properly.  */static voiddump_function_name (t)     tree t;{  tree name = DECL_NAME (t);  if (DECL_DESTRUCTOR_P (t))    {      OB_PUTC ('~');      dump_decl (name, 0);    }  else if (DECL_CONV_FN_P (t))    {      /* This cannot use the hack that the operator's return	 type is stashed off of its name because it may be	 used for error reporting.  In the case of conflicting	 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.  */      OB_PUTS ("operator ");      dump_type (TREE_TYPE (TREE_TYPE (t)), 0);    }  else if (IDENTIFIER_OPNAME_P (name))    {      char *name_string = operator_name_string (name);      OB_PUTS ("operator ");      OB_PUTCP (name_string);    }  else    dump_decl (name, 0);  if (DECL_LANG_SPECIFIC (t) && DECL_USE_TEMPLATE (t)       && DECL_TEMPLATE_INFO (t)      && (DECL_TEMPLATE_SPECIALIZATION (t) 	  || TREE_CODE (DECL_TI_TEMPLATE (t)) != TEMPLATE_DECL	  || DECL_TEMPLATE_SPECIALIZATION (DECL_TI_TEMPLATE (t))	  || PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t))))    {      tree args = DECL_TEMPLATE_INFO (t) ? DECL_TI_ARGS (t) : NULL_TREE;       OB_PUTC ('<');      /* Be careful only to print things when we have them, so as not	 to crash producing error messages.  */      if (args)	{	  if (TREE_CODE (args) == TREE_LIST)	    {	      tree arg;	      int need_comma = 0;	      	      for (arg = args; arg; arg = TREE_CHAIN (arg))		{		  tree a = TREE_VALUE (arg);		  		  if (need_comma)		    OB_PUTS (", ");		  		  if (a)		    {		      if (TREE_CODE_CLASS (TREE_CODE (a)) == 't'			  || TREE_CODE (a) == TEMPLATE_DECL)			dump_type (a, 0);		      else			dump_expr (a, 0);		    }		  		  need_comma = 1;		}	    }	  else if (TREE_CODE (args) == TREE_VEC)	    {	      int i;	      int need_comma = 0;	      	      if (TREE_VEC_LENGTH (args) > 0		  && TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)		args = TREE_VEC_ELT (args, 				     TREE_VEC_LENGTH (args) - 1);	      	      for (i = 0; i < TREE_VEC_LENGTH (args); i++)		{		  tree a = TREE_VEC_ELT (args, i);		  		  if (need_comma)		    OB_PUTS (", ");		  		  if (a)		    {		      if (TREE_CODE_CLASS (TREE_CODE (a)) == 't'			  || TREE_CODE (a) == TEMPLATE_DECL)			dump_type (a, 0);		      else			dump_expr (a, 0);		    }		  		  need_comma = 1;		}	    }	}      OB_END_TEMPLATE_ID ();    }}static voiddump_char (c)     int c;{  switch (c)    {    case TARGET_NEWLINE:      OB_PUTS ("\\n");      break;    case TARGET_TAB:      OB_PUTS ("\\t");      break;    case TARGET_VT:      OB_PUTS ("\\v");      break;    case TARGET_BS:      OB_PUTS ("\\b");      break;    case TARGET_CR:      OB_PUTS ("\\r");      break;    case TARGET_FF:      OB_PUTS ("\\f");      break;    case TARGET_BELL:      OB_PUTS ("\\a");      break;    case '\\':      OB_PUTS ("\\\\");      break;    case '\'':      OB_PUTS ("\\'");      break;    case '\"':      OB_PUTS ("\\\"");      break;    default:      if (ISPRINT (c))	OB_PUTC (c);      else	{	  sprintf (digit_buffer, "\\%03o", (int) c);	  OB_PUTCP (digit_buffer);	}    }}/* Print out a list of initializers (subr of dump_expr) */static voiddump_expr_list (l)     tree l;{  while (l)    {      dump_expr (TREE_VALUE (l), 0);      if (TREE_CHAIN (l))	OB_PUTC2 (',', ' ');      l = TREE_CHAIN (l);    }}/* Print out an expression */static voiddump_expr (t, nop)     tree t;     int nop;			/* suppress parens */{  switch (TREE_CODE (t))    {    case VAR_DECL:    case PARM_DECL:    case FIELD_DECL:    case CONST_DECL:    case FUNCTION_DECL:    case TEMPLATE_DECL:    case NAMESPACE_DECL:      dump_decl (t, -1);      break;    case INTEGER_CST:      {	tree type = TREE_TYPE (t);	my_friendly_assert (type != 0, 81);	/* If it's an enum, output its tag, rather than its value.  */	if (TREE_CODE (type) == ENUMERAL_TYPE)	  {	    char *p = enum_name_string (t, type);	    OB_PUTCP (p);	  }	else if (type == boolean_type_node)	  {	    if (t == boolean_false_node		|| (TREE_INT_CST_LOW (t) == 0		    && TREE_INT_CST_HIGH (t) == 0))	      OB_PUTS ("false");	    else if (t == boolean_true_node)	      OB_PUTS ("true");	  }	else if (type == char_type_node)	  {	    OB_PUTC ('\'');	    dump_char (TREE_INT_CST_LOW (t));	    OB_PUTC ('\'');	  }	else if (TREE_INT_CST_HIGH (t)		 != (TREE_INT_CST_LOW (t) >> (HOST_BITS_PER_WIDE_INT - 1)))	  {	    tree val = t;	    if (TREE_INT_CST_HIGH (val) < 0)	      {		OB_PUTC ('-');		val = build_int_2 (~TREE_INT_CST_LOW (val),				   -TREE_INT_CST_HIGH (val));	      }	    /* Would "%x%0*x" or "%x%*0x" get zero-padding on all	       systems?  */	    {	      static char format[10]; /* "%x%09999x\0" */	      if (!format[0])		sprintf (format, "%%x%%0%dx", HOST_BITS_PER_INT / 4);	      sprintf (digit_buffer, format, TREE_INT_CST_HIGH (val),		       TREE_INT_CST_LOW (val));	      OB_PUTCP (digit_buffer);	    }	  }	else	  OB_PUTI (TREE_INT_CST_LOW (t));      }      break;    case REAL_CST:#ifndef REAL_IS_NOT_DOUBLE      sprintf (digit_buffer, "%g", TREE_REAL_CST (t));#else      {	unsigned char *p = (unsigned char *) &TREE_REAL_CST (t);	size_t i;	strcpy (digit_buffer, "0x");	for (i = 0; i < sizeof TREE_REAL_CST (t); i++)	  sprintf (digit_buffer + 2 + 2*i, "%02x", *p++);      }#endif      OB_PUTCP (digit_buffer);      break;    case PTRMEM_CST:      OB_PUTC ('&');      dump_type (PTRMEM_CST_CLASS (t), 0);      OB_PUTS ("::");      OB_PUTID (DECL_NAME (PTRMEM_CST_MEMBER (t)));      break;    case STRING_CST:      {	char *p = TREE_STRING_POINTER (t);	int len = TREE_STRING_LENGTH (t) - 1;	int i;	OB_PUTC ('\"');	for (i = 0; i < len; i++)	  dump_char (p[i]);	OB_PUTC ('\"');      }      break;    case COMPOUND_EXPR:      dump_binary_op (",", t);      break;    case COND_EXPR:      OB_PUTC ('(');      dump_expr (TREE_OPERAND (t, 0), 0);      OB_PUTS (" ? ");      dump_expr (TREE_OPERAND (t, 1), 0);      OB_PUTS (" : ");      dump_expr (TREE_OPERAND (t, 2), 0);      OB_PUTC (')');      break;    case SAVE_EXPR:      if (TREE_HAS_CONSTRUCTOR (t))	{	  OB_PUTS ("new ");	  dump_type (TREE_TYPE (TREE_TYPE (t)), 0);	}      else	{	  dump_expr (TREE_OPERAND (t, 0), 0);	}      break;    case AGGR_INIT_EXPR:      OB_PUTID (TYPE_IDENTIFIER (TREE_TYPE (t)));      OB_PUTC ('(');      if (TREE_OPERAND (t, 1))	dump_expr_list (TREE_CHAIN (TREE_OPERAND (t, 1)));      OB_PUTC (')');      break;    case CALL_EXPR:      {	tree fn = TREE_OPERAND (t, 0);	tree args = TREE_OPERAND (t, 1);		if (TREE_CODE (fn) == ADDR_EXPR)	  fn = TREE_OPERAND (fn, 0);	if (TREE_TYPE (fn) != NULL_TREE && NEXT_CODE (fn) == METHOD_TYPE)	  {	    tree ob = TREE_VALUE (args);	    if (TREE_CODE (ob) == ADDR_EXPR)	      {		dump_expr (TREE_OPERAND (ob, 0), 0);		OB_PUTC ('.');	      }	    else if (TREE_CODE (ob) != PARM_DECL		     || strcmp (IDENTIFIER_POINTER (DECL_NAME (ob)), "this"))	      {		dump_expr (ob, 0);		OB_PUTC2 ('-', '>');	      }	    args = TREE_CHAIN (args);	  }	dump_expr (fn, 0);	OB_PUTC ('(');	dump_expr_list (args);	OB_PUTC (')');      }      break;    case NEW_EXPR:      {	tree type = TREE_OPERAND (t, 1);	if (NEW_EXPR_USE_GLOBAL (t))	  OB_PUTS ("::");	OB_PUTS ("new ");	if (TREE_OPERAND (t, 0))	  {	    OB_PUTC ('(');	    dump_expr_list (TREE_OPERAND (t, 0));	    OB_PUTS (") ");	  }	if (TREE_CODE (type) == ARRAY_REF)	  type = build_cplus_array_type	    (TREE_OPERAND (type, 0),	     build_index_type (size_binop (MINUS_EXPR, TREE_OPERAND (type, 1),					   integer_one_node)));	dump_type (type, 0);	if (TREE_OPERAND (t, 2))	  {	    OB_PUTC ('(');	    dump_expr_list (TREE_OPERAND (t, 2));	    OB_PUTC (')');	  }      }      break;    case TARGET_EXPR:      /* Note that this only works for G++ target exprs.  If somebody	 builds a general TARGET_EXPR, there's no way to represent that	 it initializes anything other that the parameter slot for the	 default argument.  Note we may have cleared out the first	 operand in expand_expr, so don't go killing ourselves.  */      if (TREE_OPERAND (t, 1))	dump_expr (TREE_OPERAND (t, 1), 0);      break;    case MODIFY_EXPR:    case PLUS_EXPR:    case MINUS_EXPR:    case MULT_EXPR:    case TRUNC_DIV_EXPR:    case TRUNC_MOD_EXPR:    case MIN_EXPR:    case MAX_EXPR:    case LSHIFT_EXPR:    case RSHIFT_EXPR:    case BIT_IOR_EXPR:    case BIT_XOR_EXPR:    case BIT_AND_EXPR:    case BIT_ANDTC_EXPR:    case TRUTH_ANDIF_EXPR:    case TRUTH_ORIF_EXPR:    case LT_EXPR:    case LE_EXPR:    case GT_EXPR:    case GE_EXPR:    case EQ_EXPR:    case NE_EXPR:      dump_binary_op (opname_tab[(int) TREE_CODE (t)], t);      break;    case CEIL_DIV_EXPR:    case FLOOR_DIV_EXPR:    case ROUND_DIV_EXPR:      dump_binary_op ("/", t);      break;    case CEIL_MOD_EXPR:    case FLOOR_MOD_EXPR:    case ROUND_MOD_EXPR:      dump_binary_op ("%", t);      break;    case COMPONENT_REF:      {	tree ob = TREE_OPERAND (t, 0);	if (TREE_CODE (ob) == INDIRECT_REF)	  {	    ob = TREE_OPERAND (ob, 0);	    if (TREE_CODE (ob) != PARM_DECL		|| strcmp (IDENTIFIER_POINTER (DECL_NAME (ob)), "this"))	      {		dump_expr (ob, 0);		OB_PUTC2 ('-', '>');	      }	  }	else	  {	    dump_expr (ob, 0);	    OB_PUTC ('.');	  }	dump_expr (TREE_OPERAND (t, 1), 1);      }      break;    case ARRAY_REF:      dump_expr (TREE_OPERAND (t, 0), 0);      OB_PUTC ('[');      dump_expr (TREE_OPERAND (t, 1), 0);      OB_PUTC (']');      break;    case CONVERT_EXPR:      dump_unary_op ("+", t, nop);      break;    case ADDR_EXPR:      if (TREE_CODE (TREE_OPERAND (t, 0)) == FUNCTION_DECL	  || TREE_CODE (TREE_OPERAND (t, 0)) == STRING_CST)	dump_expr (TREE_OPERAND (t, 0), 0);      else	dump_unary_op ("&", t, nop);      break;    case INDIRECT_REF:      if (TREE_HAS_CONSTRUCTOR (t))	{	  t = TREE_OPERAND (t, 0);	  my_friendly_assert (TREE_CODE (t) == CALL_EXPR, 237);	  dump_expr (TREE_OPERAND (t, 0), 0);	  OB_PUTC ('(');	  dump_expr_list (TREE_CHAIN (TREE_OPERAND (t, 1)));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -