+/** A function called to free attributes of a type. */
+typedef void (*free_attrs_func)(ir_type *tp);
+
+/** A function called to free owned entities of a type. */
+typedef void (*free_entities_func)(ir_type *tp);
+
+/** A function called to free all automatic allocated entities of a type. */
+typedef void (*free_auto_entities_func)(ir_type *tp);
+
+/** A function called to set the mode of a type. */
+typedef void (*set_type_mode_func)(ir_type *tp, ir_mode *m);
+
+/** A function called to set the size of a type in bits */
+typedef void (*set_type_size_func)(ir_type *tp, int size);
+
+/** A function called to get the number of compound members */
+typedef int (*get_n_members_func)(const ir_type *tp);
+
+/** A function called to get the pos'th compound member */
+typedef entity *(*get_member_func)(const ir_type *tp, int pos);
+
+typedef int (*get_member_index_func)(const ir_type *tp, entity *member);
+
+/** A function called to insert an entity into the type */
+typedef void (*insert_entity_func)(ir_type *tp, entity *member);
+
+/**
+ * tp_op operations.
+ */
+typedef struct _tp_op_ops {
+ free_attrs_func free_attrs; /**< called to free the attributes of a type */
+ free_entities_func free_entities; /**< called to free the owned entities of a type */
+ free_auto_entities_func free_auto_entities; /**< called to free the automatic allocated entities of a type */
+ set_type_mode_func set_type_mode; /**< called to set a ir_mode of a type */
+ set_type_size_func set_type_size; /**< called to set the bit size of a type */
+ get_n_members_func get_n_members; /**< called to return the number of compound members */
+ get_member_func get_member; /**< called to get the pos'th compound member */
+ get_member_index_func get_member_index; /**< called to get the index of a compound member */
+} tp_op_ops;
+
+/** possible flags for a type opcode */
+enum tp_op_flags_t {
+ TP_OP_FLAG_COMPOUND = 1 /**< is a compound type */
+};
+