From: Luca Bruno Date: Sun, 29 Jan 2012 12:55:59 +0000 (+0100) Subject: codegen: Fix getting NoAccessorMethod properties of real struct type X-Git-Tag: 0.15.2~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d359c4418941f5f85f029be04c0d24e3c435865;p=thirdparty%2Fvala.git codegen: Fix getting NoAccessorMethod properties of real struct type --- diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index 4a0caa18e..860ffb46e 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -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); diff --git a/tests/objects/properties.vala b/tests/objects/properties.vala index 78f17a7c9..b0518256e 100644 --- a/tests/objects/properties.vala +++ b/tests/objects/properties.vala @@ -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; } }