[vala/staging: 16/16] codegen: Fix getting NoAccessorMethod properties of real struct type
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging: 16/16] codegen: Fix getting NoAccessorMethod properties of real struct type
- Date: Sun, 29 Jan 2012 12:57:55 +0000 (UTC)
commit 2d359c4418941f5f85f029be04c0d24e3c435865
Author: Luca Bruno <lucabru src gnome org>
Date: Sun Jan 29 13:55:59 2012 +0100
codegen: Fix getting NoAccessorMethod properties of real struct type
codegen/valaccodememberaccessmodule.vala | 5 +++++
tests/objects/properties.vala | 13 +++++++++++++
2 files changed, 18 insertions(+), 0 deletions(-)
---
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index 4a0caa1..860ffb4 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 78f17a7..b051825 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;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]