Handle alias chains correctly

* girepository/girparser.c: Handle chains of aliases
	across modules by ensuring we fully qualify aliases
	from includes.

svn path=/trunk/; revision=531
This commit is contained in:
Colin Walters 2008-08-29 20:41:26 +00:00
parent 63bb95c0db
commit 8baadb8611

View File

@ -1086,12 +1086,27 @@ start_alias (GMarkupParseContext *context,
return FALSE; return FALSE;
} }
value = g_strdup (target);
if (ctx->prefix_aliases) if (ctx->prefix_aliases)
{
key = g_strdup_printf ("%s.%s", ctx->namespace, name); key = g_strdup_printf ("%s.%s", ctx->namespace, name);
if (!strchr (target, '.'))
{
const BasicTypeInfo *basic = parse_basic (target);
if (!basic)
{
g_free (value);
/* For non-basic types, re-qualify the interface */
value = g_strdup_printf ("%s.%s", ctx->namespace, target);
}
}
}
else else
{
key = g_strdup (name); key = g_strdup (name);
}
g_hash_table_insert (ctx->aliases, key, g_strdup (target)); g_hash_table_insert (ctx->aliases, key, value);
return TRUE; return TRUE;
} }
@ -2213,10 +2228,9 @@ start_element_handler (GMarkupParseContext *context,
ctx->modules = g_list_append (ctx->modules, ctx->current_module); ctx->modules = g_list_append (ctx->modules, ctx->current_module);
state_switch (ctx, STATE_NAMESPACE); state_switch (ctx, STATE_NAMESPACE);
}
goto out; goto out;
} }
}
break; break;
case 'p': case 'p':
@ -2690,6 +2704,7 @@ g_ir_parse_string (const gchar *namespace,
ctx.namespace = namespace; ctx.namespace = namespace;
ctx.aliases = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); ctx.aliases = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
ctx.type_depth = 0; ctx.type_depth = 0;
ctx.current_module = NULL;
context = g_markup_parse_context_new (&firstpass_parser, 0, &ctx, NULL); context = g_markup_parse_context_new (&firstpass_parser, 0, &ctx, NULL);