]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
fix code generation for private fields in types not based on GTypeInstance
authorJuerg Billeter <j@bitron.ch>
Sat, 10 Nov 2007 16:28:11 +0000 (16:28 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sat, 10 Nov 2007 16:28:11 +0000 (16:28 +0000)
2007-11-10  Juerg Billeter  <j@bitron.ch>

* gobject/valaccodegenerator.vala,
  gobject/valaccodegeneratormemberaccess.vala: fix code generation for
  private fields in types not based on GTypeInstance

svn path=/trunk/; revision=684

ChangeLog
gobject/valaccodegenerator.vala
gobject/valaccodegeneratormemberaccess.vala

index be62e863f67e618c190ba76eb5aa58295fa44e2b..e8c9893bb22108912f272c29b0e44b43a555a2ad 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+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
index 26082fd3feaa43ddc74527f80d2b0ca94b7821db..dbdbf2953747569efcec8baadcb70ec70014c7ab 100644 (file)
@@ -407,10 +407,13 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        }
                }
        }
-       
+
        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;
                
@@ -427,8 +430,13 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        }
                } 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 ());
index 267333f18a4d59b0061c1ea51381a55d751e3305..d658854095956fe150b1950b85e72fe3a99a6799 100644 (file)
@@ -63,13 +63,15 @@ public class Vala.CCodeGenerator {
                                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 ());