cp-tree.h
来自「GCC编译器源代码」· C头文件 代码 · 共 1,508 行 · 第 1/5 页
H
1,508 行
/* Nonzero for TREE_LIST node means that this list of things is a list of parameters, as opposed to a list of expressions. */#define TREE_PARMLIST(NODE) ((NODE)->common.unsigned_flag) /* overloaded! *//* For FUNCTION_TYPE or METHOD_TYPE, a list of the exceptions that this type can raise. */#define TYPE_RAISES_EXCEPTIONS(NODE) TYPE_NONCOPIED_PARTS (NODE)/* The binding level associated with the namespace. */#define NAMESPACE_LEVEL(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.level)struct lang_decl_flags{#ifdef ONLY_INT_FIELDS int language : 8;#else enum languages language : 8;#endif unsigned operator_attr : 1; unsigned constructor_attr : 1; unsigned returns_first_arg : 1; unsigned preserves_first_arg : 1; unsigned friend_attr : 1; unsigned static_function : 1; unsigned const_memfunc : 1; unsigned volatile_memfunc : 1; unsigned abstract_virtual : 1; unsigned permanent_attr : 1 ; unsigned constructor_for_vbase_attr : 1; unsigned mutable_flag : 1; unsigned is_default_implementation : 1; unsigned saved_inline : 1; unsigned use_template : 2; unsigned nonconverting : 1; unsigned declared_inline : 1; unsigned not_really_extern : 1; unsigned dummy : 5; tree access; tree context; tree memfunc_pointer_to; tree template_info; struct binding_level *level;};struct lang_decl{ struct lang_decl_flags decl_flags; tree main_decl_variant; struct pending_inline *pending_inline_info; tree chain;};/* Non-zero if NODE is a _DECL with TREE_READONLY set. */#define TREE_READONLY_DECL_P(NODE) \ (TREE_READONLY (NODE) && TREE_CODE_CLASS (TREE_CODE (NODE)) == 'd')/* Non-zero iff DECL is memory-based. The DECL_RTL of certain const variables might be a CONST_INT, or a REG in some cases. We cannot use `memory_operand' as a test here because on most RISC machines, a variable's address is not, by itself, a legitimate address. */#define DECL_IN_MEMORY_P(NODE) \ (DECL_RTL (NODE) != NULL_RTX && GET_CODE (DECL_RTL (NODE)) == MEM)/* For FUNCTION_DECLs: return the language in which this decl was declared. */#define DECL_LANGUAGE(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.language)/* For FUNCTION_DECLs: nonzero means that this function is a constructor. */#define DECL_CONSTRUCTOR_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.constructor_attr)/* For FUNCTION_DECLs: nonzero means that this function is a constructor for an object with virtual baseclasses. */#define DECL_CONSTRUCTOR_FOR_VBASE_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.constructor_for_vbase_attr)/* For FUNCTION_DECLs: nonzero means that this function is a default implementation of a signature method. */#define IS_DEFAULT_IMPLEMENTATION(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.is_default_implementation)/* For FUNCTION_DECLs: nonzero means that the constructor is known to return a non-zero `this' unchanged. */#define DECL_RETURNS_FIRST_ARG(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.returns_first_arg)/* Nonzero for FUNCTION_DECL means that this constructor is known to not make any assignment to `this', and therefore can be trusted to return it unchanged. Otherwise, we must re-assign `current_class_ptr' after performing base initializations. */#define DECL_PRESERVES_THIS(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.preserves_first_arg)/* Nonzero for _DECL means that this decl appears in (or will appear in) as a member in a RECORD_TYPE or UNION_TYPE node. It is also for detecting circularity in case members are multiply defined. In the case of a VAR_DECL, it is also used to determine how program storage should be allocated. */#define DECL_IN_AGGR_P(NODE) (DECL_LANG_FLAG_3(NODE))/* Nonzero for FUNCTION_DECL means that this decl is just a friend declaration, and should not be added to the list of member functions for this class. */#define DECL_FRIEND_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.friend_attr)/* Nonzero for FUNCTION_DECL means that this decl is a static member function. */#define DECL_STATIC_FUNCTION_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.static_function)/* Nonzero for a class member means that it is shared between all objects of that class. */#define SHARED_MEMBER_P(NODE) \ (TREE_CODE (NODE) == VAR_DECL || TREE_CODE (NODE) == TYPE_DECL \ || TREE_CODE (NODE) == CONST_DECL) /* Nonzero for FUNCTION_DECL means that this decl is a member function (static or non-static). */#define DECL_FUNCTION_MEMBER_P(NODE) \ (TREE_CODE (TREE_TYPE (NODE)) == METHOD_TYPE || DECL_STATIC_FUNCTION_P (NODE))/* Nonzero for FUNCTION_DECL means that this member function has `this' as const X *const. */#define DECL_CONST_MEMFUNC_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.const_memfunc)/* Nonzero for FUNCTION_DECL means that this member function has `this' as volatile X *const. */#define DECL_VOLATILE_MEMFUNC_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.volatile_memfunc)/* Nonzero for _DECL means that this member object type is mutable. */#define DECL_MUTABLE_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.mutable_flag)/* Nonzero for _DECL means that this constructor is a non-converting constructor. */#define DECL_NONCONVERTING_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.nonconverting)/* Nonzero for FUNCTION_DECL means that this member function exists as part of an abstract class's interface. */#define DECL_ABSTRACT_VIRTUAL_P(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.abstract_virtual)/* Nonzero if allocated on permanent_obstack. */#define LANG_DECL_PERMANENT(LANGDECL) ((LANGDECL)->decl_flags.permanent_attr)/* The _TYPE context in which this _DECL appears. This field holds the class where a virtual function instance is actually defined, and the lexical scope of a friend function defined in a class body. */#define DECL_CLASS_CONTEXT(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.context)#define DECL_REAL_CONTEXT(NODE) \ ((TREE_CODE (NODE) == FUNCTION_DECL && DECL_FUNCTION_MEMBER_P (NODE)) \ ? DECL_CLASS_CONTEXT (NODE) : DECL_CONTEXT (NODE))/* For a FUNCTION_DECL: the chain through which the next method with the same name is found. We now use TREE_CHAIN to walk through the methods in order of declaration. */#if 1#define DECL_CHAIN(NODE) (DECL_LANG_SPECIFIC(NODE)->chain)#else#define DECL_CHAIN(NODE) (TREE_CHAIN (NODE))#endif/* In a VAR_DECL for a variable declared in a for statement, this is the shadowed (local) variable. */#define DECL_SHADOWED_FOR_VAR(NODE) DECL_RESULT(NODE)/* Points back to the decl which caused this lang_decl to be allocated. */#define DECL_MAIN_VARIANT(NODE) (DECL_LANG_SPECIFIC(NODE)->main_decl_variant)/* For a FUNCTION_DECL: if this function was declared inline inside of a class declaration, this is where the text for the function is squirreled away. */#define DECL_PENDING_INLINE_INFO(NODE) (DECL_LANG_SPECIFIC(NODE)->pending_inline_info)/* True if on the saved_inlines (see decl2.c) list. */#define DECL_SAVED_INLINE(DECL) \ (DECL_LANG_SPECIFIC(DECL)->decl_flags.saved_inline)/* For a FUNCTION_DECL: if this function was declared inside a signature declaration, this is the corresponding member function pointer that was created for it. */#define DECL_MEMFUNC_POINTER_TO(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.memfunc_pointer_to)/* For a FIELD_DECL: this points to the signature member function from which this signature member function pointer was created. */#define DECL_MEMFUNC_POINTING_TO(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.memfunc_pointer_to)/* For a VAR_DECL or FUNCTION_DECL: template-specific information. */#define DECL_TEMPLATE_INFO(NODE) (DECL_LANG_SPECIFIC(NODE)->decl_flags.template_info)#define CLASSTYPE_TEMPLATE_INFO(NODE) (TYPE_LANG_SPECIFIC(NODE)->template_info)#define TI_TEMPLATE(NODE) (TREE_PURPOSE (NODE))#define TI_ARGS(NODE) (TREE_VALUE (NODE))#define TI_SPEC_INFO(NODE) (TREE_CHAIN (NODE))#define TI_USES_TEMPLATE_PARMS(NODE) TREE_LANG_FLAG_0 (NODE)#define TI_PENDING_TEMPLATE_FLAG(NODE) TREE_LANG_FLAG_1 (NODE)#define DECL_TI_TEMPLATE(NODE) TI_TEMPLATE (DECL_TEMPLATE_INFO (NODE))#define DECL_TI_ARGS(NODE) TI_ARGS (DECL_TEMPLATE_INFO (NODE))#define CLASSTYPE_TI_TEMPLATE(NODE) TI_TEMPLATE (CLASSTYPE_TEMPLATE_INFO (NODE))#define CLASSTYPE_TI_ARGS(NODE) TI_ARGS (CLASSTYPE_TEMPLATE_INFO (NODE))#define CLASSTYPE_TI_SPEC_INFO(NODE) TI_SPEC_INFO (CLASSTYPE_TEMPLATE_INFO (NODE))#define INNERMOST_TEMPLATE_PARMS(NODE) TREE_VALUE(NODE)#define DECL_SAVED_TREE(NODE) DECL_MEMFUNC_POINTER_TO (NODE)#define COMPOUND_STMT_NO_SCOPE(NODE) TREE_LANG_FLAG_0 (NODE)#define NEW_EXPR_USE_GLOBAL(NODE) TREE_LANG_FLAG_0 (NODE)#define DELETE_EXPR_USE_GLOBAL(NODE) TREE_LANG_FLAG_0 (NODE)#define DELETE_EXPR_USE_VEC(NODE) TREE_LANG_FLAG_1 (NODE)#define LOOKUP_EXPR_GLOBAL(NODE) TREE_LANG_FLAG_0 (NODE)/* Nonzero in INT_CST means that this int is negative by dint of using a twos-complement negated operand. */#define TREE_NEGATED_INT(NODE) (TREE_LANG_FLAG_0 (NODE))/* Nonzero in any kind of _EXPR or _REF node means that it is a call to a storage allocation routine. If, later, alternate storage is found to hold the object, this call can be ignored. */#define TREE_CALLS_NEW(NODE) (TREE_LANG_FLAG_1 (NODE))/* Nonzero in any kind of _TYPE that uses multiple inheritance or virtual baseclasses. */#define TYPE_USES_COMPLEX_INHERITANCE(NODE) (TREE_LANG_FLAG_1 (NODE))#if 0 /* UNUSED *//* Nonzero in IDENTIFIER_NODE means that this name is not the name the user gave; it's a DECL_NESTED_TYPENAME. Someone may want to set this on mangled function names, too, but it isn't currently. */#define TREE_MANGLED(NODE) (TREE_LANG_FLAG_0 (NODE))#endif#if 0 /* UNUSED *//* Nonzero in IDENTIFIER_NODE means that this name is overloaded, and should be looked up in a non-standard way. */#define DECL_OVERLOADED(NODE) (FOO)#endif/* Nonzero if this (non-TYPE)_DECL has its virtual attribute set. For a FUNCTION_DECL, this is when the function is a virtual function. For a VAR_DECL, this is when the variable is a virtual function table. For a FIELD_DECL, when the field is the field for the virtual function table. For an IDENTIFIER_NODE, nonzero if any function with this name has been declared virtual. For a _TYPE if it uses virtual functions (or is derived from one that does). */#define TYPE_VIRTUAL_P(NODE) (TREE_LANG_FLAG_2 (NODE))#if 0/* Same, but tells if this field is private in current context. */#define DECL_PRIVATE(NODE) (FOO)/* Same, but tells if this field is private in current context. */#define DECL_PROTECTED(NODE) (DECL_LANG_FLAG_6 (NODE))#define DECL_PUBLIC(NODE) (DECL_LANG_FLAG_7 (NODE))#endifextern int flag_new_for_scope;/* This flag is true of a local VAR_DECL if it was declared in a for statement, but we are no longer in the scope of the for. */#define DECL_DEAD_FOR_LOCAL(NODE) DECL_LANG_FLAG_7 (NODE)/* This flag is set on a VAR_DECL that is a DECL_DEAD_FOR_LOCAL if we already emitted a warning about using it. */#define DECL_ERROR_REPORTED(NODE) DECL_LANG_FLAG_0 (NODE)/* This _DECL represents a compiler-generated entity. */#define SET_DECL_ARTIFICIAL(NODE) (DECL_ARTIFICIAL (NODE) = 1)/* Record whether a typedef for type `int' was actually `signed int'. */#define C_TYPEDEF_EXPLICITLY_SIGNED(exp) DECL_LANG_FLAG_1 ((exp))/* Nonzero if the type T promotes to itself. ANSI C states explicitly the list of types that promote; in particular, short promotes to int even if they have the same width. */#define C_PROMOTING_INTEGER_TYPE_P(t) \ (TREE_CODE ((t)) == INTEGER_TYPE \ && (TYPE_MAIN_VARIANT (t) == char_type_node \ || TYPE_MAIN_VARIANT (t) == signed_char_type_node \ || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node \ || TYPE_MAIN_VARIANT (t) == short_integer_type_node \ || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node))#define INTEGRAL_CODE_P(CODE) \ (CODE == INTEGER_TYPE || CODE == ENUMERAL_TYPE || CODE == BOOLEAN_TYPE)#define ARITHMETIC_TYPE_P(TYPE) (INTEGRAL_TYPE_P (TYPE) || FLOAT_TYPE_P (TYPE))/* Mark which labels are explicitly declared. These may be shadowed, and may be referenced from nested functions. */#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)/* Record whether a type or decl was written with nonconstant size. Note that TYPE_SIZE may have simplified to a constant. */#define C_TYPE_VARIABLE_SIZE(type) TREE_LANG_FLAG_4 (type)#define C_DECL_VARIABLE_SIZE(type) DECL_LANG_FLAG_8 (type)/* Nonzero for _TYPE means that the _TYPE defines at least one constructor. */#define TYPE_HAS_CONSTRUCTOR(NODE) (TYPE_LANG_FLAG_1(NODE))/* When appearing in an INDIRECT_REF, it means that the tree structure underneath is actually a call to a constructor. This is needed when the constructor must initialize local storage (which can be automatically destroyed), rather than allowing it to allocate
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?