+2007-11-10 Jürg Billeter <j@bitron.ch>
+
+ * gobject/valaccodegenerator.vala,
+ gobject/valaccodegeneratormemberaccess.vala: fix code generation for
+ private fields in types not based on GTypeInstance
+
2007-11-06 Jürg Billeter <j@bitron.ch>
* vapi/packages/gio-2.0/gio-2.0.gi, vapi/gio-2.0.vapi: updated to gio
}
}
}
-
+
public override void visit_field (Field! f) {
f.accept_children (this);
+ var cl = f.parent_symbol as Class;
+ bool is_gtypeinstance = (cl != null && cl.is_subtype_of (gtypeinstance_type));
+
CCodeExpression lhs = null;
CCodeStruct st = null;
}
} else if (f.access == SymbolAccessibility.PRIVATE) {
if (f.instance) {
- st = instance_priv_struct;
- lhs = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), "priv"), f.get_cname ());
+ if (is_gtypeinstance) {
+ st = instance_priv_struct;
+ lhs = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), "priv"), f.get_cname ());
+ } else {
+ st = instance_struct;
+ lhs = new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), f.get_cname ());
+ }
} else {
var cdecl = new CCodeDeclaration (f.type_reference.get_cname ());
var var_decl = new CCodeVariableDeclarator (f.get_cname ());
instance_target_type.data_type = (DataType) f.parent_symbol;
CCodeExpression typed_inst = get_implicit_cast_expression (pub_inst, instance_expression_type, instance_target_type);
+ bool is_gtypeinstance = (instance_target_type.data_type.is_subtype_of (gtypeinstance_type));
+
CCodeExpression inst;
- if (f.access == SymbolAccessibility.PRIVATE) {
+ if (is_gtypeinstance && f.access == SymbolAccessibility.PRIVATE) {
inst = new CCodeMemberAccess.pointer (typed_inst, "priv");
} else {
inst = typed_inst;
}
- if (((DataType) f.parent_symbol).is_reference_type ()) {
+ if (instance_target_type.data_type.is_reference_type ()) {
expr.ccodenode = new CCodeMemberAccess.pointer (inst, f.get_cname ());
} else {
expr.ccodenode = new CCodeMemberAccess (inst, f.get_cname ());