On 05/03/2011 12:11, Iain Buclaw wrote:
Is this behaviour correct? Should it even be legal to blindly allow access to
members/fields via the .outer context pointer (that may not even be there as
shown in this instance)?

class Outer
{
     int w = 3;
     void method()
     {
         int x = 4;
         new class Object
         {
             this()
             {
                 assert(w == 3);              // Passes
                 //assert(x == 4);              // Passes
                 assert(this.outer.w == 3);   // Fails if above is uncommented
<snip>

There's clearly a bug at work here. It seems that there's a clash between two context pointers: this and the enclosing function.

The compiler should either distinguish between the two or reject the code.

I'll investigate.

Stewart.

Reply via email to