Summary: expressions starting with string mixin don't parse
           Product: D
           Version: 1.040
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD

void main()
int s;
mixin("s") = 5;

Line 4: found '=' when expecting ';'

this should work:

quoting Ary from the NG thread:

Yes, at that point the parser is parsing statements, so if it finds a 
"mixin(...)" it turns it into a statement.

I'm thinking about how to fix this. I think the parser should peek the 
next token after the closing parenthesis. If it's a semicolon, then 
treat it as a statement-mixin. Else, just invoke parseAssignExp and 
create a new ExpStatement.

I modified this in Descent and it seems to work. :-)

Here's the code (in Java, but the idea is simple to translate to C++):

// inside Parser::parseStatement
case TOKmixin: {
     Dsymbol d;
     t = peek(token);
     if (t.value == TOKlparen)
         if (peekPastParen(t).value != TOKsemicolon) {
             Expression e = parseAssignExp();
             s = new ExpStatement(loc(), e);
         } else {
             // mixin(string)
             Expression e = parseAssignExp();
             s = newCompileStatement(loc(), e);
     } else {
         d = parseMixin();
         s = newDeclarationStatement(loc(), d);

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to