Don't require c:type. Test boxed.gir Update, remove parts we don't support

2008-08-14  Johan Dahlin  <johan@gnome.org>

    * girepository/girparser.c (start_type):
    Don't require c:type.
    * tests/Makefile.am:
    Test boxed.gir
    * tests/boxed.gir:
    Update, remove parts we don't support yet
    * tests/roundtrips.sh:
    Remove
    * tools/generate.c (write_type_info), (write_field_info),
    (write_callable_info), (write_struct_info):
    Make it emit proper gir.


svn path=/trunk/; revision=376
This commit is contained in:
Johan Dahlin 2008-08-14 19:07:34 +00:00 committed by Philip Withnall
parent c2bbd6ecba
commit 8ed19c3d86

View File

@ -54,24 +54,24 @@ write_type_info (const gchar *namespace,
GITypeInfo *type; GITypeInfo *type;
const gchar* basic[] = { const gchar* basic[] = {
"void", "none",
"gboolean", "boolean",
"gint8", "int8",
"guint8", "uint8",
"gint16", "int16",
"guint16", "uint16",
"gint32", "int32",
"guint32", "uint32",
"gint64", "int64",
"guint64", "uint64",
"gint", "int",
"guint", "uint",
"glong", "long",
"gulong", "ulong",
"gssize", "ssize",
"gsize", "size",
"gfloat", "float",
"gdouble", "double",
"utf8", "utf8",
"filename" "filename"
}; };
@ -206,15 +206,10 @@ write_field_info (const gchar *namespace,
flags & GI_FIELD_IS_WRITABLE ? "1" : "0"); flags & GI_FIELD_IS_WRITABLE ? "1" : "0");
if (size) if (size)
g_fprintf (file, " bits=\"%d\"", size); g_fprintf (file, " bits=\"%d\"", size);
g_fprintf (file, " offset=\"%d\"", offset); g_fprintf (file, " offset=\"%d\"", offset);
g_fprintf (file, "type=\"");
type = g_field_info_get_type (info); type = g_field_info_get_type (info);
write_type_info (namespace, type, file);
g_base_info_unref ((GIBaseInfo *)type);
g_fprintf (file, "\"");
if (branch) if (branch)
{ {
@ -225,7 +220,17 @@ write_field_info (const gchar *namespace,
g_fprintf (file, "\""); g_fprintf (file, "\"");
} }
g_fprintf (file," />\n"); g_fprintf (file,">\n");
g_fprintf (file, " <type name=\"");
write_type_info (namespace, type, file);
g_base_info_unref ((GIBaseInfo *)type);
g_fprintf (file, "\"/>\n");
g_fprintf (file, " </field>\n");
} }
static void static void
@ -237,12 +242,9 @@ write_callable_info (const gchar *namespace,
GITypeInfo *type; GITypeInfo *type;
gint i; gint i;
g_fprintf (file, "%*s <return-type c:type=\"", indent, ""); g_fprintf (file, "%*s <return-value>\n", indent, "");
type = g_callable_info_get_return_type (info); type = g_callable_info_get_return_type (info);
write_type_info (namespace, type, file);
g_fprintf (file, "\"");
if (g_type_info_is_pointer (type)) if (g_type_info_is_pointer (type))
{ {
@ -265,22 +267,25 @@ write_callable_info (const gchar *namespace,
if (g_callable_info_may_return_null (info)) if (g_callable_info_may_return_null (info))
g_fprintf (file, " null-ok=\"1\""); g_fprintf (file, " null-ok=\"1\"");
g_fprintf (file, " />\n"); g_fprintf (file, "%*s <type name=\"", indent + 2, "");
write_type_info (namespace, type, file);
g_fprintf (file, "\"/>\n");
g_fprintf (file, "%*s </return-value>\n", indent, "");
if (g_callable_info_get_n_args (info) <= 0)
return;
if (g_callable_info_get_n_args (info) > 0)
{
g_fprintf (file, "%*s <parameters>\n", indent, ""); g_fprintf (file, "%*s <parameters>\n", indent, "");
for (i = 0; i < g_callable_info_get_n_args (info); i++) for (i = 0; i < g_callable_info_get_n_args (info); i++)
{ {
GIArgInfo *arg = g_callable_info_get_arg (info, i); GIArgInfo *arg = g_callable_info_get_arg (info, i);
g_fprintf (file, "%*s <parameter name=\"%s\" c:type=\"", g_fprintf (file, "%*s <parameter name=\"%s\"",
indent, "", g_base_info_get_name ((GIBaseInfo *) arg)); indent, "", g_base_info_get_name ((GIBaseInfo *) arg));
type = g_arg_info_get_type (arg);
write_type_info (namespace, type, file);
g_fprintf (file, "\"");
if (g_type_info_is_pointer (type)) if (g_type_info_is_pointer (type))
{ {
switch (g_arg_info_get_ownership_transfer (arg)) switch (g_arg_info_get_ownership_transfer (arg))
@ -327,14 +332,22 @@ write_callable_info (const gchar *namespace,
if (g_arg_info_is_optional (arg)) if (g_arg_info_is_optional (arg))
g_fprintf (file, " optional=\"1\""); g_fprintf (file, " optional=\"1\"");
g_fprintf (file, " />\n"); g_fprintf (file, ">\n");
g_fprintf (file, "%*s <type name=\"", indent+2, "");
type = g_arg_info_get_type (arg);
write_type_info (namespace, type, file);
g_fprintf (file, "\"/>\n");
g_fprintf (file, "%*s </parameter>\n", indent, "");
g_base_info_unref ((GIBaseInfo *)arg); g_base_info_unref ((GIBaseInfo *)arg);
} }
g_fprintf (file, "%*s </parameters>\n", indent, ""); g_fprintf (file, "%*s </parameters>\n", indent, "");
} }
}
static void static void
write_function_info (const gchar *namespace, write_function_info (const gchar *namespace,
@ -417,7 +430,7 @@ write_struct_info (const gchar *namespace,
type_name = g_registered_type_info_get_type_name ((GIRegisteredTypeInfo*)info); type_name = g_registered_type_info_get_type_name ((GIRegisteredTypeInfo*)info);
type_init = g_registered_type_info_get_type_init ((GIRegisteredTypeInfo*)info); type_init = g_registered_type_info_get_type_init ((GIRegisteredTypeInfo*)info);
g_fprintf (file, " <boxed name=\"%s\" type-name=\"%s\" get-type=\"%s\"", name, type_name, type_init); g_fprintf (file, " <glib:boxed glib:name=\"%s\" glib:type-name=\"%s\" glib:get-type=\"%s\"", name, type_name, type_init);
} }
else else
g_fprintf (file, " <struct name=\"%s\"", name); g_fprintf (file, " <struct name=\"%s\"", name);
@ -442,7 +455,7 @@ write_struct_info (const gchar *namespace,
} }
if (g_base_info_get_type ((GIBaseInfo *)info) == GI_INFO_TYPE_BOXED) if (g_base_info_get_type ((GIBaseInfo *)info) == GI_INFO_TYPE_BOXED)
g_fprintf (file, " </boxed>\n"); g_fprintf (file, " </glib:boxed>\n");
else else
g_fprintf (file, " </struct>\n"); g_fprintf (file, " </struct>\n");
} }