📄 tree.h
字号:
enum built_in_function f; } frame_size; /* For FUNCTION_DECLs: points to insn that constitutes its definition on the permanent obstack. For any other kind of decl, this is the alignment. */ union { struct rtx_def *r; int i; } saved_insns; 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; struct tree_block block; };/* Add prototype support. */#ifndef PROTO#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)#define PROTO(ARGS) ARGS#else#define PROTO(ARGS) ()#endif#endif#ifndef VPROTO#ifdef __STDC__#define PVPROTO(ARGS) ARGS#define VPROTO(ARGS) ARGS#define VA_START(va_list,var) va_start(va_list,var)#else#define PVPROTO(ARGS) ()#define VPROTO(ARGS) (va_alist) va_dcl#define VA_START(va_list,var) va_start(va_list)#endif#endif#ifndef STDIO_PROTO#ifdef BUFSIZ#define STDIO_PROTO(ARGS) PROTO(ARGS)#else#define STDIO_PROTO(ARGS) ()#endif#endif#define NULL_TREE (tree) NULL/* Define a generic NULL if one hasn't already been defined. */#ifndef NULL#define NULL 0#endif#ifndef GENERIC_PTR#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)#define GENERIC_PTR void *#else#define GENERIC_PTR char *#endif#endif#ifndef NULL_PTR#define NULL_PTR ((GENERIC_PTR)0)#endif/* The following functions accept a wide integer argument. Rather than having to cast on every function call, we use a macro instead, that is defined here and in rtl.h. */#ifndef exact_log2#define exact_log2(N) exact_log2_wide ((HOST_WIDE_INT) (N))#define floor_log2(N) floor_log2_wide ((HOST_WIDE_INT) (N))#endif#if 0/* At present, don't prototype xrealloc, since all of the callers don't cast their pointers to char *, and all of the xrealloc's don't use void * yet. */extern char *xmalloc PROTO((size_t));extern char *xrealloc PROTO((void *, size_t));#elseextern char *xmalloc ();extern char *xrealloc ();#endifextern char *oballoc PROTO((int));extern char *permalloc PROTO((int));extern char *savealloc PROTO((int));extern void free PROTO((void *));/* Lowest level primitive for allocating a node. The TREE_CODE is the only argument. Contents are initialized to zero except for a few of the common fields. */extern tree make_node PROTO((enum tree_code));/* Make a copy of a node, with all the same contents except for TREE_PERMANENT. (The copy is permanent iff nodes being made now are permanent.) */extern tree copy_node PROTO((tree));/* Make a copy of a chain of TREE_LIST nodes. */extern tree copy_list PROTO((tree));/* Make a TREE_VEC. */extern tree make_tree_vec PROTO((int));/* Return the (unique) IDENTIFIER_NODE node for a given name. The name is supplied as a char *. */extern tree get_identifier PROTO((char *));/* Construct various types of nodes. */#define build_int_2(LO,HI) \ build_int_2_wide ((HOST_WIDE_INT) (LO), (HOST_WIDE_INT) (HI))extern tree build PVPROTO((enum tree_code, tree, ...));extern tree build_nt PVPROTO((enum tree_code, ...));extern tree build_parse_node PVPROTO((enum tree_code, ...));extern tree build_int_2_wide PROTO((HOST_WIDE_INT, HOST_WIDE_INT));extern tree build_real PROTO((tree, REAL_VALUE_TYPE));extern tree build_real_from_int_cst PROTO((tree, tree));extern tree build_complex PROTO((tree, tree));extern tree build_string PROTO((int, char *));extern tree build1 PROTO((enum tree_code, tree, tree));extern tree build_tree_list PROTO((tree, tree));extern tree build_decl_list PROTO((tree, tree));extern tree build_decl PROTO((enum tree_code, tree, tree));extern tree build_block PROTO((tree, tree, tree, tree, tree));/* Construct various nodes representing data types. */extern tree make_signed_type PROTO((int));extern tree make_unsigned_type PROTO((int));extern tree signed_or_unsigned_type PROTO((int, tree));extern void fixup_unsigned_type PROTO((tree));extern tree build_pointer_type PROTO((tree));extern tree build_reference_type PROTO((tree));extern tree build_index_type PROTO((tree));extern tree build_index_2_type PROTO((tree, tree));extern tree build_array_type PROTO((tree, tree));extern tree build_function_type PROTO((tree, tree));extern tree build_method_type PROTO((tree, tree));extern tree build_offset_type PROTO((tree, tree));extern tree build_complex_type PROTO((tree));extern tree array_type_nelts PROTO((tree));extern tree value_member PROTO((tree, tree));extern tree purpose_member PROTO((tree, tree));extern tree binfo_member PROTO((tree, tree));extern int attribute_hash_list PROTO((tree));extern int attribute_list_equal PROTO((tree, tree));extern int attribute_list_contained PROTO((tree, tree));extern int tree_int_cst_equal PROTO((tree, tree));extern int tree_int_cst_lt PROTO((tree, tree));extern int tree_int_cst_sgn PROTO((tree));extern int index_type_equal PROTO((tree, tree));/* From expmed.c. Since rtl.h is included after tree.h, we can't put the prototype here. Rtl.h does declare the prototype if tree.h had been included. */extern tree make_tree ();/* Return a type like TTYPE except that its TYPE_ATTRIBUTES is ATTRIBUTE. Such modified types already made are recorded so that duplicates are not made. */extern tree build_type_attribute_variant PROTO((tree, tree));extern tree build_decl_attribute_variant PROTO((tree, tree));/* Return 1 if an attribute and its arguments are valid for a decl or type. */int valid_machine_attribute PROTO((tree, tree, tree, tree));/* Given a tree node and a string, return non-zero if the tree node is a valid attribute name for the string. */int is_attribute_p PROTO((char *, tree));/* Given an attribute name and a list of attributes, return the list element of the attribute or NULL_TREE if not found. */tree lookup_attribute PROTO((char *, tree));/* Given a type node TYPE, and CONSTP and VOLATILEP, return a type for the same kind of data as TYPE describes. Variants point to the "main variant" (which has neither CONST nor VOLATILE) via TYPE_MAIN_VARIANT, and it points to a chain of other variants so that duplicate variants are never made. Only main variants should ever appear as types of expressions. */extern tree build_type_variant PROTO((tree, int, int));/* Make a copy of a type node. */extern tree build_type_copy PROTO((tree));/* Given a ..._TYPE node, calculate the TYPE_SIZE, TYPE_SIZE_UNIT, TYPE_ALIGN and TYPE_MODE fields. If called more than once on one node, does nothing except for the first time. */extern void layout_type PROTO((tree));/* Given a hashcode and a ..._TYPE node (for which the hashcode was made), return a canonicalized ..._TYPE node, so that duplicates are not made. How the hash code is computed is up to the caller, as long as any two callers that could hash identical-looking type nodes agree. */extern tree type_hash_canon PROTO((int, tree));/* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node, calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE fields. Call this only once for any given decl node. Second argument is the boundary that this field can be assumed to be starting at (in bits). Zero means it can be assumed aligned on any boundary that may be needed. */extern void layout_decl PROTO((tree, unsigned));/* Return an expr equal to X but certainly not valid as an lvalue. */extern tree non_lvalue PROTO((tree));extern tree pedantic_non_lvalue PROTO((tree));extern tree convert PROTO((tree, tree));extern tree size_in_bytes PROTO((tree));extern int int_size_in_bytes PROTO((tree));extern tree size_binop PROTO((enum tree_code, tree, tree));extern tree size_int PROTO((unsigned HOST_WIDE_INT));extern tree round_up PROTO((tree, int));extern tree get_pending_sizes PROTO((void));extern void put_pending_sizes PROTO((tree));/* Type for sizes of data-type. */extern tree sizetype;/* If nonzero, an upper limit on alignment of structure fields, in bits. */extern int maximum_field_alignment;/* If non-zero, the alignment of a bitstring or (power-)set value, in bits. */extern int set_alignment;/* Concatenate two lists (chains of TREE_LIST nodes) X and Y by making the last node in X point to Y. Returns X, except if X is 0 returns Y. */extern tree chainon PROTO((tree, tree));/* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN. */extern tree tree_cons PROTO((tree, tree, tree));extern tree perm_tree_cons PROTO((tree, tree, tree));extern tree temp_tree_cons PROTO((tree, tree, tree));extern tree saveable_tree_cons PROTO((tree, tree, tree));extern tree decl_tree_cons PROTO((tree, tree, tree));/* Return the last tree node in a chain. */extern tree tree_last PROTO((tree));/* Reverse the order of elements in a chain, and return the new head. */extern tree nreverse PROTO((tree));/* Returns the length of a chain of nodes (number of chain pointers to follow before reaching a null pointer). */extern int list_length PROTO((tree));/* integer_zerop (tree x) is nonzero if X is an integer constant of value 0 */extern int integer_zerop PROTO((tree));/* integer_onep (tree x) is nonzero if X is an integer constant of value 1 */extern int integer_onep PROTO((tree));/* integer_all_onesp (tree x) is nonzero if X is an integer constant all of whose significant bits are 1. */extern int integer_all_onesp PROTO((tree));/* integer_pow2p (tree x) is nonzero is X is an integer constant with exactly one bit 1. */extern int integer_pow2p PROTO((tree));/* staticp (tree x) is nonzero if X is a reference to data allocated at a fixed address in memory. */extern int staticp PROTO((tree));/* Gets an error if argument X is not an lvalue. Also returns 1 if X is an lvalue, 0 if not. */extern int lvalue_or_else PROTO((tree, char *));/* save_expr (EXP) returns an expression equivalent to EXP but it can be used multiple times within context CTX and only evaluate EXP once. */extern tree save_expr PROTO((tree));/* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size or offset that depends on a field within a record. Note that we only allow such expressions within simple arithmetic or a COND_EXPR. */extern int contains_placeholder_p PROTO((tree));/* Given a tree EXP, a FIELD_DECL F, and a replacement value R, return a tree with all occurrences of references to F in a PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP contains only arithmetic expressions. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -