From: Jürg Billeter Date: Fri, 8 Jan 2010 20:22:09 +0000 (+0100) Subject: Fix nullable struct properties X-Git-Tag: 0.7.10~121 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7cd9bc328dc3ec3b555a6ea9d2562877beef4708;p=thirdparty%2Fvala.git Fix nullable struct properties Fixes bug 606202. --- diff --git a/codegen/valaccodeassignmentmodule.vala b/codegen/valaccodeassignmentmodule.vala index 451d41107..80be69cf8 100644 --- a/codegen/valaccodeassignmentmodule.vala +++ b/codegen/valaccodeassignmentmodule.vala @@ -55,7 +55,7 @@ internal class Vala.CCodeAssignmentModule : CCodeMemberAccessModule { CCodeExpression cexpr = (CCodeExpression) assignment.right.ccodenode; if (!prop.no_accessor_method) { - if (prop.property_type.is_real_struct_type ()) { + if (prop.property_type.is_real_non_null_struct_type ()) { cexpr = get_address_of_expression (assignment.right, cexpr); } } diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index 9e242d08e..b4984402a 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -275,7 +275,7 @@ internal class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { // Property access to real struct types is handled differently // The value is returned by out parameter - if (base_property.property_type.is_real_struct_type ()) { + if (base_property.property_type.is_real_non_null_struct_type ()) { var ccomma = new CCodeCommaExpression (); var temp_var = get_temp_variable (base_property.get_accessor.value_type); var ctemp = get_variable_cexpression (temp_var.name); diff --git a/tests/Makefile.am b/tests/Makefile.am index 9698cfa37..e9628cd96 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -43,6 +43,7 @@ TESTS = \ structs/bug530605.vala \ structs/bug583603.vala \ structs/bug595587.vala \ + structs/bug606202.vala \ delegates/delegates.vala \ delegates/bug595610.vala \ delegates/bug595639.vala \ diff --git a/tests/structs/bug606202.vala b/tests/structs/bug606202.vala new file mode 100644 index 000000000..78beb5b8d --- /dev/null +++ b/tests/structs/bug606202.vala @@ -0,0 +1,18 @@ +struct Foo { + string s; + + public Foo (string s) { + this.s = s; + } +} + +class Bar : Object { + public Foo? foo { get; set; } +} + +void main () { + var bar = new Bar (); + var foo = Foo ("hello"); + bar.foo = foo; + assert (bar.foo.s == "hello"); +}