| [#683] | project: specification | priority: low | category: missing feature | |
|---|---|---|---|---|
| submitter | assigned to | status | date submitted | |
| Sean | Martin | won't fix | 2006-07-31 14:40:56.0 | |
| subject | setter access rights | |||
| code |
package test;
abstract class Test {
trait Foo {
var x0 : Int = 0;
protected def x = x0;
def x_=(x1 : Int) = x0 = x1;
}
def foo : Foo;
foo.x = 10;
// OK: foo.x_=(10);
} |
|||
| what happened | method x cannot be accessed in Test.this.Foo |
|||
| what expected | the x setter is public so should be accessible. Note that using the x_=(10) syntax avoids the type error, and making the x getter public also avoids the type error. | |||
| [back to overview] | ||||
| Martin edited on 2006-08-20 17:03:41.0 |
| The spec says that, to interprete foo.x = ..., we first interprete foo.x; if this is a getter, then we transform this to foo.x_=(...). This implies that if foo.x is not type correct, there's nothing we can do about it. So the compiler is in accordance with the spec, it seems to me. And I would be reluctant to generalize the spec any further at this point. |
| Sean edited on 2006-08-21 10:32:29.0 |
| Oh. I thought = ... was just syntactic sugar for _=(...). Guess it is much more complicated than that, sorry for the noise. |