www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 7077] New: mixin statements can invade the enclosing scope

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7077

           Summary: mixin statements can invade the enclosing scope
           Product: D
           Version: D2
          Platform: Other
        OS/Version: All
            Status: NEW
          Keywords: accepts-invalid, rejects-valid
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: timon.gehr gmx.ch



compiles, should not compile:

void main(){
    if(0) mixin(q{auto x = 2;});
    writeln(x);
}

does not compile, should compile:

void main(){
    if(0) mixin(q{auto x = 2;});
    auto x = 1;
}

The workaround is to put {...} around the mixin statement.


(For comparison, this does not compile:

void main(){
    if(0) auto x = 2;                                               
    writeln(x);
}

And this does compile:

void main(){
    if(0) auto x = 2;
    auto x = 1;
})

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 07 2011
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7077


hsteoh quickfur.ath.cx changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hsteoh quickfur.ath.cx



I thought the whole point of mixins is to insert declarations into the
enclosing scope? Otherwise it would break mixins that insert, e.g., member
declarations into classes.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 28 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7077


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |pull
                 CC|                            |yebblies gmail.com



Nah, `mixin("X")` should behave as close as possible to `X`, and here it is
being injected into the wrong scope.  The bug is actually IfStatement not
creating a proper scope for the if-body.

https://github.com/D-Programming-Language/dmd/pull/2402

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 29 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7077




Commits pushed to master at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/1b3b8611661dd86190dca151bc8106fc694c3ac1
Fix Issue 7077 - mixin statements can invade the enclosing scope

The if body should always be inside its own scope

https://github.com/D-Programming-Language/dmd/commit/f1c47fbbb2688888d1c4f001d8d338a885704bfe


Fix Issue 7077 - mixin statements can invade the enclosing scope

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 29 2013
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7077


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Version|D2                          |D1
            Summary|mixin statements can invade |(D1 only) mixin statements
                   |the enclosing scope         |can invade the enclosing
                   |                            |scope



Still exists in D1

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 29 2013