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

📄 cp-tree.h

📁 gcc库的原代码,对编程有很大帮助.
💻 H
📖 第 1 页 / 共 5 页
字号:
extern int flag_cadillac;/* C++ language-specific tree codes.  */#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,enum cplus_tree_code {  __DUMMY = LAST_AND_UNUSED_TREE_CODE,#include "tree.def"  LAST_CPLUS_TREE_CODE};#undef DEFTREECODE/* Override OFFSET_REFs from the back-end, as we want our very own. *//* Allow complex pointer to members to work correctly. */#define OFFSET_REF CP_OFFSET_REFenum languages { lang_c, lang_cplusplus };/* Macros to make error reporting functions' lives easier.  */#define TYPE_IDENTIFIER(NODE) (DECL_NAME (TYPE_NAME (NODE)))#define TYPE_NAME_STRING(NODE) (IDENTIFIER_POINTER (TYPE_IDENTIFIER (NODE)))#define TYPE_NAME_LENGTH(NODE) (IDENTIFIER_LENGTH (TYPE_IDENTIFIER (NODE)))#define TYPE_ASSEMBLER_NAME_STRING(NODE) (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (TYPE_NAME  (NODE))))#define TYPE_ASSEMBLER_NAME_LENGTH(NODE) (IDENTIFIER_LENGTH (DECL_ASSEMBLER_NAME (TYPE_NAME (NODE))))/* The _DECL for this _TYPE.  */#define TYPE_MAIN_DECL(NODE) (TYPE_NAME (NODE))#define IS_AGGR_TYPE(t)		(TYPE_LANG_FLAG_5 (t))#define IS_AGGR_TYPE_CODE(t)	(t == RECORD_TYPE || t == UNION_TYPE || t == UNINSTANTIATED_P_TYPE)#define IS_AGGR_TYPE_2(TYPE1,TYPE2) \  (TREE_CODE (TYPE1) == TREE_CODE (TYPE2)	\   && IS_AGGR_TYPE (TYPE1)&IS_AGGR_TYPE (TYPE2))#define IS_OVERLOAD_TYPE_CODE(t) (IS_AGGR_TYPE_CODE (t) || t == ENUMERAL_TYPE)#define IS_OVERLOAD_TYPE(t) (IS_OVERLOAD_TYPE_CODE (TREE_CODE (t)))/* In a *_TYPE, nonzero means a built-in type.  */#define TYPE_BUILT_IN(NODE) TYPE_LANG_FLAG_6(NODE)/* Macros which might want to be replaced by function calls.  */#define DELTA_FROM_VTABLE_ENTRY(ENTRY) \  (!flag_vtable_thunks ? \     TREE_VALUE (CONSTRUCTOR_ELTS (ENTRY)) \   : TREE_CODE (TREE_OPERAND ((ENTRY), 0)) != THUNK_DECL ? integer_zero_node \   : build_int_2 (THUNK_DELTA (TREE_OPERAND ((ENTRY), 0)), 0))#if 1/* Virtual function addresses can be gotten from a virtual function   table entry using this macro.  */#define FNADDR_FROM_VTABLE_ENTRY(ENTRY) \  (!flag_vtable_thunks ? \     TREE_VALUE (TREE_CHAIN (TREE_CHAIN (CONSTRUCTOR_ELTS (ENTRY)))) \   : TREE_CODE (TREE_OPERAND ((ENTRY), 0)) != THUNK_DECL ? (ENTRY) \   : DECL_INITIAL (TREE_OPERAND ((ENTRY), 0)))#define SET_FNADDR_FROM_VTABLE_ENTRY(ENTRY,VALUE) \  (TREE_VALUE (TREE_CHAIN (TREE_CHAIN (CONSTRUCTOR_ELTS (ENTRY)))) = (VALUE))#define FUNCTION_ARG_CHAIN(NODE) (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (NODE))))#define PROMOTES_TO_AGGR_TYPE(NODE,CODE)	\  (((CODE) == TREE_CODE (NODE)			\       && IS_AGGR_TYPE (TREE_TYPE (NODE)))	\   || IS_AGGR_TYPE (NODE))#else#define FNADDR_FROM_VTABLE_ENTRY(ENTRY) (fnaddr_from_vtable_entry (ENTRY))#define SET_FNADDR_FROM_VTABLE_ENTRY(ENTRY,VALUE) \  (set_fnaddr_from_vtable_entry (ENTRY, VALUE))/* #define TYPE_NAME_STRING(NODE) (type_name_string (NODE)) */#define FUNCTION_ARG_CHAIN(NODE) (function_arg_chain (NODE))#define PROMOTES_TO_AGGR_TYPE(NODE,CODE) (promotes_to_aggr_type (NODE, CODE))/* #define IS_AGGR_TYPE_2(TYPE1, TYPE2) (is_aggr_type_2 (TYPE1, TYPE2)) */#endif/* Nonzero iff TYPE is uniquely derived from PARENT.  Under MI, PARENT can   be an ambiguous base class of TYPE, and this macro will be false.  */#define UNIQUELY_DERIVED_FROM_P(PARENT, TYPE) (get_base_distance (PARENT, TYPE, 0, (tree *)0) >= 0)#define ACCESSIBLY_DERIVED_FROM_P(PARENT, TYPE) (get_base_distance (PARENT, TYPE, -1, (tree *)0) >= 0)#define ACCESSIBLY_UNIQUELY_DERIVED_P(PARENT, TYPE) (get_base_distance (PARENT, TYPE, 1, (tree *)0) >= 0)#define DERIVED_FROM_P(PARENT, TYPE) (get_base_distance (PARENT, TYPE, 0, (tree *)0) != -1)/* Statistics show that while the GNU C++ compiler may generate   thousands of different types during a compilation run, it   generates relatively few (tens) of classtypes.  Because of this,   it is not costly to store a generous amount of information   in classtype nodes.  This struct must fill out to a multiple of 4 bytes.  */struct lang_type{  struct    {      unsigned has_type_conversion : 1;      unsigned has_int_conversion : 1;      unsigned has_float_conversion : 1;      unsigned has_init_ref : 1;      unsigned gets_init_aggr : 1;      unsigned has_assignment : 1;      unsigned has_default_ctor : 1;      unsigned uses_multiple_inheritance : 1;      unsigned has_nonpublic_ctor : 2;      unsigned has_nonpublic_assign_ref : 2;      unsigned const_needs_init : 1;      unsigned ref_needs_init : 1;      unsigned has_const_assign_ref : 1;      unsigned vtable_needs_writing : 1;      unsigned has_assign_ref : 1;      unsigned gets_new : 2;      unsigned gets_delete : 2;      unsigned has_call_overloaded : 1;      unsigned has_array_ref_overloaded : 1;      unsigned has_arrow_overloaded : 1;      unsigned local_typedecls : 1;      unsigned interface_only : 1;      unsigned interface_unknown : 1;      unsigned needs_virtual_reinit : 1;      unsigned vec_delete_takes_size : 1;      unsigned declared_class : 1;      unsigned being_defined : 1;      unsigned redefined : 1;      unsigned no_globalize : 1;      unsigned marked : 1;      unsigned marked2 : 1;      unsigned marked3 : 1;      unsigned marked4 : 1;      unsigned marked5 : 1;      unsigned marked6 : 1;      unsigned use_template : 2;      unsigned debug_requested : 1;      unsigned has_method_call_overloaded : 1;      unsigned private_attr : 1;      unsigned got_semicolon : 1;      unsigned ptrmemfunc_flag : 1;      unsigned is_signature : 1;      unsigned is_signature_pointer : 1;      unsigned is_signature_reference : 1;      unsigned has_default_implementation : 1;      unsigned grokking_typedef : 1;      unsigned has_opaque_typedecls : 1;      unsigned sigtable_has_been_generated : 1;      unsigned was_anonymous : 1;      unsigned has_real_assignment : 1;      unsigned has_real_assign_ref : 1;      unsigned has_const_init_ref : 1;      unsigned has_complex_init_ref : 1;      unsigned has_complex_assign_ref : 1;      unsigned has_abstract_assign_ref : 1;      unsigned non_aggregate : 1;      /* The MIPS compiler gets it wrong if this struct also	 does not fill out to a multiple of 4 bytes.  Add a	 member `dummy' with new bits if you go over the edge.  */      unsigned dummy : 19;      unsigned n_vancestors : 16;    } type_flags;  int cid;  int n_ancestors;  int vsize;  int max_depth;  int vfield_parent;  union tree_node *vbinfo[2];  union tree_node *baselink_vec;  union tree_node *vfields;  union tree_node *vbases;  union tree_node *vbase_size;  union tree_node *tags;  char *memoized_table_entry;  char *search_slot;#ifdef ONLY_INT_FIELDS  unsigned int mode : 8;#else  enum machine_mode mode : 8;#endif  unsigned char size_unit;  unsigned char align;  unsigned char sep_unit;  union tree_node *sep;  union tree_node *size;  union tree_node *base_init_list;  union tree_node *abstract_virtuals;  union tree_node *as_list;  union tree_node *id_as_list;  union tree_node *binfo_as_list;  union tree_node *friend_classes;  char *mi_matrix;  union tree_node *rtti;  union tree_node *methods;  union tree_node *signature;  union tree_node *signature_pointer_to;  union tree_node *signature_reference_to;  int linenum;};#define CLASSTYPE_SOURCE_LINE(NODE) (TYPE_LANG_SPECIFIC(NODE)->linenum)/* Indicates whether or not (and how) a template was expanded for this class.     0=no information yet/non-template class     1=implicit template instantiation     2=explicit template specialization     3=explicit template instantiation  */#define CLASSTYPE_USE_TEMPLATE(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.use_template)/* Fields used for storing information before the class is defined.   After the class is defined, these fields hold other information.  *//* List of friends which were defined inline in this class definition.  */#define CLASSTYPE_INLINE_FRIENDS(NODE) (TYPE_NONCOPIED_PARTS (NODE))/* Nonzero for _CLASSTYPE means that the _CLASSTYPE either has   a special meaning for the assignment operator ("operator="),   or one of its fields (or base members) has a special meaning   defined.  */#define TYPE_HAS_ASSIGNMENT(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_assignment)#define TYPE_HAS_REAL_ASSIGNMENT(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_real_assignment)/* Nonzero for _CLASSTYPE means that operator new and delete are defined,   respectively.  */#define TYPE_GETS_NEW(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.gets_new)#define TYPE_GETS_DELETE(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.gets_delete)#define TYPE_GETS_REG_DELETE(NODE) (TYPE_GETS_DELETE (NODE) & 1)/* Nonzero for _CLASSTYPE means that operator vec delete is defined and   takes the optional size_t argument.  */#define TYPE_VEC_DELETE_TAKES_SIZE(NODE) \  (TYPE_LANG_SPECIFIC(NODE)->type_flags.vec_delete_takes_size)#define TYPE_VEC_NEW_USES_COOKIE(NODE) \  (TYPE_NEEDS_DESTRUCTOR (NODE) \   || (TYPE_LANG_SPECIFIC (NODE) && TYPE_VEC_DELETE_TAKES_SIZE (NODE)))/* Nonzero for TREE_LIST or _TYPE node means that this node is class-local.  */#define TREE_NONLOCAL_FLAG(NODE) (TREE_LANG_FLAG_0 (NODE))/* Nonzero for a _CLASSTYPE node which we know to be private.  */#define TYPE_PRIVATE_P(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.private_attr)/* Nonzero means that this _CLASSTYPE node defines ways of converting   itself to other types.  */#define TYPE_HAS_CONVERSION(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_type_conversion)/* Nonzero means that this _CLASSTYPE node can convert itself to an   INTEGER_TYPE.  */#define TYPE_HAS_INT_CONVERSION(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_int_conversion)/* Nonzero means that this _CLASSTYPE node can convert itself to an   REAL_TYPE.  */#define TYPE_HAS_REAL_CONVERSION(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_float_conversion)/* Nonzero means that this _CLASSTYPE node overloads operator=(X&).  */#define TYPE_HAS_ASSIGN_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_assign_ref)#define TYPE_HAS_CONST_ASSIGN_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_const_assign_ref)/* Nonzero means that this _CLASSTYPE node has an X(X&) constructor.  */#define TYPE_HAS_INIT_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_init_ref)#define TYPE_HAS_CONST_INIT_REF(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_const_init_ref)/* Nonzero means that this _CLASSTYPE node has an X(X ...) constructor.   Note that there must be other arguments, or this constructor is flagged   as being erroneous.  */#define TYPE_GETS_INIT_AGGR(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.gets_init_aggr)/* Nonzero means that this type is being defined.  I.e., the left brace   starting the definition of this type has been seen.  */#define TYPE_BEING_DEFINED(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.being_defined)/* Nonzero means that this type has been redefined.  In this case, if   convenient, don't reprocess any methods that appear in its redefinition.  */#define TYPE_REDEFINED(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.redefined)/* Nonzero means that this _CLASSTYPE node overloads the method call   operator.  In this case, all method calls go through `operator->()(...).  */#define TYPE_OVERLOADS_METHOD_CALL_EXPR(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_method_call_overloaded)/* Nonzero means that this type is a signature.  */# define IS_SIGNATURE(NODE) (TYPE_LANG_SPECIFIC(NODE)?TYPE_LANG_SPECIFIC(NODE)->type_flags.is_signature:0)# define SET_SIGNATURE(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.is_signature=1)# define CLEAR_SIGNATURE(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.is_signature=0)/* Nonzero means that this type is a signature pointer type.  */# define IS_SIGNATURE_POINTER(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.is_signature_pointer)/* Nonzero means that this type is a signature reference type.  */# define IS_SIGNATURE_REFERENCE(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.is_signature_reference)/* Nonzero means that this signature type has a default implementation.  */# define HAS_DEFAULT_IMPLEMENTATION(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_default_implementation)

⌨️ 快捷键说明

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