S_PER_CLUSTER]; binding_slot slots[BINDING_VECTOR_SLOTS_PER_CLUSTER]; }; /* These two fields overlay lang flags. So don't use those. */ #define BINDING_VECTOR_ALLOC_CLUSTERS(NODE) \ (BINDING_VECTOR_CHECK (NODE)->base.u.dependence_info.clique) #define BINDING_VECTOR_NUM_CLUSTERS(NODE) \ (BINDING_VECTOR_CHECK (NODE)->base.u.dependence_info.base) #define BINDING_VECTOR_CLUSTER_BASE(NODE) \ (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->vec) #define BINDING_VECTOR_CLUSTER_LAST(NODE) \ (&BINDING_VECTOR_CLUSTER (NODE, BINDING_VECTOR_NUM_CLUSTERS (NODE) - 1)) #define BINDING_VECTOR_CLUSTER(NODE,IX) \ (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->vec[IX]) struct GTY(()) tree_binding_vec { struct tree_base base; tree name; binding_cluster GTY((length ("%h.base.u.dependence_info.base"))) vec[1]; }; /* The name of a module vector. */ #define BINDING_VECTOR_NAME(NODE) \ (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->name) /* tree_binding_vec does uses base.u.dependence_info.base field for length. It does not have lang_flag etc available! */ /* These two flags note if a module-vector contains deduplicated bindings (i.e. multiple declarations in different imports). */ /* This binding contains duplicate references to a global module entity. */ #define BINDING_VECTOR_GLOBAL_DUPS_P(NODE) \ (BINDING_VECTOR_CHECK (NODE)->base.static_flag) /* This binding contains duplicate references to a partioned module entity. */ #define BINDING_VECTOR_PARTITION_DUPS_P(NODE) \ (BINDING_VECTOR_CHECK (NODE)->base.volatile_flag) /* These two flags indicate the provenence of the bindings on this particular vector slot. We can of course determine this from slot number, but that's a relatively expensive lookup. This avoids that when iterating. */ /* This slot is part of the global module (a header unit). */ #define MODULE_BINDING_GLOBAL_P(NODE) \ (OVERLOAD_CHECK (NODE)->base.static_flag) /* This slot is part of the current module (a partition or primary). */ #define MODULE_BINDING_PARTITION_P(NODE) \ (OVERLOAD_CHECK (NODE)->base.volatile_flag) extern void set_identifier_type_value (tree, tree); extern void push_binding (tree, tree, cp_binding_level*); extern void pop_local_binding (tree, tree); extern void pop_bindings_and_leave_scope (void); extern tree constructor_name (tree); extern bool constructor_name_p (tree, tree);