summaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
authorLuca Bruno <lucabru@src.gnome.org>2013-06-21 23:31:31 +0200
committerLuca Bruno <lucabru@src.gnome.org>2013-06-21 23:38:00 +0200
commitf6146eaea2793aadcb2ad597a67ac6c1f736282c (patch)
tree681bb500cd03bd2b74330dfdcad9650c0f422be5 /codegen
parent6747b2f732b1a89f83dba500a10c701cf272b3e0 (diff)
downloadvala-f6146eaea2793aadcb2ad597a67ac6c1f736282c.tar.gz
Fix base access of properties
Fixes another bug in 702736
Diffstat (limited to 'codegen')
-rw-r--r--codegen/valaccodememberaccessmodule.vala12
1 files changed, 9 insertions, 3 deletions
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index e9aefd5c9..6becb1976 100644
--- a/codegen/valaccodememberaccessmodule.vala
+++ b/codegen/valaccodememberaccessmodule.vala
@@ -167,16 +167,22 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
}
if (expr.inner is BaseAccess) {
+ var base_prop = prop;
if (prop.base_property != null) {
- var base_class = (Class) prop.base_property.parent_symbol;
+ base_prop = prop.base_property;
+ } else if (prop.base_interface_property != null) {
+ base_prop = prop.base_interface_property;
+ }
+ if (base_prop.parent_symbol is Class) {
+ var base_class = (Class) base_prop.parent_symbol;
var vcast = new CCodeFunctionCall (new CCodeIdentifier ("%s_CLASS".printf (get_ccode_upper_case_name (base_class, null))));
vcast.add_argument (new CCodeIdentifier ("%s_parent_class".printf (get_ccode_lower_case_name (current_class, null))));
var ccall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (vcast, "get_%s".printf (prop.name)));
ccall.add_argument (get_cvalue (expr.inner));
set_cvalue (expr, ccall);
- } else if (prop.base_interface_property != null) {
- var base_iface = (Interface) prop.base_interface_property.parent_symbol;
+ } else if (base_prop.parent_symbol is Interface) {
+ var base_iface = (Interface) base_prop.parent_symbol;
string parent_iface_var = "%s_%s_parent_iface".printf (get_ccode_lower_case_name (current_class), get_ccode_lower_case_name (base_iface));
var ccall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (new CCodeIdentifier (parent_iface_var), "get_%s".printf (prop.name)));