#include <glib.h>
+#include "girmodule.h"
+
G_BEGIN_DECLS
-typedef struct _GIrNode GIrNode;
+typedef struct _GIrTypelibBuild GIrTypelibBuild;
+typedef struct _GIrNode GIrNode;
typedef struct _GIrNodeFunction GIrNodeFunction;
typedef struct _GIrNodeParam GIrNodeParam;
typedef struct _GIrNodeType GIrNodeType;
typedef struct _GIrNodeXRef GIrNodeXRef;
typedef struct _GIrNodeUnion GIrNodeUnion;
-typedef enum
+struct _GIrTypelibBuild {
+ GIrModule *module;
+ GList *modules;
+ GHashTable *strings;
+ GHashTable *types;
+ GList *offset_ordered_nodes;
+ guint32 n_attributes;
+ guchar *data;
+};
+
+typedef enum
{
G_IR_NODE_INVALID = 0,
G_IR_NODE_FUNCTION = 1,
G_IR_NODE_STRUCT = 3,
G_IR_NODE_BOXED = 4,
G_IR_NODE_ENUM = 5,
- G_IR_NODE_FLAGS = 6,
+ G_IR_NODE_FLAGS = 6,
G_IR_NODE_OBJECT = 7,
G_IR_NODE_INTERFACE = 8,
G_IR_NODE_CONSTANT = 9,
{
GIrNodeTypeId type;
gchar *name;
+
+ guint32 offset; /* Assigned as we build the typelib */
+
+ GHashTable *attributes;
};
struct _GIrNodeXRef
GIrNode node;
gboolean deprecated;
- gboolean is_varargs; /* Not in typelib yet */
+ gboolean is_varargs; /* Not in typelib yet */
gboolean is_method;
gboolean is_setter;
GList *parameters;
};
-struct _GIrNodeType
+struct _GIrNodeType
{
GIrNode node;
gboolean zero_terminated;
gboolean has_length;
gint length;
-
+ gboolean has_size;
+ gint size;
+
GIrNodeType *parameter_type1;
- GIrNodeType *parameter_type2;
+ GIrNodeType *parameter_type2;
gchar *interface;
gchar **errors;
};
-struct _GIrNodeParam
+struct _GIrNodeParam
{
GIrNode node;
gboolean allow_none;
gboolean transfer;
gboolean shallow_transfer;
-
+ GIScopeType scope;
+
+ gint8 closure;
+ gint8 destroy;
+
GIrNodeType *type;
};
gboolean writable;
gboolean construct;
gboolean construct_only;
-
+
GIrNodeType *type;
};
-struct _GIrNodeSignal
+struct _GIrNodeSignal
{
GIrNode node;
gboolean detailed;
gboolean action;
gboolean no_hooks;
-
+
gboolean has_class_closure;
gboolean true_stops_emit;
-
+
gint class_closure;
-
+
GList *parameters;
- GIrNodeParam *result;
+ GIrNodeParam *result;
};
-struct _GIrNodeVFunc
+struct _GIrNodeVFunc
{
GIrNode node;
- gboolean is_varargs; /* Not in typelib yet */
+ gboolean is_varargs; /* Not in typelib yet */
gboolean must_chain_up;
gboolean must_be_implemented;
gboolean must_not_be_implemented;
gboolean is_class_closure;
-
+
+ char *invoker;
+
GList *parameters;
- GIrNodeParam *result;
+ GIrNodeParam *result;
gint offset;
};
gboolean writable;
gint bits;
gint offset;
-
+ GIrNodeFunction *callback;
+
GIrNodeType *type;
};
gchar *gtype_init;
gchar *parent;
-
+ gchar *glib_type_struct;
+
GList *interfaces;
GList *prerequisites;
+ gint alignment;
+ gint size;
+
GList *members;
};
gboolean deprecated;
- guint32 value;
+ gint32 value;
};
struct _GIrNodeConstant
gboolean deprecated;
GIrNodeType *type;
-
+
gchar *value;
};
GIrNode node;
gboolean deprecated;
+ gint storage_type;
gchar *gtype_name;
gchar *gtype_init;
};
struct _GIrNodeBoxed
-{
+{
GIrNode node;
gboolean deprecated;
gchar *gtype_name;
gchar *gtype_init;
-
+
+ gint alignment;
+ gint size;
+
GList *members;
};
GIrNode node;
gboolean deprecated;
+ gboolean disguised;
+ gboolean is_gtype_struct;
gchar *gtype_name;
gchar *gtype_init;
-
+
+ gint alignment;
+ gint size;
+
GList *members;
};
GIrNode node;
gboolean deprecated;
-
+
GList *members;
GList *discriminators;
gchar *gtype_name;
gchar *gtype_init;
+ gint alignment;
+ gint size;
+
gint discriminator_offset;
GIrNodeType *discriminator_type;
};
GIrNode node;
gboolean deprecated;
-
+
gchar *name;
gchar *getquark;
gchar *codes;
void g_ir_node_free (GIrNode *node);
guint32 g_ir_node_get_size (GIrNode *node);
guint32 g_ir_node_get_full_size (GIrNode *node);
-void g_ir_node_build_typelib (GIrNode *node,
- GIrModule *module,
- GList *modules,
- GHashTable *strings,
- GHashTable *types,
- guchar *data,
- guint32 *offset,
- guint32 *offset2);
+guint32 g_ir_node_get_attribute_size (GIrNode *node);
+void g_ir_node_build_typelib (GIrNode *node,
+ GIrNode *parent,
+ GIrTypelibBuild *build,
+ guint32 *offset,
+ guint32 *offset2);
int g_ir_node_cmp (GIrNode *node,
GIrNode *other);
gboolean g_ir_node_can_have_member (GIrNode *node);
void g_ir_node_add_member (GIrNode *node,
GIrNodeFunction *member);
guint32 write_string (const gchar *str,
- GHashTable *strings,
+ GHashTable *strings,
guchar *data,
guint32 *offset);
const gchar * g_ir_node_param_direction_string (GIrNodeParam * node);
const gchar * g_ir_node_type_to_string (GIrNodeTypeId type);
+gboolean g_ir_find_node (GIrModule *module,
+ GList *modules,
+ const char *name,
+ GIrNode **node_out,
+ GIrModule **module_out);
+
+/* In giroffsets.c */
+
+void g_ir_node_compute_offsets (GIrNode *node,
+ GIrModule *module,
+ GList *modules);
+
+
G_END_DECLS
#endif /* __G_IR_NODE_H__ */