mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-02 09:16:17 +01:00
Bug 556489 – callback annotations
2008-01-03 Andreas Rottmann <a.rottmann@gmx.at> Bug 556489 – callback annotations * giscanner/transformer.py * tools/generate.c (write_callable_info): Write out the new scope, closure and destroy attributes. * giscanner/transformer.py (Transformer._type_is_callback): New method, checking if a given type is a callback. (Transformer._augment_callback_params): New method; adds information (closure, destroy) to callback parameters. (Transformer._handle_closure, Transformer._handle_destroy): New methods, auxiliary to _augment_callback_params. (Transformer._create_function): Call _augment_callback_params(). (Transformer._create_parameter): Handle scope option. (Transformer._create_typedef_callback): New method, creates a callback, and registers it in the typedef namespace (Transformer._create_typedef): Use _create_typedef_callback() instead of the plain _create_callback(). * giscanner/ast.py (Parameter): Added callback-related fields. * giscanner/girwriter.py: Write out new Parameter fields. * girepository/girnode.h (GIrNodeParam): Added fields scope, closure and destroy. * girepository/gtypelib.h (ArgBlob): Ditto. * girepository/girparser.c (start_parameter): Handle new fields. * girepository/girmodule.c (g_ir_module_build_typelib): Adjust arg_blob_size, bump major version due to this change. * girepository/girnode.c (g_ir_node_get_full_size_internal) (g_ir_node_build_typelib) * girepository/gtypelib.c (g_typelib_check_sanity): ArgBlob size adjustments. (g_ir_node_build_typelib): Fill in new ArgBlob flags from param. * girepository/girepository.h (GIScope): New enumeration, listing the different possible scopes for callbacks. * girepository/ginfo.c (g_arg_info_get_scope) (g_arg_info_get_closure, g_arg_info_get_destroy): Accessors for callback-related argument indices (callback scope, closure for a callback, destroy notification for a callback). * tests/scanner/: Added testcases for new features. svn path=/trunk/; revision=998
This commit is contained in:
parent
fcdfe8dbd9
commit
981e55ef57
@ -455,6 +455,30 @@ write_callable_info (const gchar *namespace,
|
||||
|
||||
if (g_arg_info_is_optional (arg))
|
||||
xml_printf (file, " optional=\"1\"");
|
||||
|
||||
switch (g_arg_info_get_scope (arg))
|
||||
{
|
||||
case GI_SCOPE_TYPE_INVALID:
|
||||
break;
|
||||
case GI_SCOPE_TYPE_CALL:
|
||||
xml_printf (file, " scope=\"call\"");
|
||||
break;
|
||||
case GI_SCOPE_TYPE_OBJECT:
|
||||
xml_printf (file, " scope=\"object\"");
|
||||
break;
|
||||
case GI_SCOPE_TYPE_ASYNC:
|
||||
xml_printf (file, " scope=\"async\"");
|
||||
break;
|
||||
case GI_SCOPE_TYPE_NOTIFIED:
|
||||
xml_printf (file, " scope=\"notified\"");
|
||||
break;
|
||||
}
|
||||
|
||||
if (g_arg_info_get_closure (arg) >= 0)
|
||||
xml_printf (file, " closure=\"%d\"", g_arg_info_get_closure (arg));
|
||||
|
||||
if (g_arg_info_get_destroy (arg) >= 0)
|
||||
xml_printf (file, " destroy=\"%d\"", g_arg_info_get_destroy (arg));
|
||||
|
||||
type = g_arg_info_get_type (arg);
|
||||
write_type_info (namespace, type, file);
|
||||
|
Loading…
Reference in New Issue
Block a user