]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix getting NoAccessorMethod properties of real struct type
authorLuca Bruno <lucabru@src.gnome.org>
Sun, 29 Jan 2012 12:55:59 +0000 (13:55 +0100)
committerLuca Bruno <lucabru@src.gnome.org>
Sun, 29 Jan 2012 12:55:59 +0000 (13:55 +0100)
codegen/valaccodememberaccessmodule.vala
tests/objects/properties.vala

index 4a0caa18e9c77703c34a8b8fcb9c1875f56bf155..860ffb46eb09ff387bc023dab779488956263cd7 100644 (file)
@@ -259,6 +259,11 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                        }
                                }
 
+                               if (expr.value_type.is_real_struct_type ()) {
+                                       // gobject allocates structs on heap
+                                       expr.value_type.nullable = true;
+                               }
+
                                var temp_var = get_temp_variable (expr.value_type);
                                var ctemp = get_variable_cexpression (temp_var.name);
                                emit_temp_var (temp_var);
index 78f17a7c9d88f52f03a0cd798b3541c35015d283..b0518256e11a49be55bd065897ca68fd65a1b5bf 100644 (file)
@@ -2,6 +2,15 @@ using GLib;
 
 public delegate void Delegate ();
 
+public struct RealStruct {
+       public int field;
+}
+
+public class NonPrivAccess : Object {
+       [NoAccessorMethod]
+       public RealStruct real_struct { get; set; }
+}
+
 public class Sample : Object {
        private string automatic { get; set; }
 
@@ -62,6 +71,10 @@ public class Sample : Object {
        
                stdout.printf (" 3\n");
 
+               var nonpriv = new NonPrivAccess ();
+               nonpriv.real_struct = { 10 };
+               assert (nonpriv.real_struct.field == 10);
+
                return 0;
        }
 }