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

📄 error.c

📁 gcc-2.95.3 Linux下最常用的C编译器
💻 C
📖 第 1 页 / 共 4 页
字号:
	  OB_PUTC (')');	}      else	{	  if (TREE_OPERAND (t,0) != NULL_TREE	      && TREE_TYPE (TREE_OPERAND (t, 0))	      && NEXT_CODE (TREE_OPERAND (t, 0)) == REFERENCE_TYPE)	    dump_expr (TREE_OPERAND (t, 0), nop);	  else	    dump_unary_op ("*", t, nop);	}      break;    case NEGATE_EXPR:    case BIT_NOT_EXPR:    case TRUTH_NOT_EXPR:    case PREDECREMENT_EXPR:    case PREINCREMENT_EXPR:      dump_unary_op (opname_tab [(int)TREE_CODE (t)], t, nop);      break;    case POSTDECREMENT_EXPR:    case POSTINCREMENT_EXPR:      OB_PUTC ('(');      dump_expr (TREE_OPERAND (t, 0), 0);      OB_PUTCP (opname_tab[(int)TREE_CODE (t)]);      OB_PUTC (')');      break;    case NON_LVALUE_EXPR:      /* FIXME: This is a KLUDGE workaround for a parsing problem.  There	 should be another level of INDIRECT_REF so that I don't have to do	 this.  */      if (TREE_TYPE (t) != NULL_TREE && NEXT_CODE (t) == POINTER_TYPE)	{	  tree next = TREE_TYPE (TREE_TYPE (t));	  while (TREE_CODE (next) == POINTER_TYPE)	    next = TREE_TYPE (next);	  	  if (TREE_CODE (next) == FUNCTION_TYPE)	    {	      if (!nop) OB_PUTC ('(');	      OB_PUTC ('*');	      dump_expr (TREE_OPERAND (t, 0), 1);	      if (!nop) OB_PUTC (')');	      break;	    }	  /* else FALLTHRU */	}      dump_expr (TREE_OPERAND (t, 0), 0);      break;    case NOP_EXPR:      dump_expr (TREE_OPERAND (t, 0), nop);      break;    case CONSTRUCTOR:      if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))	{	  tree idx = build_component_ref (t, index_identifier, NULL_TREE, 0);	  if (integer_all_onesp (idx))	    {	      tree pfn = PFN_FROM_PTRMEMFUNC (t);	      dump_unary_op ("&", pfn, 0);	      break;	    }	  else if (TREE_CODE (idx) == INTEGER_CST		   && tree_int_cst_equal (idx, integer_zero_node))	    {	      /* A NULL pointer-to-member constant.  */	      OB_PUTS ("((");	      dump_type (TREE_TYPE (t), 0);	      OB_PUTS (") 0)");	      break;	    }	  else if (TREE_CODE (idx) == INTEGER_CST		   && TREE_INT_CST_HIGH (idx) == 0)	    {	      tree virtuals;	      unsigned HOST_WIDE_INT n;	      t = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (t)));	      t = TYPE_METHOD_BASETYPE (t);	      virtuals = BINFO_VIRTUALS (TYPE_BINFO (TYPE_MAIN_VARIANT (t)));	      	      n = TREE_INT_CST_LOW (idx);	      /* Map vtable index back one, to allow for the null pointer to		 member.  */	      --n;	      while (n > 0 && virtuals)		{		  --n;		  virtuals = TREE_CHAIN (virtuals);		}	      if (virtuals)		{		  dump_expr (FNADDR_FROM_VTABLE_ENTRY (TREE_VALUE (virtuals)), 0);		  break;		}	    }	}      OB_PUTC ('{');      dump_expr_list (CONSTRUCTOR_ELTS (t));      OB_PUTC ('}');      break;    case OFFSET_REF:      {	tree ob = TREE_OPERAND (t, 0);	if (is_dummy_object (ob))	  {	    t = TREE_OPERAND (t, 1);	    if (TREE_CODE (t) == FUNCTION_DECL)	      /* A::f */	      dump_expr (t, 0);	    else if (BASELINK_P (t))	      dump_expr (OVL_CURRENT (TREE_VALUE (t)), 0);	    else	      dump_decl (t, 0);	  }	else	  {	    if (TREE_CODE (ob) == INDIRECT_REF)	      {		dump_expr (TREE_OPERAND (ob, 0), 0);		OB_PUTS (" ->* ");	      }	    else	      {		dump_expr (ob, 0);		OB_PUTS (" .* ");	      }	    dump_expr (TREE_OPERAND (t, 1), 0);	  }	break;      }    case TEMPLATE_PARM_INDEX:      dump_decl (TEMPLATE_PARM_DECL (t), -1);      break;    case IDENTIFIER_NODE:      OB_PUTID (t);      break;    case SCOPE_REF:      dump_type (TREE_OPERAND (t, 0), 0);      OB_PUTS ("::");      dump_expr (TREE_OPERAND (t, 1), 0);      break;    case CAST_EXPR:      if (TREE_OPERAND (t, 0) == NULL_TREE	  || TREE_CHAIN (TREE_OPERAND (t, 0)))	{	  dump_type (TREE_TYPE (t), 0);	  OB_PUTC ('(');	  dump_expr_list (TREE_OPERAND (t, 0));	  OB_PUTC (')');	}      else	{	  OB_PUTC ('(');	  dump_type (TREE_TYPE (t), 0);	  OB_PUTC (')');	  OB_PUTC ('(');	  dump_expr_list (TREE_OPERAND (t, 0));	  OB_PUTC (')');	}      break;    case LOOKUP_EXPR:      OB_PUTID (TREE_OPERAND (t, 0));      break;    case ARROW_EXPR:      dump_expr (TREE_OPERAND (t, 0), nop);      OB_PUTS ("->");      break;    case SIZEOF_EXPR:    case ALIGNOF_EXPR:      if (TREE_CODE (t) == SIZEOF_EXPR)	OB_PUTS ("sizeof (");      else 	{	  my_friendly_assert (TREE_CODE (t) == ALIGNOF_EXPR, 0);	  OB_PUTS ("__alignof__ (");	}      if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (t, 0))) == 't')	dump_type (TREE_OPERAND (t, 0), 0);      else	dump_unary_op ("*", t, 0);      OB_PUTC (')');      break;    case DEFAULT_ARG:      OB_PUTS ("{unparsed}");      break;    case TRY_CATCH_EXPR:    case WITH_CLEANUP_EXPR:    case CLEANUP_POINT_EXPR:      dump_expr (TREE_OPERAND (t, 0), nop);      break;    case TEMPLATE_ID_EXPR:      dump_decl (t, 0);      break;    case TREE_LIST:      if (TREE_VALUE (t) && TREE_CODE (TREE_VALUE (t)) == FUNCTION_DECL)	{	  OB_PUTID (DECL_NAME (TREE_VALUE (t)));	  break;	}      /* else fall through */	      /*  This list is incomplete, but should suffice for now.	  It is very important that `sorry' does not call	  `report_error_function'.  That could cause an infinite loop.  */    default:      sorry ("`%s' not supported by dump_expr",	     tree_code_name[(int) TREE_CODE (t)]);      /* fall through to ERROR_MARK...  */    case ERROR_MARK:      OB_PUTCP ("{error}");      break;    }}static voiddump_binary_op (opstring, t)     char *opstring;     tree t;{  OB_PUTC ('(');  dump_expr (TREE_OPERAND (t, 0), 1);  OB_PUTC (' ');  OB_PUTCP (opstring);  OB_PUTC (' ');  dump_expr (TREE_OPERAND (t, 1), 1);  OB_PUTC (')');}static voiddump_unary_op (opstring, t, nop)     char *opstring;     tree t;     int nop;{  if (!nop) OB_PUTC ('(');  OB_PUTCP (opstring);  dump_expr (TREE_OPERAND (t, 0), 1);  if (!nop) OB_PUTC (')');}/* Print a function decl with exception specification included. */char *fndecl_as_string (fndecl, print_default_args_p)     tree fndecl;     int print_default_args_p;{  OB_INIT ();  dump_function_decl (fndecl, 2 + print_default_args_p);    OB_FINISH ();  return (char *)obstack_base (&scratch_obstack);}/* Same, but handle a _TYPE.   Called from convert_to_reference, mangle_class_name_for_template,   build_unary_op, and GNU_xref_decl.  If CANONICAL_NAME is non-zero,   when describing a typedef, we use the name of the type described,   rather than the name of the typedef.  */char *type_as_string_real (typ, v, canonical_name)     tree typ;     int v;     int canonical_name;{  OB_INIT ();  dump_type_real (typ, v, canonical_name);  OB_FINISH ();  return (char *)obstack_base (&scratch_obstack);}char *type_as_string (typ, v)     tree typ;     int v;{  return type_as_string_real (typ, v, 0);}char *expr_as_string (decl, v)     tree decl;     int v ATTRIBUTE_UNUSED;{  OB_INIT ();  dump_expr (decl, 1);  OB_FINISH ();  return (char *)obstack_base (&scratch_obstack);}/* A cross between type_as_string and fndecl_as_string.   Only called from substitute_nice_name.  */char *decl_as_string (decl, v)     tree decl;     int v;{  OB_INIT ();  dump_decl (decl, v);  OB_FINISH ();  return (char *)obstack_base (&scratch_obstack);}/* Generate the three forms of printable names for lang_printable_name.  */char *lang_decl_name (decl, v)     tree decl;     int v;{  if (v >= 2)    return decl_as_string (decl, 1);  OB_INIT ();  if (v == 1 && DECL_CLASS_SCOPE_P (decl))    {      tree cname;      if (TREE_CODE (decl) == FUNCTION_DECL)	cname = DECL_CLASS_CONTEXT (decl);      else	cname = DECL_CONTEXT (decl);      dump_type (cname, 0);      OB_PUTC2 (':', ':');    }  if (TREE_CODE (decl) == FUNCTION_DECL)    dump_function_name (decl);  else    dump_decl (DECL_NAME (decl), 0);  OB_FINISH ();  return (char *)obstack_base (&scratch_obstack);}  char *cp_file_of (t)     tree t;{  if (TREE_CODE (t) == PARM_DECL && DECL_CONTEXT (t))    return DECL_SOURCE_FILE (DECL_CONTEXT (t));  else if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')    return DECL_SOURCE_FILE (TYPE_MAIN_DECL (t));  else if (TREE_CODE (t) == OVERLOAD)    return DECL_SOURCE_FILE (OVL_FUNCTION (t));  else    return DECL_SOURCE_FILE (t);}intcp_line_of (t)     tree t;{  int line = 0;  if (TREE_CODE (t) == PARM_DECL && DECL_CONTEXT (t))    line = DECL_SOURCE_LINE (DECL_CONTEXT (t));  if (TREE_CODE (t) == TYPE_DECL && DECL_ARTIFICIAL (t)      && TYPE_MAIN_DECL (TREE_TYPE (t)))    t = TREE_TYPE (t);  if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')    line = DECL_SOURCE_LINE (TYPE_MAIN_DECL (t));  else if (TREE_CODE (t) == OVERLOAD)    line = DECL_SOURCE_LINE (OVL_FUNCTION (t));  else    line = DECL_SOURCE_LINE (t);  if (line == 0)    return lineno;  return line;}char *code_as_string (c, v)     enum tree_code c;     int v ATTRIBUTE_UNUSED;{  return tree_code_name [c];}char *language_as_string (c, v)     enum languages c;     int v ATTRIBUTE_UNUSED;{  switch (c)    {    case lang_c:      return "C";    case lang_cplusplus:      return "C++";    case lang_java:      return "Java";    default:      my_friendly_abort (355);      return 0;    }}/* Return the proper printed version of a parameter to a C++ function.  */char *parm_as_string (p, v)     int p;     int v ATTRIBUTE_UNUSED;{  if (p < 0)    return "`this'";  sprintf (digit_buffer, "%d", p+1);  return digit_buffer;}char *op_as_string (p, v)     enum tree_code p;     int v ATTRIBUTE_UNUSED;{  static char buf[] = "operator                ";  if (p == 0)    return "{unknown}";    strcpy (buf + 9, opname_tab [p]);  return buf;}char *assop_as_string (p, v)     enum tree_code p;     int v ATTRIBUTE_UNUSED;{  static char buf[] = "operator                ";  if (p == 0)    return "{unknown}";    strcpy (buf + 9, assignop_tab [p]);  return buf;}char *args_as_string (p, v)     tree p;     int v;{  if (p == NULL_TREE)    return "";  if (TREE_CODE_CLASS (TREE_CODE (TREE_VALUE (p))) == 't')    return type_as_string (p, v);  OB_INIT ();  for (; p; p = TREE_CHAIN (p))    {      if (TREE_VALUE (p) == null_node)	OB_PUTS ("NULL");      else	dump_type (error_type (TREE_VALUE (p)), v);      if (TREE_CHAIN (p))	OB_PUTS (", ");    }  OB_FINISH ();  return (char *)obstack_base (&scratch_obstack);}char *cv_as_string (p, v)     tree p;     int v ATTRIBUTE_UNUSED;{  OB_INIT ();  dump_qualifiers (p, before);  OB_FINISH ();  return (char *)obstack_base (&scratch_obstack);}

⌨️ 快捷键说明

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