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

📄 print-tree.c

📁 GCC编译器源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	fputs (" inline", file);      if (TREE_CODE (node) == TYPE_DECL && TYPE_DECL_SUPPRESS_DEBUG (node))	fputs (" suppress-debug", file);      if (TREE_CODE (node) == FUNCTION_DECL && DECL_BUILT_IN (node))	fputs (" built-in", file);      if (TREE_CODE (node) == FUNCTION_DECL && DECL_BUILT_IN_NONANSI (node))	fputs (" built-in-nonansi", file);      if (TREE_CODE (node) == FIELD_DECL && DECL_BIT_FIELD (node))	fputs (" bit-field", file);      if (TREE_CODE (node) == LABEL_DECL && DECL_TOO_LATE (node))	fputs (" too-late", file);      if (TREE_CODE (node) == VAR_DECL && DECL_IN_TEXT_SECTION (node))	fputs (" in-text-section", file);      if (DECL_VIRTUAL_P (node))	fputs (" virtual", file);      if (DECL_DEFER_OUTPUT (node))	fputs (" defer-output", file);      if (DECL_TRANSPARENT_UNION (node))	fputs (" transparent-union", file);      if (DECL_LANG_FLAG_0 (node))	fputs (" decl_0", file);      if (DECL_LANG_FLAG_1 (node))	fputs (" decl_1", file);      if (DECL_LANG_FLAG_2 (node))	fputs (" decl_2", file);      if (DECL_LANG_FLAG_3 (node))	fputs (" decl_3", file);      if (DECL_LANG_FLAG_4 (node))	fputs (" decl_4", file);      if (DECL_LANG_FLAG_5 (node))	fputs (" decl_5", file);      if (DECL_LANG_FLAG_6 (node))	fputs (" decl_6", file);      if (DECL_LANG_FLAG_7 (node))	fputs (" decl_7", file);      fprintf (file, " %s", mode_name[(int) mode]);      fprintf (file, " file %s line %d",	       DECL_SOURCE_FILE (node), DECL_SOURCE_LINE (node));      print_node (file, "size", DECL_SIZE (node), indent + 4);      indent_to (file, indent + 3);      if (TREE_CODE (node) != FUNCTION_DECL)	fprintf (file, " align %d", DECL_ALIGN (node));      else if (DECL_INLINE (node))	fprintf (file, " frame_size %d", DECL_FRAME_SIZE (node));      else if (DECL_BUILT_IN (node))	fprintf (file, " built-in code %d", DECL_FUNCTION_CODE (node));      if (TREE_CODE (node) == FIELD_DECL)	print_node (file, "bitpos", DECL_FIELD_BITPOS (node), indent + 4);      print_node_brief (file, "context", DECL_CONTEXT (node), indent + 4);      print_node_brief (file, "machine_attributes", DECL_MACHINE_ATTRIBUTES (node), indent + 4);      print_node_brief (file, "abstract_origin",			DECL_ABSTRACT_ORIGIN (node), indent + 4);      print_node (file, "arguments", DECL_ARGUMENTS (node), indent + 4);      print_node (file, "result", DECL_RESULT (node), indent + 4);      print_node_brief (file, "initial", DECL_INITIAL (node), indent + 4);      print_lang_decl (file, node, indent);      if (DECL_RTL (node) != 0)	{	  indent_to (file, indent + 4);	  print_rtl (file, DECL_RTL (node));	}      if (DECL_SAVED_INSNS (node) != 0)	{	  indent_to (file, indent + 4);	  if (TREE_CODE (node) == PARM_DECL)	    {	      fprintf (file, "incoming-rtl ");	      print_rtl (file, DECL_INCOMING_RTL (node));	    }	  else if (TREE_CODE (node) == FUNCTION_DECL)	    {	      fprintf (file, "saved-insns ");	      fprintf (file, HOST_PTR_PRINTF, 		       (HOST_WIDE_INT) DECL_SAVED_INSNS (node));	    }	}      /* Print the decl chain only if decl is at second level.  */      if (indent == 4)	print_node (file, "chain", TREE_CHAIN (node), indent + 4);      else	print_node_brief (file, "chain", TREE_CHAIN (node), indent + 4);      break;    case 't':      if (TYPE_NO_FORCE_BLK (node))	fputs (" no-force-blk", file);      if (TYPE_STRING_FLAG (node))	fputs (" string-flag", file);      if (TYPE_NEEDS_CONSTRUCTING (node))	fputs (" needs-constructing", file);      if (TYPE_TRANSPARENT_UNION (node))	fputs (" transparent-union", file);      if (TYPE_PACKED (node))	fputs (" packed", file);      if (TYPE_LANG_FLAG_0 (node))	fputs (" type_0", file);      if (TYPE_LANG_FLAG_1 (node))	fputs (" type_1", file);      if (TYPE_LANG_FLAG_2 (node))	fputs (" type_2", file);      if (TYPE_LANG_FLAG_3 (node))	fputs (" type_3", file);      if (TYPE_LANG_FLAG_4 (node))	fputs (" type_4", file);      if (TYPE_LANG_FLAG_5 (node))	fputs (" type_5", file);      if (TYPE_LANG_FLAG_6 (node))	fputs (" type_6", file);      mode = TYPE_MODE (node);      fprintf (file, " %s", mode_name[(int) mode]);      print_node (file, "size", TYPE_SIZE (node), indent + 4);      indent_to (file, indent + 3);      fprintf (file, " align %d", TYPE_ALIGN (node));      fprintf (file, " symtab %d", TYPE_SYMTAB_ADDRESS (node));      print_node (file, "attributes", TYPE_ATTRIBUTES (node), indent + 4);      if (TREE_CODE (node) == ARRAY_TYPE || TREE_CODE (node) == SET_TYPE)	print_node (file, "domain", TYPE_DOMAIN (node), indent + 4);      else if (TREE_CODE (node) == INTEGER_TYPE	       || TREE_CODE (node) == BOOLEAN_TYPE	       || TREE_CODE (node) == CHAR_TYPE)	{	  fprintf (file, " precision %d", TYPE_PRECISION (node));	  print_node (file, "min", TYPE_MIN_VALUE (node), indent + 4);	  print_node (file, "max", TYPE_MAX_VALUE (node), indent + 4);	}      else if (TREE_CODE (node) == ENUMERAL_TYPE)	{	  fprintf (file, " precision %d", TYPE_PRECISION (node));	  print_node (file, "min", TYPE_MIN_VALUE (node), indent + 4);	  print_node (file, "max", TYPE_MAX_VALUE (node), indent + 4);	  print_node (file, "values", TYPE_VALUES (node), indent + 4);	}      else if (TREE_CODE (node) == REAL_TYPE)	fprintf (file, " precision %d", TYPE_PRECISION (node));      else if (TREE_CODE (node) == RECORD_TYPE	       || TREE_CODE (node) == UNION_TYPE	       || TREE_CODE (node) == QUAL_UNION_TYPE)	print_node (file, "fields", TYPE_FIELDS (node), indent + 4);      else if (TREE_CODE (node) == FUNCTION_TYPE || TREE_CODE (node) == METHOD_TYPE)	{	  if (TYPE_METHOD_BASETYPE (node))	    print_node_brief (file, "method basetype", TYPE_METHOD_BASETYPE (node), indent + 4);	  print_node (file, "arg-types", TYPE_ARG_TYPES (node), indent + 4);	}      if (TYPE_CONTEXT (node))	print_node_brief (file, "context", TYPE_CONTEXT (node), indent + 4);      print_lang_type (file, node, indent);      if (TYPE_POINTER_TO (node) || TREE_CHAIN (node))	indent_to (file, indent + 3);      print_node_brief (file, "pointer_to_this", TYPE_POINTER_TO (node), indent + 4);      print_node_brief (file, "reference_to_this", TYPE_REFERENCE_TO (node), indent + 4);      print_node_brief (file, "chain", TREE_CHAIN (node), indent + 4);      break;    case 'b':      print_node (file, "vars", BLOCK_VARS (node), indent + 4);      print_node (file, "tags", BLOCK_TYPE_TAGS (node), indent + 4);      print_node (file, "supercontext", BLOCK_SUPERCONTEXT (node), indent + 4);      print_node (file, "subblocks", BLOCK_SUBBLOCKS (node), indent + 4);      print_node (file, "chain", BLOCK_CHAIN (node), indent + 4);      print_node (file, "abstract_origin",		  BLOCK_ABSTRACT_ORIGIN (node), indent + 4);      return;    case 'e':    case '<':    case '1':    case '2':    case 'r':    case 's':      if (TREE_CODE (node) == BIND_EXPR)	{	  print_node (file, "vars", TREE_OPERAND (node, 0), indent + 4);	  print_node (file, "body", TREE_OPERAND (node, 1), indent + 4);	  print_node (file, "block", TREE_OPERAND (node, 2), indent + 4);	  return;	}      first_rtl = len = tree_code_length[(int) TREE_CODE (node)];      /* These kinds of nodes contain rtx's, not trees,	 after a certain point.  Print the rtx's as rtx's.  */      switch (TREE_CODE (node))	{	case SAVE_EXPR:	  first_rtl = 2;	  break;	case CALL_EXPR:	  first_rtl = 2;	  break;	case METHOD_CALL_EXPR:	  first_rtl = 3;	  break;	case WITH_CLEANUP_EXPR:	  /* Should be defined to be 2.  */	  first_rtl = 1;	  break;	case RTL_EXPR:	  first_rtl = 0;	default:	  break;	}      for (i = 0; i < len; i++)	{	  if (i >= first_rtl)	    {	      indent_to (file, indent + 4);	      fprintf (file, "rtl %d ", i);	      if (TREE_OPERAND (node, i))		print_rtl (file, (struct rtx_def *) TREE_OPERAND (node, i));	      else		fprintf (file, "(nil)");	      fprintf (file, "\n");	    }	  else	    {	      char temp[10];	      sprintf (temp, "arg %d", i);	      print_node (file, temp, TREE_OPERAND (node, i), indent + 4);	    }	}      break;    case 'c':    case 'x':      switch (TREE_CODE (node))	{	case INTEGER_CST:	  if (TREE_CONSTANT_OVERFLOW (node))	    fprintf (file, " overflow");	  fprintf (file, " ");	  if (TREE_INT_CST_HIGH (node) == 0)	    fprintf (file, HOST_WIDE_INT_PRINT_UNSIGNED,		     TREE_INT_CST_LOW (node));	  else if (TREE_INT_CST_HIGH (node) == -1		   && TREE_INT_CST_LOW (node) != 0)	    {	      fprintf (file, "-");	      fprintf (file, HOST_WIDE_INT_PRINT_UNSIGNED,		       -TREE_INT_CST_LOW (node));	    }	  else	    fprintf (file, HOST_WIDE_INT_PRINT_DOUBLE_HEX,		     TREE_INT_CST_HIGH (node), TREE_INT_CST_LOW (node));	  break;	case REAL_CST:	  {	    REAL_VALUE_TYPE d;	    if (TREE_OVERFLOW (node))	      fprintf (file, " overflow");#if !defined(REAL_IS_NOT_DOUBLE) || defined(REAL_ARITHMETIC)	    d = TREE_REAL_CST (node);	    if (REAL_VALUE_ISINF (d))	      fprintf (file, " Inf");	    else if (REAL_VALUE_ISNAN (d))	      fprintf (file, " Nan");	    else	      {		char string[100];		REAL_VALUE_TO_DECIMAL (d, "%e", string);		fprintf (file, " %s", string);	      }#else	    {	      int i;	      unsigned char *p = (unsigned char *) &TREE_REAL_CST (node);	      fprintf (file, " 0x");	      for (i = 0; i < sizeof TREE_REAL_CST (node); i++)		fprintf (file, "%02x", *p++);	      fprintf (file, "");	    }#endif	  }	  break;	case COMPLEX_CST:	  print_node (file, "real", TREE_REALPART (node), indent + 4);	  print_node (file, "imag", TREE_IMAGPART (node), indent + 4);	  break;	case STRING_CST:	  fprintf (file, " \"%s\"", TREE_STRING_POINTER (node));	  /* Print the chain at second level.  */	  if (indent == 4)	    print_node (file, "chain", TREE_CHAIN (node), indent + 4);	  else	    print_node_brief (file, "chain", TREE_CHAIN (node), indent + 4);	  break;	case IDENTIFIER_NODE:	  print_lang_identifier (file, node, indent);	  break;	case TREE_LIST:	  print_node (file, "purpose", TREE_PURPOSE (node), indent + 4);	  print_node (file, "value", TREE_VALUE (node), indent + 4);	  print_node (file, "chain", TREE_CHAIN (node), indent + 4);	  break;	case TREE_VEC:	  len = TREE_VEC_LENGTH (node);	  for (i = 0; i < len; i++)	    if (TREE_VEC_ELT (node, i))	      {		char temp[10];		sprintf (temp, "elt %d", i);		indent_to (file, indent + 4);		print_node_brief (file, temp, TREE_VEC_ELT (node, i), 0);	      }	  break;	case OP_IDENTIFIER:	  print_node (file, "op1", TREE_PURPOSE (node), indent + 4);	  print_node (file, "op2", TREE_VALUE (node), indent + 4);	  break;	default:	  break;	}      break;    }  fprintf (file, ">");}

⌨️ 快捷键说明

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