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

📄 tree.h

📁 GCC编译器源代码
💻 H
📖 第 1 页 / 共 5 页
字号:
  (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \   || TREE_CODE (TYPE) == UNION_TYPE || TREE_CODE (TYPE) == QUAL_UNION_TYPE \   || TREE_CODE (TYPE) == SET_TYPE)/* Nonzero if TYPE represents a pointer type.  */#define POINTER_TYPE_P(TYPE) \  (TREE_CODE (TYPE) == POINTER_TYPE || TREE_CODE (TYPE) == REFERENCE_TYPE)/* Define many boolean fields that all tree nodes have.  *//* In VAR_DECL nodes, nonzero means address of this is needed.   So it cannot be in a register.   In a FUNCTION_DECL, nonzero means its address is needed.   So it must be compiled even if it is an inline function.   In CONSTRUCTOR nodes, it means object constructed must be in memory.   In LABEL_DECL nodes, it means a goto for this label has been seen    from a place outside all binding contours that restore stack levels.   In ..._TYPE nodes, it means that objects of this type must   be fully addressable.  This means that pieces of this   object cannot go into register parameters, for example.   In IDENTIFIER_NODEs, this means that some extern decl for this name   had its address taken.  That matters for inline functions.  */#define TREE_ADDRESSABLE(NODE) ((NODE)->common.addressable_flag)/* In a VAR_DECL, nonzero means allocate static storage.   In a FUNCTION_DECL, nonzero if function has been defined.   In a CONSTRUCTOR, nonzero means allocate static storage.  */#define TREE_STATIC(NODE) ((NODE)->common.static_flag)/* In a CONVERT_EXPR, NOP_EXPR or COMPOUND_EXPR, this means the node was   made implicitly and should not lead to an "unused value" warning.  */#define TREE_NO_UNUSED_WARNING(NODE) ((NODE)->common.static_flag)/* Nonzero for a TREE_LIST or TREE_VEC node means that the derivation   chain is via a `virtual' declaration.  */#define TREE_VIA_VIRTUAL(NODE) ((NODE)->common.static_flag)/* In an INTEGER_CST, REAL_CST, or COMPLEX_CST, this means there was an   overflow in folding.  This is distinct from TREE_OVERFLOW because ANSI C   requires a diagnostic when overflows occur in constant expressions.  */#define TREE_CONSTANT_OVERFLOW(NODE) ((NODE)->common.static_flag)/* In an IDENTIFIER_NODE, this means that assemble_name was called with   this string as an argument.  */#define TREE_SYMBOL_REFERENCED(NODE) ((NODE)->common.static_flag)/* In an INTEGER_CST, REAL_CST, of COMPLEX_CST, this means there was an   overflow in folding, and no warning has been issued for this subexpression.   TREE_OVERFLOW implies TREE_CONSTANT_OVERFLOW, but not vice versa.  */#define TREE_OVERFLOW(NODE) ((NODE)->common.public_flag)/* In a VAR_DECL or FUNCTION_DECL,   nonzero means name is to be accessible from outside this module.   In an identifier node, nonzero means an external declaration   accessible from outside this module was previously seen   for this name in an inner scope.  */#define TREE_PUBLIC(NODE) ((NODE)->common.public_flag)/* Nonzero for TREE_LIST or TREE_VEC node means that the path to the   base class is via a `public' declaration, which preserves public   fields from the base class as public.  */#define TREE_VIA_PUBLIC(NODE) ((NODE)->common.public_flag)/* Ditto, for `private' declarations.  */#define TREE_VIA_PRIVATE(NODE) ((NODE)->common.private_flag)/* Nonzero for TREE_LIST node means that the path to the   base class is via a `protected' declaration, which preserves   protected fields from the base class as protected.   OVERLOADED.  */#define TREE_VIA_PROTECTED(NODE) ((NODE)->common.protected_flag)/* In any expression, nonzero means it has side effects or reevaluation   of the whole expression could produce a different value.   This is set if any subexpression is a function call, a side effect   or a reference to a volatile variable.   In a ..._DECL, this is set only if the declaration said `volatile'.  */#define TREE_SIDE_EFFECTS(NODE) ((NODE)->common.side_effects_flag)/* Nonzero means this expression is volatile in the C sense:   its address should be of type `volatile WHATEVER *'.   In other words, the declared item is volatile qualified.   This is used in _DECL nodes and _REF nodes.   In a ..._TYPE node, means this type is volatile-qualified.   But use TYPE_VOLATILE instead of this macro when the node is a type,   because eventually we may make that a different bit.   If this bit is set in an expression, so is TREE_SIDE_EFFECTS.  */#define TREE_THIS_VOLATILE(NODE) ((NODE)->common.volatile_flag)/* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node,   nonzero means it may not be the lhs of an assignment.   In a ..._TYPE node, means this type is const-qualified   (but the macro TYPE_READONLY should be used instead of this macro   when the node is a type).  */#define TREE_READONLY(NODE) ((NODE)->common.readonly_flag)/* Value of expression is constant.   Always appears in all ..._CST nodes.   May also appear in an arithmetic expression, an ADDR_EXPR or a CONSTRUCTOR   if the value is constant.  */#define TREE_CONSTANT(NODE) ((NODE)->common.constant_flag)/* Nonzero means permanent node;   node will continue to exist for the entire compiler run.   Otherwise it will be recycled at the end of the function.  */#define TREE_PERMANENT(NODE) ((NODE)->common.permanent_flag)/* In INTEGER_TYPE or ENUMERAL_TYPE nodes, means an unsigned type.   In FIELD_DECL nodes, means an unsigned bit field.   The same bit is used in functions as DECL_BUILT_IN_NONANSI.  */#define TREE_UNSIGNED(NODE) ((NODE)->common.unsigned_flag)/* Nonzero in a VAR_DECL means assembler code has been written.   Nonzero in a FUNCTION_DECL means that the function has been compiled.   This is interesting in an inline function, since it might not need   to be compiled separately.   Nonzero in a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ENUMERAL_TYPE   if the sdb debugging info for the type has been written.   In a BLOCK node, nonzero if reorder_blocks has already seen this block.  */#define TREE_ASM_WRITTEN(NODE) ((NODE)->common.asm_written_flag)/* Nonzero in a _DECL if the name is used in its scope.   Nonzero in an expr node means inhibit warning if value is unused.   In IDENTIFIER_NODEs, this means that some extern decl for this name   was used.  */#define TREE_USED(NODE) ((NODE)->common.used_flag)/* Nonzero for a tree node whose evaluation could result   in the raising of an exception.  Not implemented yet.  */#define TREE_RAISES(NODE) ((NODE)->common.raises_flag)/* Used in classes in C++.  */#define TREE_PRIVATE(NODE) ((NODE)->common.private_flag)/* Used in classes in C++.   In a BLOCK node, this is BLOCK_HANDLER_BLOCK.  */#define TREE_PROTECTED(NODE) ((NODE)->common.protected_flag)/* These flags are available for each language front end to use internally.  */#define TREE_LANG_FLAG_0(NODE) ((NODE)->common.lang_flag_0)#define TREE_LANG_FLAG_1(NODE) ((NODE)->common.lang_flag_1)#define TREE_LANG_FLAG_2(NODE) ((NODE)->common.lang_flag_2)#define TREE_LANG_FLAG_3(NODE) ((NODE)->common.lang_flag_3)#define TREE_LANG_FLAG_4(NODE) ((NODE)->common.lang_flag_4)#define TREE_LANG_FLAG_5(NODE) ((NODE)->common.lang_flag_5)#define TREE_LANG_FLAG_6(NODE) ((NODE)->common.lang_flag_6)/* Define additional fields and accessors for nodes representing constants.  *//* In an INTEGER_CST node.  These two together make a 2-word integer.   If the data type is signed, the value is sign-extended to 2 words   even though not all of them may really be in use.   In an unsigned constant shorter than 2 words, the extra bits are 0.  */#define TREE_INT_CST_LOW(NODE) ((NODE)->int_cst.int_cst_low)#define TREE_INT_CST_HIGH(NODE) ((NODE)->int_cst.int_cst_high)#define INT_CST_LT(A, B)  \(TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B)			\ || (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B)		\     && ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (A)		\	 < (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (B))))#define INT_CST_LT_UNSIGNED(A, B)  \(((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A)	\  < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B))	\ || (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A)	\      == (unsigned HOST_WIDE_INT ) TREE_INT_CST_HIGH (B)) \     && (((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (A)	\	  < (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (B)))))struct tree_int_cst{  char common[sizeof (struct tree_common)];  struct rtx_def *rtl;	/* acts as link to register transfer language			   (rtl) info */  HOST_WIDE_INT int_cst_low;  HOST_WIDE_INT int_cst_high;};/* In REAL_CST, STRING_CST, COMPLEX_CST nodes, and CONSTRUCTOR nodes,   and generally in all kinds of constants that could   be given labels (rather than being immediate).  */#define TREE_CST_RTL(NODE) ((NODE)->real_cst.rtl)/* In a REAL_CST node.  *//* We can represent a real value as either a `double' or a string.   Strings don't allow for any optimization, but they do allow   for cross-compilation.  */#define TREE_REAL_CST(NODE) ((NODE)->real_cst.real_cst)#include "real.h"struct tree_real_cst{  char common[sizeof (struct tree_common)];  struct rtx_def *rtl;	/* acts as link to register transfer language				   (rtl) info */  REAL_VALUE_TYPE real_cst;};/* In a STRING_CST */#define TREE_STRING_LENGTH(NODE) ((NODE)->string.length)#define TREE_STRING_POINTER(NODE) ((NODE)->string.pointer)struct tree_string{  char common[sizeof (struct tree_common)];  struct rtx_def *rtl;	/* acts as link to register transfer language				   (rtl) info */  int length;  char *pointer;};/* In a COMPLEX_CST node.  */#define TREE_REALPART(NODE) ((NODE)->complex.real)#define TREE_IMAGPART(NODE) ((NODE)->complex.imag)struct tree_complex{  char common[sizeof (struct tree_common)];  struct rtx_def *rtl;	/* acts as link to register transfer language				   (rtl) info */  union tree_node *real;  union tree_node *imag;};/* Define fields and accessors for some special-purpose tree nodes.  */#define IDENTIFIER_LENGTH(NODE) ((NODE)->identifier.length)#define IDENTIFIER_POINTER(NODE) ((NODE)->identifier.pointer)struct tree_identifier{  char common[sizeof (struct tree_common)];  int length;  char *pointer;};/* In a TREE_LIST node.  */#define TREE_PURPOSE(NODE) ((NODE)->list.purpose)#define TREE_VALUE(NODE) ((NODE)->list.value)struct tree_list{  char common[sizeof (struct tree_common)];  union tree_node *purpose;  union tree_node *value;};/* In a TREE_VEC node.  */#define TREE_VEC_LENGTH(NODE) ((NODE)->vec.length)#define TREE_VEC_ELT(NODE,I) ((NODE)->vec.a[I])#define TREE_VEC_END(NODE) (&((NODE)->vec.a[(NODE)->vec.length]))struct tree_vec{  char common[sizeof (struct tree_common)];  int length;  union tree_node *a[1];};/* Define fields and accessors for some nodes that represent expressions.  *//* In a SAVE_EXPR node.  */#define SAVE_EXPR_CONTEXT(NODE) TREE_OPERAND(NODE, 1)#define SAVE_EXPR_RTL(NODE) (*(struct rtx_def **) &(NODE)->exp.operands[2])#define SAVE_EXPR_NOPLACEHOLDER(NODE) TREE_UNSIGNED (NODE)/* In a RTL_EXPR node.  */#define RTL_EXPR_SEQUENCE(NODE) (*(struct rtx_def **) &(NODE)->exp.operands[0])#define RTL_EXPR_RTL(NODE) (*(struct rtx_def **) &(NODE)->exp.operands[1])/* In a CALL_EXPR node.  */#define CALL_EXPR_RTL(NODE) (*(struct rtx_def **) &(NODE)->exp.operands[2])/* In a CONSTRUCTOR node.  */#define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND (NODE, 1)/* In ordinary expression nodes.  */#define TREE_OPERAND(NODE, I) ((NODE)->exp.operands[I])#define TREE_COMPLEXITY(NODE) ((NODE)->exp.complexity)struct tree_exp{  char common[sizeof (struct tree_common)];  int complexity;  union tree_node *operands[1];};/* In a BLOCK node.  */#define BLOCK_VARS(NODE) ((NODE)->block.vars)#define BLOCK_TYPE_TAGS(NODE) ((NODE)->block.type_tags)#define BLOCK_SUBBLOCKS(NODE) ((NODE)->block.subblocks)#define BLOCK_SUPERCONTEXT(NODE) ((NODE)->block.supercontext)/* Note: when changing this, make sure to find the places   that use chainon or nreverse.  */#define BLOCK_CHAIN(NODE) TREE_CHAIN (NODE)#define BLOCK_ABSTRACT_ORIGIN(NODE) ((NODE)->block.abstract_origin)#define BLOCK_ABSTRACT(NODE) ((NODE)->block.abstract_flag)#define BLOCK_END_NOTE(NODE) ((NODE)->block.end_note)/* Nonzero means that this block is prepared to handle exceptions   listed in the BLOCK_VARS slot.  */#define BLOCK_HANDLER_BLOCK(NODE) ((NODE)->block.handler_block_flag)struct tree_block{  char common[sizeof (struct tree_common)];  unsigned handler_block_flag : 1;  unsigned abstract_flag : 1;  union tree_node *vars;  union tree_node *type_tags;  union tree_node *subblocks;  union tree_node *supercontext;  union tree_node *abstract_origin;  struct rtx_def *end_note;};/* Define fields and accessors for nodes representing data types.  *//* See tree.def for documentation of the use of these fields.   Look at the documentation of the various ..._TYPE tree codes.  */#define TYPE_UID(NODE) ((NODE)->type.uid)#define TYPE_SIZE(NODE) ((NODE)->type.size)#define TYPE_MODE(NODE) ((NODE)->type.mode)#define TYPE_VALUES(NODE) ((NODE)->type.values)#define TYPE_DOMAIN(NODE) ((NODE)->type.values)#define TYPE_FIELDS(NODE) ((NODE)->type.values)#define TYPE_METHODS(NODE) ((NODE)->type.maxval)#define TYPE_VFIELD(NODE) ((NODE)->type.minval)#define TYPE_ARG_TYPES(NODE) ((NODE)->type.values)#define TYPE_METHOD_BASETYPE(NODE) ((NODE)->type.maxval)#define TYPE_OFFSET_BASETYPE(NODE) ((NODE)->type.maxval)#define TYPE_POINTER_TO(NODE) ((NODE)->type.pointer_to)#define TYPE_REFERENCE_TO(NODE) ((NODE)->type.reference_to)#define TYPE_MIN_VALUE(NODE) ((NODE)->type.minval)#define TYPE_MAX_VALUE(NODE) ((NODE)->type.maxval)#define TYPE_PRECISION(NODE) ((NODE)->type.precision)#define TYPE_SYMTAB_ADDRESS(NODE) ((NODE)->type.symtab.address)#define TYPE_SYMTAB_POINTER(NODE) ((NODE)->type.symtab.pointer)#define TYPE_NAME(NODE) ((NODE)->type.name)#define TYPE_NEXT_VARIANT(NODE) ((NODE)->type.next_variant)#define TYPE_MAIN_VARIANT(NODE) ((NODE)->type.main_variant)#define TYPE_BINFO(NODE) ((NODE)->type.binfo)

⌨️ 快捷键说明

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