From: Jürg Billeter Date: Tue, 5 Jun 2007 11:05:50 +0000 (+0000) Subject: correct invocation of setter method of inherited properties, fixes bug X-Git-Tag: VALA_0_1_0~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=316765b7361209cef6c042aca4e7ff6ad4ca0385;p=thirdparty%2Fvala.git correct invocation of setter method of inherited properties, fixes bug 2007-06-05 Jürg Billeter * 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 --- diff --git a/ChangeLog b/ChangeLog index c3bfb18e1..6a9940861 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-06-05 Jürg Billeter + + * 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 * vala/valainvocationexpression.vala: support storing sizes of array diff --git a/gobject/valacodegeneratorassignment.vala b/gobject/valacodegeneratorassignment.vala index d51470c58..1c2b7d30f 100644 --- a/gobject/valacodegeneratorassignment.vala +++ b/gobject/valacodegeneratorassignment.vala @@ -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; } diff --git a/gobject/valacodegeneratormemberaccess.vala b/gobject/valacodegeneratormemberaccess.vala index 0e1c4b90c..1d3e0de95 100644 --- a/gobject/valacodegeneratormemberaccess.vala +++ b/gobject/valacodegeneratormemberaccess.vala @@ -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) {