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

Reply via email to