+int
+(is_entity)(const void *thing) {
+ return _is_entity(thing);
+} /* is_entity */
+
+int is_atomic_entity(ir_entity *ent) {
+ ir_type *t = get_entity_type(ent);
+ const tp_op *op = get_type_tpop(t);
+ return (op == type_primitive || op == type_pointer ||
+ op == type_enumeration || op == type_method);
+} /* is_atomic_entity */
+
+int is_compound_entity(ir_entity *ent) {
+ ir_type *t = get_entity_type(ent);
+ const tp_op *op = get_type_tpop(t);
+ return (op == type_class || op == type_struct ||
+ op == type_array || op == type_union);
+} /* is_compound_entity */
+
+int is_method_entity(ir_entity *ent) {
+ ir_type *t = get_entity_type(ent);
+ return is_Method_type(t);
+} /* is_method_entity */
+
+/**
+ * @todo not implemented!!! */
+int equal_entity(ir_entity *ent1, ir_entity *ent2) {
+ fprintf(stderr, " calling unimplemented equal entity!!! \n");
+ return 1;
+} /* equal_entity */
+
+
+unsigned long (get_entity_visited)(ir_entity *ent) {
+ return _get_entity_visited(ent);
+} /* get_entity_visited */
+
+void (set_entity_visited)(ir_entity *ent, unsigned long num) {
+ _set_entity_visited(ent, num);
+} /* set_entity_visited */
+
+/* Sets visited field in ir_entity to entity_visited. */
+void (mark_entity_visited)(ir_entity *ent) {
+ _mark_entity_visited(ent);
+} /* mark_entity_visited */
+
+int (entity_visited)(ir_entity *ent) {
+ return _entity_visited(ent);
+} /* entity_visited */
+
+int (entity_not_visited)(ir_entity *ent) {
+ return _entity_not_visited(ent);
+} /* entity_not_visited */
+
+/* Returns the mask of the additional entity properties. */
+unsigned get_entity_additional_properties(ir_entity *ent) {
+ ir_graph *irg;
+
+ assert(is_method_entity(ent));
+
+ /* first check, if the graph has additional properties */
+ irg = get_entity_irg(ent);
+
+ if (irg)
+ return get_irg_additional_properties(irg);
+
+ if (ent->attr.mtd_attr.irg_add_properties & mtp_property_inherited)
+ return get_method_additional_properties(get_entity_type(ent));
+
+ return ent->attr.mtd_attr.irg_add_properties;
+} /* get_entity_additional_properties */
+
+/* Sets the mask of the additional graph properties. */
+void set_entity_additional_properties(ir_entity *ent, unsigned property_mask)
+{
+ ir_graph *irg;
+
+ assert(is_method_entity(ent));
+
+ /* first check, if the graph exists */
+ irg = get_entity_irg(ent);
+ if (irg)
+ set_irg_additional_properties(irg, property_mask);
+ else {
+ /* do not allow to set the mtp_property_inherited flag or
+ * the automatic inheritance of flags will not work */
+ ent->attr.mtd_attr.irg_add_properties = property_mask & ~mtp_property_inherited;
+ }
+} /* set_entity_additional_properties */
+
+/* Sets one additional graph property. */
+void set_entity_additional_property(ir_entity *ent, mtp_additional_property flag)
+{
+ ir_graph *irg;
+
+ assert(is_method_entity(ent));
+
+ /* first check, if the graph exists */
+ irg = get_entity_irg(ent);
+ if (irg)
+ set_irg_additional_property(irg, flag);
+ else {
+ unsigned mask = ent->attr.mtd_attr.irg_add_properties;
+
+ if (mask & mtp_property_inherited)
+ mask = get_method_additional_properties(get_entity_type(ent));
+
+ /* do not allow to set the mtp_property_inherited flag or
+ * the automatic inheritance of flags will not work */
+ ent->attr.mtd_attr.irg_add_properties = mask | (flag & ~mtp_property_inherited);
+ }
+} /* set_entity_additional_property */
+
+/* Returns the class type that this type info entity represents or NULL
+ if ent is no type info entity. */
+ir_type *(get_entity_repr_class)(const ir_entity *ent) {
+ return _get_entity_repr_class(ent);
+} /* get_entity_repr_class */
+
+/* Initialize entity module. */
+void firm_init_entity(void)
+{
+ symconst_symbol sym;