+struct declaration_sequence {
+ struct declaration p;
+ struct type_sequence *type;
+ struct declaration_scope *scope;
+ struct declaration_integer *len;
+ struct field current_element; /* struct field */
+};
+
+int register_type(GQuark type_name, struct type *type,
+ struct type_scope *scope);
+struct type *lookup_type(GQuark type_name, struct type_scope *scope);
+struct type_scope *new_type_scope(struct type_scope *parent_scope);
+void free_type_scope(struct type_scope *scope);
+
+struct declaration *
+ lookup_declaration(GQuark field_name, struct declaration_scope *scope);
+int register_declaration(GQuark field_name, struct declaration *declaration,
+ struct declaration_scope *scope);
+struct declaration_scope *
+ new_declaration_scope(struct declaration_scope *parent_scope);
+void free_declaration_scope(struct declaration_scope *scope);
+
+void type_ref(struct type *type);
+void type_unref(struct type *type);
+
+void declaration_ref(struct declaration *declaration);
+void declaration_unref(struct declaration *declaration);