From 1f024a1a2894448d37e91feb0b5a047f9ce55a96 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 20 Feb 2009 16:05:53 +0000 Subject: typelib building: Compress 5 arguments for g_ir_node_build_typelib This makes it easier to add more over time without changing lots of unrelated code. --- diff --git a/girepository/girmodule.c b/girepository/girmodule.c index 5f5ae09..107b21b 100644 --- a/girepository/girmodule.c +++ b/girepository/girmodule.c @@ -234,6 +234,7 @@ g_ir_module_build_typelib (GIrModule *module, for (e = module->entries, i = 0; e; e = e->next, i++) { + GIrTypelibBuild build; GIrNode *node = e->data; if (strchr (node->name, '.')) @@ -277,8 +278,12 @@ g_ir_module_build_typelib (GIrModule *module, entry->offset = offset; entry->name = write_string (node->name, strings, data, &offset2); - g_ir_node_build_typelib (node, module, modules, - strings, types, data, &offset, &offset2); + build.module = module; + build.modules = modules; + build.strings = strings; + build.types = types; + build.data = data; + g_ir_node_build_typelib (node, &build, &offset, &offset2); if (offset2 > old_offset + g_ir_node_get_full_size (node)) g_error ("left a hole of %d bytes\n", offset2 - old_offset - g_ir_node_get_full_size (node)); diff --git a/girepository/girnode.c b/girepository/girnode.c index 6400da9..0aafa44 100644 --- a/girepository/girnode.c +++ b/girepository/girnode.c @@ -1287,11 +1287,7 @@ static void g_ir_node_build_members (GList **members, GIrNodeTypeId type, guint16 *count, - GIrModule *module, - GList *modules, - GHashTable *strings, - GHashTable *types, - guchar *data, + GIrTypelibBuild *build, guint32 *offset, guint32 *offset2) { @@ -1305,8 +1301,7 @@ g_ir_node_build_members (GList **members, if (member->type == type) { (*count)++; - g_ir_node_build_typelib (member, module, modules, strings, - types, data, offset, offset2); + g_ir_node_build_typelib (member, build, offset, offset2); *members = g_list_delete_link (*members, l); } l = next; @@ -1343,15 +1338,16 @@ g_ir_node_check_unhandled_members (GList **members, } void -g_ir_node_build_typelib (GIrNode *node, - GIrModule *module, - GList *modules, - GHashTable *strings, - GHashTable *types, - guchar *data, - guint32 *offset, - guint32 *offset2) +g_ir_node_build_typelib (GIrNode *node, + GIrTypelibBuild *build, + guint32 *offset, + guint32 *offset2) { + GIrModule *module = build->module; + GList *modules = build->modules; + GHashTable *strings = build->strings; + GHashTable *types = build->types; + guchar *data = build->data; GList *l; guint32 old_offset = *offset; guint32 old_offset2 = *offset2; @@ -1432,8 +1428,7 @@ g_ir_node_build_typelib (GIrNode *node, *offset2 += sizeof (ArrayTypeBlob); g_ir_node_build_typelib ((GIrNode *)type->parameter_type1, - module, modules, strings, types, - data, &pos, offset2); + build, &pos, offset2); } break; @@ -1467,8 +1462,7 @@ g_ir_node_build_typelib (GIrNode *node, *offset2 += sizeof (ParamTypeBlob) + sizeof (SimpleTypeBlob); g_ir_node_build_typelib ((GIrNode *)type->parameter_type1, - module, modules, strings, types, - data, &pos, offset2); + build, &pos, offset2); } break; @@ -1487,11 +1481,9 @@ g_ir_node_build_typelib (GIrNode *node, *offset2 += sizeof (ParamTypeBlob) + sizeof (SimpleTypeBlob)*2; g_ir_node_build_typelib ((GIrNode *)type->parameter_type1, - module, modules, strings, types, - data, &pos, offset2); + build, &pos, offset2); g_ir_node_build_typelib ((GIrNode *)type->parameter_type2, - module, modules, strings, types, - data, &pos, offset2); + build, &pos, offset2); } break; @@ -1545,8 +1537,7 @@ g_ir_node_build_typelib (GIrNode *node, blob->struct_offset = 0xFFFF; /* mark as unknown */ g_ir_node_build_typelib ((GIrNode *)field->type, - module, modules, strings, types, - data, offset, offset2); + build, offset, offset2); } break; @@ -1566,8 +1557,7 @@ g_ir_node_build_typelib (GIrNode *node, blob->reserved = 0; g_ir_node_build_typelib ((GIrNode *)prop->type, - module, modules, strings, types, - data, offset, offset2); + build, offset, offset2); } break; @@ -1601,8 +1591,7 @@ g_ir_node_build_typelib (GIrNode *node, g_debug ("building function '%s'", function->symbol); g_ir_node_build_typelib ((GIrNode *)function->result->type, - module, modules, strings, types, - data, &signature, offset2); + build, &signature, offset2); blob2->may_return_null = function->result->allow_none; blob2->caller_owns_return_value = function->result->transfer; @@ -1616,9 +1605,7 @@ g_ir_node_build_typelib (GIrNode *node, { GIrNode *param = (GIrNode *)l->data; - g_ir_node_build_typelib (param, - module, modules, strings, types, - data, &signature, offset2); + g_ir_node_build_typelib (param, build, &signature, offset2); } } @@ -1645,8 +1632,7 @@ g_ir_node_build_typelib (GIrNode *node, blob->signature = signature; g_ir_node_build_typelib ((GIrNode *)function->result->type, - module, modules, strings, types, - data, &signature, offset2); + build, &signature, offset2); blob2->may_return_null = function->result->allow_none; blob2->caller_owns_return_value = function->result->transfer; @@ -1660,9 +1646,7 @@ g_ir_node_build_typelib (GIrNode *node, { GIrNode *param = (GIrNode *)l->data; - g_ir_node_build_typelib (param, - module, modules, strings, types, - data, &signature, offset2); + g_ir_node_build_typelib (param, build, &signature, offset2); } } break; @@ -1697,8 +1681,7 @@ g_ir_node_build_typelib (GIrNode *node, blob->signature = signature; g_ir_node_build_typelib ((GIrNode *)signal->result->type, - module, modules, strings, types, - data, &signature, offset2); + build, &signature, offset2); blob2->may_return_null = signal->result->allow_none; blob2->caller_owns_return_value = signal->result->transfer; @@ -1712,8 +1695,7 @@ g_ir_node_build_typelib (GIrNode *node, { GIrNode *param = (GIrNode *)l->data; - g_ir_node_build_typelib (param, module, modules, strings, types, - data, &signature, offset2); + g_ir_node_build_typelib (param, build, &signature, offset2); } } break; @@ -1744,8 +1726,7 @@ g_ir_node_build_typelib (GIrNode *node, blob->signature = signature; g_ir_node_build_typelib ((GIrNode *)vfunc->result->type, - module, modules, strings, types, - data, &signature, offset2); + build, &signature, offset2); blob2->may_return_null = vfunc->result->allow_none; blob2->caller_owns_return_value = vfunc->result->transfer; @@ -1759,8 +1740,7 @@ g_ir_node_build_typelib (GIrNode *node, { GIrNode *param = (GIrNode *)l->data; - g_ir_node_build_typelib (param, module, modules, strings, - types, data, &signature, offset2); + g_ir_node_build_typelib (param, build, &signature, offset2); } } break; @@ -1789,8 +1769,7 @@ g_ir_node_build_typelib (GIrNode *node, blob->closure = param->closure; blob->destroy = param->destroy; - g_ir_node_build_typelib ((GIrNode *)param->type, module, modules, - strings, types, data, offset, offset2); + g_ir_node_build_typelib ((GIrNode *)param->type, build, offset, offset2); } break; @@ -1829,12 +1808,10 @@ g_ir_node_build_typelib (GIrNode *node, members = g_list_copy (struct_->members); g_ir_node_build_members (&members, G_IR_NODE_FIELD, &blob->n_fields, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); g_ir_node_build_members (&members, G_IR_NODE_FUNCTION, &blob->n_methods, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); g_ir_node_check_unhandled_members (&members, node->type); @@ -1866,12 +1843,10 @@ g_ir_node_build_typelib (GIrNode *node, members = g_list_copy (boxed->members); g_ir_node_build_members (&members, G_IR_NODE_FIELD, &blob->n_fields, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); g_ir_node_build_members (&members, G_IR_NODE_FUNCTION, &blob->n_methods, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); g_ir_node_check_unhandled_members (&members, node->type); @@ -1916,8 +1891,7 @@ g_ir_node_build_typelib (GIrNode *node, *offset += 28; blob->discriminated = TRUE; g_ir_node_build_typelib ((GIrNode *)union_->discriminator_type, - module, modules, strings, types, - data, offset, offset2); + build, offset, offset2); } else { @@ -1929,12 +1903,10 @@ g_ir_node_build_typelib (GIrNode *node, members = g_list_copy (union_->members); g_ir_node_build_members (&members, G_IR_NODE_FIELD, &blob->n_fields, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); g_ir_node_build_members (&members, G_IR_NODE_FUNCTION, &blob->n_functions, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); g_ir_node_check_unhandled_members (&members, node->type); @@ -1946,8 +1918,7 @@ g_ir_node_build_typelib (GIrNode *node, { GIrNode *member = (GIrNode *)l->data; - g_ir_node_build_typelib (member, module, modules, strings, - types, data, offset, offset2); + g_ir_node_build_typelib (member, build, offset, offset2); } } } @@ -1991,8 +1962,7 @@ g_ir_node_build_typelib (GIrNode *node, GIrNode *value = (GIrNode *)l->data; blob->n_values++; - g_ir_node_build_typelib (value, module, modules, strings, types, - data, offset, offset2); + g_ir_node_build_typelib (value, build, offset, offset2); } } break; @@ -2039,33 +2009,27 @@ g_ir_node_build_typelib (GIrNode *node, *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_FIELD, &blob->n_fields, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_PROPERTY, &blob->n_properties, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_FUNCTION, &blob->n_methods, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_SIGNAL, &blob->n_signals, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_VFUNC, &blob->n_vfuncs, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_CONSTANT, &blob->n_constants, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); g_ir_node_check_unhandled_members (&members, node->type); @@ -2104,28 +2068,23 @@ g_ir_node_build_typelib (GIrNode *node, *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_PROPERTY, &blob->n_properties, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_FUNCTION, &blob->n_methods, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_SIGNAL, &blob->n_signals, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_VFUNC, &blob->n_vfuncs, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); *offset = ALIGN_VALUE (*offset, 4); g_ir_node_build_members (&members, G_IR_NODE_CONSTANT, &blob->n_constants, - module, modules, strings, - types, data, offset, offset2); + build, offset, offset2); g_ir_node_check_unhandled_members (&members, node->type); @@ -2251,8 +2210,7 @@ g_ir_node_build_typelib (GIrNode *node, } *offset2 += ALIGN_VALUE (blob->size, 4); - g_ir_node_build_typelib ((GIrNode *)constant->type, module, modules, - strings, types, data, &pos, offset2); + g_ir_node_build_typelib ((GIrNode *)constant->type, build, &pos, offset2); } break; default: diff --git a/girepository/girnode.h b/girepository/girnode.h index fad6799..33848db 100644 --- a/girepository/girnode.h +++ b/girepository/girnode.h @@ -27,6 +27,7 @@ G_BEGIN_DECLS +typedef struct _GIrTypelibBuild GIrTypelibBuild; typedef struct _GIrNode GIrNode; typedef struct _GIrNodeFunction GIrNodeFunction; typedef struct _GIrNodeParam GIrNodeParam; @@ -45,6 +46,14 @@ typedef struct _GIrNodeErrorDomain GIrNodeErrorDomain; typedef struct _GIrNodeXRef GIrNodeXRef; typedef struct _GIrNodeUnion GIrNodeUnion; +struct _GIrTypelibBuild { + GIrModule *module; + GList *modules; + GHashTable *strings; + GHashTable *types; + guchar *data; +}; + typedef enum { G_IR_NODE_INVALID = 0, @@ -340,14 +349,10 @@ GIrNode * g_ir_node_new (GIrNodeTypeId type); 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); +void g_ir_node_build_typelib (GIrNode *node, + GIrTypelibBuild *build, + guint32 *offset, + guint32 *offset2); int g_ir_node_cmp (GIrNode *node, GIrNode *other); gboolean g_ir_node_can_have_member (GIrNode *node); -- cgit v0.9.1