add possibility to override default cname process callback attributes
authorJürg Billeter <j@bitron.ch>
Tue, 24 Apr 2007 09:32:32 +0000 (09:32 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Tue, 24 Apr 2007 09:32:32 +0000 (09:32 +0000)
2007-04-24  Jürg Billeter  <j@bitron.ch>

* vala/valacallback.vala: add possibility to override default cname
* vala/valaattributeprocessor.vala: process callback attributes
* vala/valainterfacewriter.vala: cleanup code to write identifiers

svn path=/trunk/; revision=287

vala/ChangeLog
vala/vala/valaattributeprocessor.vala
vala/vala/valacallback.vala
vala/vala/valainterfacewriter.vala

index c1b0f7c..ccfa105 100644 (file)
@@ -1,3 +1,9 @@
+2007-04-24  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valacallback.vala: add possibility to override default cname
+       * vala/valaattributeprocessor.vala: process callback attributes
+       * vala/valainterfacewriter.vala: cleanup code to write identifiers
+
 2007-04-18  Jürg Billeter  <j@bitron.ch>
 
        * vala/valacodegenerator.vala: use const types where appropriate,
index 9d1ded9..f1fa963 100644 (file)
@@ -68,6 +68,10 @@ public class Vala.AttributeProcessor : CodeVisitor {
                prop.process_attributes ();
        }
 
+       public override void visit_begin_callback (Callback! cb) {
+               cb.process_attributes ();
+       }
+
        public override void visit_field (Field! f) {
                f.process_attributes ();
        }
index e2af311..c563622 100644 (file)
@@ -154,6 +154,32 @@ public class Vala.Callback : DataType {
                return cname;
        }
 
+       /**
+        * Sets the name of this callback as it is used in C code.
+        *
+        * @param cname the name to be used in C code
+        */
+       public void set_cname (string cname) {
+               this.cname = cname;
+       }
+
+       private void process_ccode_attribute (Attribute a) {
+               if (a.has_argument ("cname")) {
+                       set_cname (a.get_string ("cname"));
+               }
+       }
+       
+       /**
+        * Process all associated attributes.
+        */
+       public void process_attributes () {
+               foreach (Attribute a in attributes) {
+                       if (a.name == "CCode") {
+                               process_ccode_attribute (a);
+                       }
+               }
+       }
+
        public override bool is_reference_type () {
                return false;
        }
index 4204ab9..dbee461 100644 (file)
@@ -272,11 +272,6 @@ public class Vala.InterfaceWriter : CodeVisitor {
                }
                        
                write_string (" ");
-               if (f.name == "base" || f.name == "callback" ||
-                   f.name == "flags" || f.name == "in" ||
-                   f.name == "out") {
-                       write_string ("@");
-               }
                write_identifier (f.name);
                write_string (";");
                write_newline ();
@@ -323,10 +318,6 @@ public class Vala.InterfaceWriter : CodeVisitor {
                        }
                        
                        write_string (" ");
-                       if (param.name == "callback" || param.name == "flags" ||
-                           param.name == "out" || param.name == "set") {
-                               write_string ("@");
-                       }
                        write_identifier (param.name);
                        
                        if (param.default_expression != null) {
@@ -437,12 +428,6 @@ public class Vala.InterfaceWriter : CodeVisitor {
                        }
 
                        write_string (" ");
-                       if (m.name == "class" || m.name == "construct" ||
-                           m.name == "foreach" || m.name == "get" ||
-                           m.name == "lock" || m.name == "ref" ||
-                           m.name == "set") {
-                               write_string ("@");
-                       }
                        write_identifier (m.name);
                }
                
@@ -560,7 +545,10 @@ public class Vala.InterfaceWriter : CodeVisitor {
        }
        
        private void write_identifier (string! s) {
-               if (s == "namespace") {
+               if (s == "base" || s == "callback" || s == "class" ||
+                   s == "construct" || s == "flags" || s == "foreach" ||
+                   s == "in" || s == "interface" || s == "lock" ||
+                   s == "namespace" || s == "out" || s == "ref") {
                        stream.putc ('@');
                }
                write_string (s);