Commit 2f0a36cd authored by Jürg Billeter's avatar Jürg Billeter Committed by Jürg Billeter

Use correct accessor cname for interface implementations of properties

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
parent 7219ffda
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:
......
......@@ -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
......
......@@ -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))));
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment