ccall.add_argument ((CCodeExpression) get_ccodenode (instance));
var cexpr = get_cvalue_ (value);
if (prop.property_type.is_real_non_null_struct_type ()) {
+ //TODO Make use of get_lvalue (value)
+ if (!(cexpr is CCodeConstant || cexpr is CCodeIdentifier)) {
+ var temp_value = store_temp_value (value, instance);
+ cexpr = get_cvalue_ (temp_value);
+ }
cexpr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, cexpr);
}
ccall.add_argument (cexpr);
var cexpr = get_cvalue_ (value);
if (prop.property_type.is_real_non_null_struct_type ()) {
+ //TODO Make use of get_lvalue (value)
+ if (!(cexpr is CCodeConstant || cexpr is CCodeIdentifier)) {
+ var temp_value = store_temp_value (value, instance);
+ cexpr = get_cvalue_ (temp_value);
+ }
cexpr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, cexpr);
}
objects/property-construct-only-write.test \
objects/property-construct-only-write-foreign.test \
objects/property-delegate-owned.vala \
+ objects/property-real-struct-assignment.vala \
objects/property-static.vala \
objects/regex.vala \
objects/signals.vala \
--- /dev/null
+struct Foo {
+ string s;
+}
+
+Foo? get_foo () {
+ return { "foo" };
+}
+
+class Manam : Object {
+ public virtual Foo faz { get; set; }
+}
+
+class Bar : Manam {
+ public Foo foo { get; set; }
+
+ public Bar () {
+ {
+ this.foo = get_foo ();
+ }
+ {
+ base.faz = get_foo ();
+ }
+ {
+ this.foo = (!) get_foo ();
+ }
+ {
+ base.faz = (!) get_foo ();
+ }
+ {
+ this.foo = (Foo) get_foo ();
+ }
+ {
+ base.faz = (Foo) get_foo ();
+ }
+ {
+ var f = get_foo ();
+ this.foo = (!) f;
+ }
+ {
+ var f = get_foo ();
+ base.faz = (!) f;
+ }
+ {
+ var f = get_foo ();
+ this.foo = (Foo) f;
+ }
+ {
+ var f = get_foo ();
+ base.faz = (Foo) f;
+ }
+ }
+}
+
+void main() {
+ var bar = new Bar ();
+}