id insert_late_enum_def_bindings (tree, tree);
extern tree innermost_non_namespace_value (tree);
extern cxx_binding *outer_binding (tree, cxx_binding *, bool);
extern void cp_emit_debug_info_for_using (tree, tree);

extern void finish_nonmember_using_decl (tree scope, tree name);
extern void finish_using_directive (tree target, tree attribs);
void push_local_extern_decl_alias (tree decl);
extern tree pushdecl (tree, bool hiding = false);
extern tree pushdecl_outermost_localscope (tree);
extern tree pushdecl_top_level (tree);
extern tree pushdecl_top_level_and_finish (tree, tree);
extern tree pushtag (tree, tree, TAG_how = TAG_how::CURRENT_ONLY);
extern int push_namespace (tree, bool make_inline = false);
extern void pop_namespace (void);
extern void push_nested_namespace (tree);
extern void pop_nested_namespace (tree);
extern void push_to_top_level (void);
extern void pop_from_top_level (void);
extern bool maybe_push_to_top_level (tree);
extern void maybe_pop_from_top_level (bool);
extern void push_using_decl_bindings (tree, tree);

/* Lower level interface for modules. */
extern tree *mergeable_namespace_slots (tree ns, tree name, bool is_attached,
					tree *mvec);
extern void add_mergeable_namespace_entity (tree *slot, tree decl);
extern tree lookup_class_binding (tree ctx, tree name);
extern bool import_module_binding (tree ctx, tree name, unsigned mod,
				   unsigned snum);
extern bool set_module_binding (tree ctx, tree name, unsigned mod,
				int mod_glob_flag,
				tree value, tree type, tree visible);
extern void add_module_namespace_decl (tree ns, tree decl);

enum WMB_Flags
{
  WMB_None = 0,
  WMB_Dups = 1 << 0,
  WMB_Export = 1 << 1,
  WMB_Using = 1 << 2,
  WMB_Hidden = 1 << 3,
};

extern unsigned walk_module_binding (tree binding, bitmap partitions,
				     bool (*)(tree decl, WMB_Flags, void *data),
				     void *data);
extern tree add_imported_namespace (tree ctx, tree name, location_t,
				    unsigned module,
				    bool inline_p, bool visible_p);
extern const char *get_cxx_dialect_name (enum cxx_dialect dialect);

#endif /* GCC_CP_NAME_LOOKUP_H */
