]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
correct invocation of setter method of inherited properties, fixes bug
authorJürg Billeter <j@bitron.ch>
Tue, 5 Jun 2007 11:05:50 +0000 (11:05 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Tue, 5 Jun 2007 11:05:50 +0000 (11:05 +0000)
2007-06-05  Jürg Billeter  <j@bitron.ch>

* gobject/valacodegeneratorassignment.vala: correct invocation of setter
  method of inherited properties, fixes bug 443527
* gobject/valacodegeneratormemberaccess.vala: remove outdated comment

svn path=/trunk/; revision=320

ChangeLog
gobject/valacodegeneratorassignment.vala
gobject/valacodegeneratormemberaccess.vala

index c3bfb18e1b501ce6ed916328c2f81f029d566758..6a9940861d0683fc1eb8005ef12cbf7bbdda78e8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-06-05  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valacodegeneratorassignment.vala: correct invocation of setter
+         method of inherited properties, fixes bug 443527
+       * gobject/valacodegeneratormemberaccess.vala: remove outdated comment
+
 2007-06-05  Jürg Billeter  <j@bitron.ch>
 
        * vala/valainvocationexpression.vala: support storing sizes of array
index d51470c582fc7f84a94e8cb81bd276d829bc2f81..1c2b7d30f5b0edb9f46dfe612b6eff22cdea2a37 100644 (file)
@@ -261,8 +261,15 @@ public class Vala.CodeGenerator {
                var cl = (Class) prop.symbol.parent_symbol.node;
                var set_func = "g_object_set";
                
+               var base_property = prop;
                if (!prop.no_accessor_method) {
-                       set_func = "%s_set_%s".printf (cl.get_lower_case_cname (null), prop.name);
+                       if (prop.base_property != null) {
+                               base_property = prop.base_property;
+                       } else if (prop.base_interface_property != null) {
+                               base_property = prop.base_interface_property;
+                       }
+                       var base_property_type = (DataType) base_property.symbol.parent_symbol.node;
+                       set_func = "%s_set_%s".printf (base_property_type.get_lower_case_cname (null), base_property.name);
                }
                
                var ccall = new CCodeFunctionCall (new CCodeIdentifier (set_func));
@@ -274,16 +281,16 @@ public class Vala.CodeGenerator {
                if (ma.inner == null) {
                        instance = new CCodeIdentifier ("self");
                        /* require casts for inherited properties */
-                       req_cast = (prop.symbol.parent_symbol != current_type_symbol);
+                       req_cast = (base_property.symbol.parent_symbol != current_type_symbol);
                } else {
                        instance = (CCodeExpression) ma.inner.ccodenode;
                        /* require casts if the type of the used instance is
                         * different than the type which declared the property */
-                       req_cast = prop.symbol.parent_symbol.node != ma.inner.static_type.data_type;
+                       req_cast = base_property.symbol.parent_symbol.node != ma.inner.static_type.data_type;
                }
                
                if (req_cast && ((DataType) prop.symbol.parent_symbol.node).is_reference_type ()) {
-                       var ccast = new CCodeFunctionCall (new CCodeIdentifier (((DataType) prop.symbol.parent_symbol.node).get_upper_case_cname (null)));
+                       var ccast = new CCodeFunctionCall (new CCodeIdentifier (((DataType) base_property.symbol.parent_symbol.node).get_upper_case_cname (null)));
                        ccast.add_argument (instance);
                        instance = ccast;
                }
index 0e1c4b90c76e3770a954615ec1929eab5cbf07b5..1d3e0de95c8f37b344ca46f47262565ad565003b 100644 (file)
@@ -95,10 +95,7 @@ public class Vala.CodeGenerator {
                                var base_property_type = (DataType) base_property.symbol.parent_symbol.node;
                                var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_get_%s".printf (base_property_type.get_lower_case_cname (null), base_property.name)));
                                
-                               /* explicitly use strong reference as ccast
-                                * gets unrefed at the end of the inner block
-                                */
-                               ref CCodeExpression typed_pub_inst = pub_inst;
+                               CCodeExpression typed_pub_inst = pub_inst;
 
                                /* cast if necessary */
                                if (base_property_type != base_type) {