📄 fdsa.h
字号:
/* 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])/* 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 a BLOCK node. */#define BLOCK_VARS(NODE) ((NODE)->exp.operands[0])#define BLOCK_TYPE_TAGS(NODE) ((NODE)->exp.operands[1])#define BLOCK_SUBBLOCKS(NODE) ((NODE)->exp.operands[2])#define BLOCK_SUPERCONTEXT(NODE) ((NODE)->exp.operands[3])/* Note: when changing this, make sure to find the places that use chainon or nreverse. */#define BLOCK_CHAIN(NODE) TREE_CHAIN (NODE)/* Nonzero means that this block is prepared to handle exceptions listed in the BLOCK_VARS slot. */#define BLOCK_HANDLER_BLOCK(NODE) TREE_PROTECTED(NODE)/* 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];};/* 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_ALIGN(NODE) ((NODE)->type.align)#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_PARSE_INFO(NODE) ((NODE)->type.parse_info)#define TYPE_SYMTAB_ADDRESS(NODE) ((NODE)->type.symtab_address)#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)#define TYPE_NONCOPIED_PARTS(NODE) ((NODE)->type.noncopied_parts)#define TYPE_CONTEXT(NODE) ((NODE)->type.context)#define TYPE_LANG_SPECIFIC(NODE) ((NODE)->type.lang_specific)#define TYPE_STUB_DECL(NODE) (TREE_CHAIN (NODE))/* In a RECORD_TYPE or UNION_TYPE, it means the type has BLKmode only because it lacks the alignment requirement for its size. */#define TYPE_NO_FORCE_BLK(NODE) ((NODE)->type.no_force_blk_flag)/* Nonzero in a type considered volatile as a whole. */#define TYPE_VOLATILE(NODE) ((NODE)->common.volatile_flag)/* Means this type is const-qualified. */#define TYPE_READONLY(NODE) ((NODE)->common.readonly_flag)#define TYPE_LANG_FLAG_0(NODE) ((NODE)->type.lang_flag_0)#define TYPE_LANG_FLAG_1(NODE) ((NODE)->type.lang_flag_1)#define TYPE_LANG_FLAG_2(NODE) ((NODE)->type.lang_flag_2)#define TYPE_LANG_FLAG_3(NODE) ((NODE)->type.lang_flag_3)#define TYPE_LANG_FLAG_4(NODE) ((NODE)->type.lang_flag_4)#define TYPE_LANG_FLAG_5(NODE) ((NODE)->type.lang_flag_5)#define TYPE_LANG_FLAG_6(NODE) ((NODE)->type.lang_flag_6)struct tree_type{ char common[sizeof (struct tree_common)]; union tree_node *values; union tree_node *size; unsigned uid;#ifdef ONLY_INT_FIELDS int mode : 8;#else enum machine_mode mode : 8;#endif unsigned char align; unsigned char precision; unsigned no_force_blk_flag : 1; 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; union tree_node *pointer_to; union tree_node *reference_to; int parse_info; int symtab_address; union tree_node *name; union tree_node *minval; union tree_node *maxval; union tree_node *next_variant; union tree_node *main_variant; union tree_node *binfo; union tree_node *noncopied_parts; union tree_node *context; /* Points to a structure whose details depend on the language in use. */ struct lang_type *lang_specific;};/* Define accessor macros for information about type inheritance and basetypes. A "basetype" means a particular usage of a data type for inheritance in another type. Each such basetype usage has its own "binfo" object to describe it. The binfo object is a TREE_VEC node. Inheritance is represented by the binfo nodes allocated for a 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)/* 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 macro is marked for death. */#define DECL_PRINT_NAME(NODE) ((NODE)->decl.print_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)/* The containing binding context; either a BINDING or a RECORD_TYPE or UNION_TYPE. */#define DECL_CONTEXT(NODE) ((NODE)->decl.context)#define DECL_FIELD_CONTEXT(NODE) ((NODE)->decl.context)/* 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, its type. */#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. *//* 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.align)/* Holds the machine mode of a variable or field. */#define DECL_MODE(NODE) ((NODE)->decl.mode)/* Holds the RTL expression for the value of a variable or function. */#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)/* For FUNCTION_DECL, if it is inline, holds the saved insn chain. */#define DECL_SAVED_INSNS(NODE) ((NODE)->decl.saved_insns)/* For FUNCTION_DECL for built-in function. */#define DECL_FUNCTION_CODE(NODE) \ ((enum built_in_function) (NODE)->decl.frame_size)#define DECL_SET_FUNCTION_CODE(NODE,VAL) \ ((NODE)->decl.frame_size = (int) (VAL))/* 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)/* 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)/* Nonzero in a VAR_DECL or PARM_DECL means this decl was made by inlining; suppress any warnings about shadowing some other variable. */#define DECL_FROM_INLINE(NODE) ((NODE)->decl.from_inline_flag)/* 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)#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 TREE_EXTERNAL(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 TREE_REGDECL(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 TREE_NONLOCAL(NODE) ((NODE)->decl.nonlocal_flag)/* Nonzero in a FUNCTION_DECL means this function can be substituted where it is called. */#define TREE_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 METHOD_DECL, indicates a function for which each instance has a pointer. */#define DECL_VIRTUAL_P(NODE) ((NODE)->decl.virtual_flag)/* In a FIELD_DECL, indicates this field should be bit-packed. */#define DECL_PACKED(NODE) ((NODE)->decl.virtual_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;#ifdef ONLY_INT_FIELDS int mode : 8;#else enum machine_mode mode : 8;#endif unsigned char align; 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 from_inline_flag : 1; unsigned ignored_flag : 1; 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; /* The PRINT_NAME field is marked for death. */ char *print_name; union tree_node *assembler_name; struct rtx_def *rtl; /* acts as link to register transfer language (rtl) info */ int frame_size; /* For FUNCTION_DECLs: size of stack frame */ struct rtx_def *saved_insns; /* For FUNCTION_DECLs: points to insn that constitutes its definition on the permanent obstack. */ union tree_node *vindex; /* Points to a structure whose details depend on the language in use. */ struct lang_decl *lang_specific;};/* Define the overall contents of a tree node. It may be any of the structures declared above for various types of node. */union tree_node{ struct tree_common common; struct tree_int_cst int_cst; struct tree_real_cst real_cst; struct tree_string string; struct tree_complex complex; struct tree_identifier identifier; struct tree_decl decl; struct tree_type type; struct tree_list list; struct tree_vec vec; struct tree_exp exp; };/* Format for global names of constructor and destructor functions. */#ifndef NO_DOLLAR_IN_LABEL#define CONSTRUCTOR_NAME_FORMAT "_GLOBAL_$I$%s"#else#define CONSTRUCTOR_NAME_FORMAT "_GLOBAL_.I.%s"#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -