]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Use correct accessor cname for interface implementations of properties
authorJürg Billeter <j@bitron.ch>
Fri, 26 Sep 2008 20:34:10 +0000 (20:34 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 26 Sep 2008 20:34:10 +0000 (20:34 +0000)
2008-09-26  Jürg Billeter  <j@bitron.ch>

* gobject/valaccodeclassbinding.vala:

Use correct accessor cname for interface implementations of
properties inherited from a base class,
based on patch by Florian Brosch, fixes bug 548895

svn path=/trunk/; revision=1787

ChangeLog
THANKS
gobject/valaccodeclassbinding.vala

index c11dcfffd0182c961a3d693248f392eef64b30db..32b9cc633ee231aca9249f78f1c39a59b3fd211e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-09-26  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodeclassbinding.vala:
+
+       Use correct accessor cname for interface implementations of
+       properties inherited from a base class,
+       based on patch by Florian Brosch, fixes bug 548895
+
 2008-09-26  Jürg Billeter  <j@bitron.ch>
 
        * gobject-introspection/scanner.c:
diff --git a/THANKS b/THANKS
index 99ab0fa36766fa47b04b6c69e13aa46fee07daac..e5b8b0db0601af85d1526f684db37885d2fc0408 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -2,6 +2,7 @@ The Vala team would like to thank the following contributors:
 
 Abderrahim Kitouni
 Alberto Ruiz
+Alexander Bokovoy
 Alexandre Moreira
 Alexey Lubimov
 Ali Sabil
@@ -23,6 +24,7 @@ Ed Schouten
 Emmanuele Bassi
 Étienne Bersac
 Evan Nemerson
+Florian Brosch
 Francisco Camenforte Torres
 Frederik
 Gabriel Falcão
index 3c1fec535337efc614326d70aebd8daf31887479..10461e80dad541b550d09570213b93cd793333b2 100644 (file)
@@ -563,9 +563,16 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
                                }
                                if (base_class != null && cl_method.parent_symbol != cl) {
                                        // method inherited from base class
-                                       
+
+                                       var base_method = cl_method;
+                                       if (cl_method.base_method != null) {
+                                               base_method = cl_method.base_method;
+                                       } else if (cl_method.base_interface_method != null) {
+                                               base_method = cl_method.base_interface_method;
+                                       }
+
                                        var ciface = new CCodeIdentifier ("iface");
-                                       init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ciface, m.vfunc_name), new CCodeIdentifier (cl_method.get_cname ()))));
+                                       init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ciface, m.vfunc_name), new CCodeIdentifier (base_method.get_cname ()))));
                                }
                        }
                }
@@ -611,15 +618,22 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
                        }
                        if (base_class != null && cl_prop.parent_symbol != cl) {
                                // property inherited from base class
-                               
+
+                               var base_property = cl_prop;
+                               if (cl_prop.base_property != null) {
+                                       base_property = cl_prop.base_property;
+                               } else if (cl_prop.base_interface_property != null) {
+                                       base_property = cl_prop.base_interface_property;
+                               }
+
                                var ciface = new CCodeIdentifier ("iface");
 
-                               if (prop.get_accessor != null) {
-                                       string cname = "%s_real_get_%s".printf (cl.get_lower_case_cname (null), prop.name);
+                               if (base_property.get_accessor != null) {
+                                       string cname = base_property.get_accessor.get_cname ();
                                        init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ciface, "get_%s".printf (prop.name)), new CCodeIdentifier (cname))));
                                }
-                               if (prop.set_accessor != null) {
-                                       string cname = "%s_real_set_%s".printf (cl.get_lower_case_cname (null), prop.name);
+                               if (base_property.set_accessor != null) {
+                                       string cname = base_property.set_accessor.get_cname ();
                                        init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ciface, "set_%s".printf (prop.name)), new CCodeIdentifier (cname))));
                                }
                        }