diff options
author | Abderrahim Kitouni <a.kitouni@gmail.com> | 2009-12-03 21:10:28 +0100 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2010-01-17 13:48:35 +0100 |
commit | 495cd714aca44534b1cec1fb71edb20a40ae47d0 (patch) | |
tree | 50e0a6f3358aa16c6cfc871532323e6617a01e2f /codegen/valagirwriter.vala | |
parent | 93568146e15af82783e298bcc9948796d6ed2119 (diff) | |
download | vala-495cd714aca44534b1cec1fb71edb20a40ae47d0.tar.gz |
GIR writer: Write user_data parameter for delegates
Diffstat (limited to 'codegen/valagirwriter.vala')
-rw-r--r-- | codegen/valagirwriter.vala | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/codegen/valagirwriter.vala b/codegen/valagirwriter.vala index ee87ad48f..5d1ca71e9 100644 --- a/codegen/valagirwriter.vala +++ b/codegen/valagirwriter.vala @@ -509,7 +509,7 @@ public class Vala.GIRWriter : CodeVisitor { } } - private void write_params_and_return (List<FormalParameter> params, DataType? return_type, bool return_array_length, bool constructor = false, DataType? instance_type = null) { + private void write_params_and_return (List<FormalParameter> params, DataType? return_type, bool return_array_length, bool constructor = false, DataType? instance_type = null, bool user_data = false) { int last_index = 0; if (params.size != 0 || instance_type != null || (return_type is ArrayType && return_array_length) || (return_type is DelegateType)) { write_indent (); @@ -530,6 +530,17 @@ public class Vala.GIRWriter : CodeVisitor { last_index = index - 1; write_implicit_params (return_type, ref index, return_array_length, "result", ParameterDirection.OUT); + if (user_data) { + write_indent (); + stream.printf ("<parameter name=\"user_data\" transfer-ownership=\"none\" closure=\"%d\">\n", index); + indent++; + write_indent (); + stream.printf ("<type name=\"any\" c:type=\"void*\"/>\n"); + indent--; + write_indent (); + stream.printf ("</parameter>\n"); + } + indent--; write_indent (); stream.printf ("</parameters>\n"); @@ -560,7 +571,7 @@ public class Vala.GIRWriter : CodeVisitor { write_annotations (cb); - write_params_and_return (cb.get_parameters (), cb.return_type, !cb.no_array_length); + write_params_and_return (cb.get_parameters (), cb.return_type, !cb.no_array_length, false, null, cb.has_target); indent--; write_indent (); |