mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-02 17:26:17 +01:00
girepository/girparser: Move dependencies ownership to each module
In this way the module can survive without that the parser is fully alive. At the moment a module has not a ref-count system, but this makes things clearer when we return the module from a parser.
This commit is contained in:
parent
9d65076eba
commit
6e38293fec
@ -47,7 +47,7 @@ struct _GIIrModule
|
||||
char *version;
|
||||
char *shared_library;
|
||||
char *c_prefix;
|
||||
GList *dependencies;
|
||||
GList *dependencies; /* (owned) */
|
||||
GList *entries;
|
||||
|
||||
/* All modules that are included directly or indirectly */
|
||||
|
@ -83,7 +83,7 @@ gi_ir_module_free (GIIrModule *module)
|
||||
gi_ir_node_free ((GIIrNode *)e->data);
|
||||
|
||||
g_list_free (module->entries);
|
||||
/* Don't free dependencies, we inherit that from the parser */
|
||||
g_clear_list (&module->dependencies, g_free);
|
||||
|
||||
g_list_free (module->include_modules);
|
||||
|
||||
|
@ -3194,7 +3194,9 @@ start_element_handler (GMarkupParseContext *context,
|
||||
ctx->include_modules = NULL;
|
||||
|
||||
ctx->modules = g_list_append (ctx->modules, ctx->current_module);
|
||||
ctx->current_module->dependencies = ctx->dependencies;
|
||||
g_clear_list (&ctx->current_module->dependencies, g_free);
|
||||
ctx->current_module->dependencies =
|
||||
g_list_copy_deep (ctx->dependencies, (GCopyFunc) g_strdup, NULL);
|
||||
|
||||
state_switch (ctx, STATE_NAMESPACE);
|
||||
goto out;
|
||||
@ -3824,6 +3826,7 @@ gi_ir_parser_parse_string (GIIrParser *parser,
|
||||
}
|
||||
|
||||
g_clear_slist (&ctx.node_stack, NULL);
|
||||
g_clear_list (&ctx.dependencies, g_free);
|
||||
g_markup_parse_context_free (context);
|
||||
|
||||
if (ctx.modules)
|
||||
|
Loading…
Reference in New Issue
Block a user