fix support for instance delegates
authorJuerg Billeter <j@bitron.ch>
Sat, 23 Feb 2008 17:42:27 +0000 (17:42 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sat, 23 Feb 2008 17:42:27 +0000 (17:42 +0000)
2008-02-23  Juerg Billeter  <j@bitron.ch>

* vala/valainterfacewriter.vala: fix support for instance delegates

* vapigen/valagidlparser.vala: support instance delegates in
  bindings generator

svn path=/trunk/; revision=1039

ChangeLog
vala/valainterfacewriter.vala
vapigen/valagidlparser.vala

index e4a56c7..e982c55 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-02-23  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valainterfacewriter.vala: fix support for instance delegates
+
+       * vapigen/valagidlparser.vala: support instance delegates in
+         bindings generator
+
 2008-02-23  Raffaele Sandrini  <raffaele@sandrini.ch>
 
        * vala/valaerrortype.vala: fix typo
index 234005d..7288681 100644 (file)
@@ -526,7 +526,10 @@ public class Vala.InterfaceWriter : CodeVisitor {
                
                write_indent ();
                write_accessibility (cb);
-               write_string ("static delegate ");
+               if (!cb.instance) {
+                       write_string ("static ");
+               }
+               write_string ("delegate ");
                
                write_return_type (cb.return_type);
                
index 6eb3bd7..18e8d8f 100644 (file)
@@ -296,9 +296,14 @@ public class Vala.GIdlParser : CodeVisitor {
                
                foreach (weak IdlNodeParam param in f_node.parameters) {
                        weak IdlNode param_node = (IdlNode) param;
-                       
-                       var p = new FormalParameter (param_node.name, parse_param (param));
-                       cb.add_parameter (p);
+
+                       if (param_node.name == "user_data") {
+                               // hide user_data parameter for instance delegates
+                               cb.instance = true;
+                       } else {
+                               var p = new FormalParameter (param_node.name, parse_param (param));
+                               cb.add_parameter (p);
+                       }
                }
                
                return cb;
@@ -1306,6 +1311,11 @@ public class Vala.GIdlParser : CodeVisitor {
 
                                // hide array length param
                                hide_param = true;
+                       } else if (last_param != null && p.name == "user_data") {
+                               // last_param is delegate
+
+                               // hide deleate target param
+                               hide_param = true;
                        }
 
                        if (!hide_param) {