On Mon, 28 Jan 2013 09:00:15 -0500, Maxim Fomin <[email protected]>
wrote:
On Monday, 28 January 2013 at 12:31:35 UTC, Jacob Carlborg wrote:
On 2013-01-28 12:44, Robert wrote:
Having the compiler lower the following:
@property int a;
to
private int __a;
@property int a() {
return __a;
}
@property int a(int new_a) {
__a=new_a;
return __a;
}
This can be done without compiler help. But we need @property as a
primitive to allow it.
I would love that. But the setter should return void and the compiler
should to property rewrites.
Returning void instead of int in the example break assignment chaining a
= b = c. Besides, how such implicitly defined functions may call user
defined code (check input validity, call events, etc.)?
I think Jacob's point is that a = b = c would lower to:
b = c;
a = b;
But I think it would be wasteful in the given case. __a is already in the
register, I think actually the return __a is a noop.
In other cases, where the property value may be a large struct or whatnot,
not returning the new value from a setter would make sense.
It would be nice if the compiler made the right choice depending on
whether you returned a value from the property or not.
-Steve