From: Rico Tzschichholz Date: Wed, 28 Nov 2018 12:53:29 +0000 (+0100) Subject: vala: Don't emit member access of assignments on static properties X-Git-Tag: 0.43.1~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90a3f9df42bc084a4ac88e154b1e1200c09a1945;p=thirdparty%2Fvala.git vala: Don't emit member access of assignments on static properties Fixes https://gitlab.gnome.org/GNOME/vala/issues/573 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 2fbed86b6..34614c934 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -265,6 +265,7 @@ TESTS = \ objects/properties.vala \ objects/property-notify.vala \ objects/property-read-only-auto.vala \ + objects/property-static.vala \ objects/regex.vala \ objects/signals.vala \ objects/signals-delegate.vala \ diff --git a/tests/objects/property-static.vala b/tests/objects/property-static.vala new file mode 100644 index 000000000..b5596bd6b --- /dev/null +++ b/tests/objects/property-static.vala @@ -0,0 +1,41 @@ +class Foo { + static int _bar; + static int _baz; + + public static int bar { + get { assert_not_reached (); } + set { _bar = value; assert (_bar == 23); } + } + + public static int baz { + set { _baz = value; assert (_baz == 42); } + } + + public static int boo { set; } +} + +struct Bar { + static int _bar; + static int _baz; + + public static int bar { + get { assert_not_reached (); } + set { _bar = value; assert (_bar == 23); } + } + + public static int baz { + set { _baz = value; assert (_baz == 42); } + } + + public static int boo { set; } +} + +void main () { + Foo.bar = 23; + Foo.baz = 42; + Foo.boo = 4711; + + Bar.bar = 23; + Bar.baz = 42; + Bar.boo = 4711; +} diff --git a/vala/valaassignment.vala b/vala/valaassignment.vala index a6bb74f96..f672b8177 100644 --- a/vala/valaassignment.vala +++ b/vala/valaassignment.vala @@ -467,7 +467,7 @@ public class Vala.Assignment : Expression { if (instance && ma.inner != null && property != null) { ma.inner.emit (codegen); - } else { + } else if (property == null) { // always process full lvalue // current codegen depends on it // should be removed when moving codegen from