📄 tree.h
字号:
given type. For example, given types C and D, such that D is inherited by C, 3 binfo nodes will be allocated: one for describing the binfo properties of C, similarly one for D, and one for describing the binfo properties of D as a base type for C. Thus, given a pointer to class C, one can get a pointer to the binfo of D acting as a basetype for C by looking at C's binfo's basetypes. *//* The actual data type node being inherited in this basetype. */#define BINFO_TYPE(NODE) TREE_TYPE (NODE)/* The offset where this basetype appears in its containing type. BINFO_OFFSET slot holds the offset (in bytes) from the base of the complete object to the base of the part of the object that is allocated on behalf of this `type'. This is always 0 except when there is multiple inheritance. */ #define BINFO_OFFSET(NODE) TREE_VEC_ELT ((NODE), 1)#define TYPE_BINFO_OFFSET(NODE) BINFO_OFFSET (TYPE_BINFO (NODE))#define BINFO_OFFSET_ZEROP(NODE) (BINFO_OFFSET (NODE) == integer_zero_node)/* The virtual function table belonging to this basetype. Virtual function tables provide a mechanism for run-time method dispatching. The entries of a virtual function table are language-dependent. */#define BINFO_VTABLE(NODE) TREE_VEC_ELT ((NODE), 2)#define TYPE_BINFO_VTABLE(NODE) BINFO_VTABLE (TYPE_BINFO (NODE))/* The virtual functions in the virtual function table. This is a TREE_LIST that is used as an initial approximation for building a virtual function table for this basetype. */#define BINFO_VIRTUALS(NODE) TREE_VEC_ELT ((NODE), 3)#define TYPE_BINFO_VIRTUALS(NODE) BINFO_VIRTUALS (TYPE_BINFO (NODE))/* A vector of additional binfos for the types inherited by this basetype. If this basetype describes type D as inherited in C, and if the basetypes of D are E anf F, then this vector contains binfos for inheritance of E and F by C. ??? This could probably be done by just allocating the base types at the end of this TREE_VEC (instead of using another TREE_VEC). This would simplify the calculation of how many basetypes a given type had. */#define BINFO_BASETYPES(NODE) TREE_VEC_ELT ((NODE), 4)#define TYPE_BINFO_BASETYPES(NODE) TREE_VEC_ELT (TYPE_BINFO (NODE), 4)/* For a BINFO record describing an inheritance, this yields a pointer to the artificial FIELD_DECL node which contains the "virtual base class pointer" for the given inheritance. */#define BINFO_VPTR_FIELD(NODE) TREE_VEC_ELT ((NODE), 5)/* Accessor macro to get to the Nth basetype of this basetype. */#define BINFO_BASETYPE(NODE,N) TREE_VEC_ELT (BINFO_BASETYPES (NODE), (N))#define TYPE_BINFO_BASETYPE(NODE,N) BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (NODE)), (N)))/* Slot used to build a chain that represents a use of inheritance. For example, if X is derived from Y, and Y is derived from Z, then this field can be used to link the binfo node for X to the binfo node for X's Y to represent the use of inheritance from X to Y. Similarly, this slot of the binfo node for X's Y can point to the Z from which Y is inherited (in X's inheritance hierarchy). In this fashion, one can represent and traverse specific uses of inheritance using the binfo nodes themselves (instead of consing new space pointing to binfo nodes). It is up to the language-dependent front-ends to maintain this information as necessary. */#define BINFO_INHERITANCE_CHAIN(NODE) TREE_VEC_ELT ((NODE), 0)/* Define fields and accessors for nodes representing declared names. *//* This is the name of the object as written by the user. It is an IDENTIFIER_NODE. */#define DECL_NAME(NODE) ((NODE)->decl.name)/* This is the name of the object as the assembler will see it (but before any translations made by ASM_OUTPUT_LABELREF). Often this is the same as DECL_NAME. It is an IDENTIFIER_NODE. */#define DECL_ASSEMBLER_NAME(NODE) ((NODE)->decl.assembler_name)/* Records the section name in a section attribute. Used to pass the name from decl_attributes to make_function_rtl and make_decl_rtl. */#define DECL_SECTION_NAME(NODE) ((NODE)->decl.section_name)/* For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE node that the field is a member of. For VAR_DECL, PARM_DECL, FUNCTION_DECL, LABEL_DECL, and CONST_DECL nodes, this points to the FUNCTION_DECL for the containing function, or else yields NULL_TREE if the given decl has "file scope". */#define DECL_CONTEXT(NODE) ((NODE)->decl.context)#define DECL_FIELD_CONTEXT(NODE) ((NODE)->decl.context)/* In a DECL this is the field where configuration dependent machine attributes are store */#define DECL_MACHINE_ATTRIBUTES(NODE) ((NODE)->decl.machine_attributes)/* In a FIELD_DECL, this is the field position, counting in bits, of the bit closest to the beginning of the structure. */#define DECL_FIELD_BITPOS(NODE) ((NODE)->decl.arguments)/* In a FIELD_DECL, this indicates whether the field was a bit-field and if so, the type that was originally specified for it. TREE_TYPE may have been modified (in finish_struct). */#define DECL_BIT_FIELD_TYPE(NODE) ((NODE)->decl.result)/* In FUNCTION_DECL, a chain of ..._DECL nodes. *//* VAR_DECL and PARM_DECL reserve the arguments slot for language-specific uses. */#define DECL_ARGUMENTS(NODE) ((NODE)->decl.arguments)/* In FUNCTION_DECL, holds the decl for the return value. */#define DECL_RESULT(NODE) ((NODE)->decl.result)/* In PARM_DECL, holds the type as written (perhaps a function or array). */#define DECL_ARG_TYPE_AS_WRITTEN(NODE) ((NODE)->decl.result)/* For a FUNCTION_DECL, holds the tree of BINDINGs. For a VAR_DECL, holds the initial value. For a PARM_DECL, not used--default values for parameters are encoded in the type of the function, not in the PARM_DECL slot. */#define DECL_INITIAL(NODE) ((NODE)->decl.initial)/* For a PARM_DECL, records the data type used to pass the argument, which may be different from the type seen in the program. */#define DECL_ARG_TYPE(NODE) ((NODE)->decl.initial) /* In PARM_DECL. *//* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which if nonzero, indicates that the field occupies the type. */#define DECL_QUALIFIER(NODE) ((NODE)->decl.initial)/* These two fields describe where in the source code the declaration was. */#define DECL_SOURCE_FILE(NODE) ((NODE)->decl.filename)#define DECL_SOURCE_LINE(NODE) ((NODE)->decl.linenum)/* Holds the size of the datum, as a tree expression. Need not be constant. */#define DECL_SIZE(NODE) ((NODE)->decl.size)/* Holds the alignment required for the datum. */#define DECL_ALIGN(NODE) ((NODE)->decl.frame_size.u)/* Holds the machine mode corresponding to the declaration of a variable or field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a FIELD_DECL. */#define DECL_MODE(NODE) ((NODE)->decl.mode)/* Holds the RTL expression for the value of a variable or function. If PROMOTED_MODE is defined, the mode of this expression may not be same as DECL_MODE. In that case, DECL_MODE contains the mode corresponding to the variable's data type, while the mode of DECL_RTL is the mode actually used to contain the data. */#define DECL_RTL(NODE) ((NODE)->decl.rtl)/* For PARM_DECL, holds an RTL for the stack slot or register where the data was actually passed. */#define DECL_INCOMING_RTL(NODE) ((NODE)->decl.saved_insns.r)/* For FUNCTION_DECL, if it is inline, holds the saved insn chain. */#define DECL_SAVED_INSNS(NODE) ((NODE)->decl.saved_insns.r)/* For FUNCTION_DECL, if it is inline, holds the size of the stack frame, as an integer. */#define DECL_FRAME_SIZE(NODE) ((NODE)->decl.frame_size.i)/* For FUNCTION_DECL, if it is built-in, this identifies which built-in operation it is. */#define DECL_FUNCTION_CODE(NODE) ((NODE)->decl.frame_size.f)#define DECL_SET_FUNCTION_CODE(NODE,VAL) ((NODE)->decl.frame_size.f = (VAL))/* For a FIELD_DECL, holds the size of the member as an integer. */#define DECL_FIELD_SIZE(NODE) ((NODE)->decl.saved_insns.i)/* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways. Before the struct containing the FUNCTION_DECL is laid out, DECL_VINDEX may point to a FUNCTION_DECL in a base class which is the FUNCTION_DECL which this FUNCTION_DECL will replace as a virtual function. When the class is laid out, this pointer is changed to an INTEGER_CST node which is suitable for use as an index into the virtual function table. */#define DECL_VINDEX(NODE) ((NODE)->decl.vindex)/* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in which this FIELD_DECL is defined. This information is needed when writing debugging information about vfield and vbase decls for C++. */#define DECL_FCONTEXT(NODE) ((NODE)->decl.vindex)/* Every ..._DECL node gets a unique number. */#define DECL_UID(NODE) ((NODE)->decl.uid)/* For any sort of a ..._DECL node, this points to the original (abstract) decl node which this decl is an instance of, or else it is NULL indicating that this decl is not an instance of some other decl. */#define DECL_ABSTRACT_ORIGIN(NODE) ((NODE)->decl.abstract_origin)/* Nonzero for any sort of ..._DECL node means this decl node represents an inline instance of some original (abstract) decl from an inline function; suppress any warnings about shadowing some other variable. */#define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != (tree) 0)/* Nonzero if a _DECL means that the name of this decl should be ignored for symbolic debug purposes. */#define DECL_IGNORED_P(NODE) ((NODE)->decl.ignored_flag)/* Nonzero for a given ..._DECL node means that this node represents an "abstract instance" of the given declaration (e.g. in the original declaration of an inline function). When generating symbolic debugging information, we mustn't try to generate any address information for nodes marked as "abstract instances" because we don't actually generate any code or allocate any data space for such instances. */#define DECL_ABSTRACT(NODE) ((NODE)->decl.abstract_flag)/* Nonzero if a _DECL means that no warnings should be generated just because this decl is unused. */#define DECL_IN_SYSTEM_HEADER(NODE) ((NODE)->decl.in_system_header_flag)/* Nonzero for a given ..._DECL node means that this node should be put in .common, if possible. If a DECL_INITIAL is given, and it is not error_mark_node, then the decl cannot be put in .common. */#define DECL_COMMON(NODE) ((NODE)->decl.common_flag)/* Language-specific decl information. */#define DECL_LANG_SPECIFIC(NODE) ((NODE)->decl.lang_specific)/* In a VAR_DECL or FUNCTION_DECL, nonzero means external reference: do not allocate storage, and refer to a definition elsewhere. */#define DECL_EXTERNAL(NODE) ((NODE)->decl.external_flag)/* In a TYPE_DECL nonzero means the detail info about this type is not dumped into stabs. Instead it will generate cross reference ('x') of names. This uses the same flag as DECL_EXTERNAL. */#define TYPE_DECL_SUPPRESS_DEBUG(NODE) ((NODE)->decl.external_flag) /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. In LABEL_DECL nodes, nonzero means that an error message about jumping into such a binding contour has been printed for this label. */#define DECL_REGISTER(NODE) ((NODE)->decl.regdecl_flag)/* In a FIELD_DECL, indicates this field should be bit-packed. */#define DECL_PACKED(NODE) ((NODE)->decl.regdecl_flag)/* Nonzero in a ..._DECL means this variable is ref'd from a nested function. For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes. For LABEL_DECL nodes, nonzero if nonlocal gotos to the label are permitted. Also set in some languages for variables, etc., outside the normal lexical scope, such as class instance variables. */#define DECL_NONLOCAL(NODE) ((NODE)->decl.nonlocal_flag)/* Nonzero in a FUNCTION_DECL means this function can be substituted where it is called. */#define DECL_INLINE(NODE) ((NODE)->decl.inline_flag)/* Nonzero in a FUNCTION_DECL means this is a built-in function that is not specified by ansi C and that users are supposed to be allowed to redefine for any purpose whatever. */#define DECL_BUILT_IN_NONANSI(NODE) ((NODE)->common.unsigned_flag)/* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed specially. */#define DECL_BIT_FIELD(NODE) ((NODE)->decl.bit_field_flag)/* In a LABEL_DECL, nonzero means label was defined inside a binding contour that restored a stack level and which is now exited. */#define DECL_TOO_LATE(NODE) ((NODE)->decl.bit_field_flag)/* In a FUNCTION_DECL, nonzero means a built in function. */#define DECL_BUILT_IN(NODE) ((NODE)->decl.bit_field_flag)/* In a VAR_DECL that's static, nonzero if the space is in the text section. */#define DECL_IN_TEXT_SECTION(NODE) ((NODE)->decl.bit_field_flag)/* Used in VAR_DECLs to indicate that the variable is a vtable. Used in FIELD_DECLs for vtable pointers. Used in FUNCTION_DECLs to indicate that the function is virtual. */#define DECL_VIRTUAL_P(NODE) ((NODE)->decl.virtual_flag)/* Used to indicate that the linkage status of this DECL is not yet known, so it should not be output now. */#define DECL_DEFER_OUTPUT(NODE) ((NODE)->decl.defer_output)/* Used in PARM_DECLs whose type are unions to indicate that the argument should be passed in the same way that the first union alternative would be passed. */#define DECL_TRANSPARENT_UNION(NODE) ((NODE)->decl.transparent_union)/* Used in FUNCTION_DECLs to indicate that they should be run automatically at the beginning or end of execution. */#define DECL_STATIC_CONSTRUCTOR(NODE) ((NODE)->decl.static_ctor_flag)#define DECL_STATIC_DESTRUCTOR(NODE) ((NODE)->decl.static_dtor_flag)/* Used to indicate that this DECL represents a compiler-generated entity. */#define DECL_ARTIFICIAL(NODE) ((NODE)->decl.artificial_flag)/* Used to indicate that this DECL has weak linkage. */#define DECL_WEAK(NODE) ((NODE)->decl.weak_flag)/* Additional flags for language-specific uses. */#define DECL_LANG_FLAG_0(NODE) ((NODE)->decl.lang_flag_0)#define DECL_LANG_FLAG_1(NODE) ((NODE)->decl.lang_flag_1)#define DECL_LANG_FLAG_2(NODE) ((NODE)->decl.lang_flag_2)#define DECL_LANG_FLAG_3(NODE) ((NODE)->decl.lang_flag_3)#define DECL_LANG_FLAG_4(NODE) ((NODE)->decl.lang_flag_4)#define DECL_LANG_FLAG_5(NODE) ((NODE)->decl.lang_flag_5)#define DECL_LANG_FLAG_6(NODE) ((NODE)->decl.lang_flag_6)#define DECL_LANG_FLAG_7(NODE) ((NODE)->decl.lang_flag_7)struct tree_decl{ char common[sizeof (struct tree_common)]; char *filename; int linenum; union tree_node *size; unsigned int uid;#ifdef ONLY_INT_FIELDS int mode : 8;#else enum machine_mode mode : 8;#endif unsigned external_flag : 1; unsigned nonlocal_flag : 1; unsigned regdecl_flag : 1; unsigned inline_flag : 1; unsigned bit_field_flag : 1; unsigned virtual_flag : 1; unsigned ignored_flag : 1; unsigned abstract_flag : 1; unsigned in_system_header_flag : 1; unsigned common_flag : 1; unsigned defer_output : 1; unsigned transparent_union : 1; unsigned static_ctor_flag : 1; unsigned static_dtor_flag : 1; unsigned artificial_flag : 1; unsigned weak_flag : 1; /* room for no more */ unsigned lang_flag_0 : 1; unsigned lang_flag_1 : 1; unsigned lang_flag_2 : 1; unsigned lang_flag_3 : 1; unsigned lang_flag_4 : 1; unsigned lang_flag_5 : 1; unsigned lang_flag_6 : 1; unsigned lang_flag_7 : 1; union tree_node *name; union tree_node *context; union tree_node *arguments; union tree_node *result; union tree_node *initial; union tree_node *abstract_origin; union tree_node *assembler_name; union tree_node *section_name; union tree_node *machine_attributes; struct rtx_def *rtl; /* acts as link to register transfer language (rtl) info */ /* For a FUNCTION_DECL, if inline, this is the size of frame needed. If built-in, this is the code for which built-in function. For other kinds of decls, this is DECL_ALIGN. */ union { int i; unsigned int u;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -