# HG changeset patch # User Aziz K?ksal # Date 1200102917 -3600 # Node ID 20dddcc5462164ba1f141c1f499567e977f60512 # Parent 2feb88f5c8671e5cbd64e0a0acde6d2634973bb0 Fixed parsing of AsmPostBracketExpression. diff -r 2feb88f5c867 -r 20dddcc54621 trunk/src/dil/ast/Expressions.d --- a/trunk/src/dil/ast/Expressions.d Sat Jan 12 01:56:04 2008 +0100 +++ b/trunk/src/dil/ast/Expressions.d Sat Jan 12 02:55:17 2008 +0100 @@ -1140,10 +1140,12 @@ class AsmPostBracketExpression : UnaryExpression { - this(Expression e) + Expression e2; /// Expression in brackets: e [ e2 ] + this(Expression e, Expression e2) { super(e); mixin(set_kind); + addChild(e2); } } diff -r 2feb88f5c867 -r 20dddcc54621 trunk/src/dil/parser/Parser.d --- a/trunk/src/dil/parser/Parser.d Sat Jan 12 01:56:04 2008 +0100 +++ b/trunk/src/dil/parser/Parser.d Sat Jan 12 02:55:17 2008 +0100 @@ -2336,15 +2336,9 @@ // Identifier Expression[] es; if (token.type != T.Semicolon) - { - while (1) - { + do es ~= parseAsmExpression(); - if (token.type != T.Comma) - break; - nT(); - } - } + while (skipped(T.Comma)) require(T.Semicolon); s = new AsmInstruction(ident, es); break; @@ -2562,11 +2556,9 @@ { auto begin = token; auto e = parseAsmUnaryExpression(); - while (token.type == T.LBracket) + while (skipped(T.LBracket)) { - nT(); - e = parseAsmExpression(); - e = new AsmPostBracketExpression(e); + e = new AsmPostBracketExpression(e, parseAsmExpression()); require(T.RBracket); set(e, begin); } @@ -2623,6 +2615,11 @@ case T.Dot: nT(); e = new ModuleScopeExpression(parseIdentifierExpression()); + while (skipped(TOK.Dot)) + { + e = new DotExpression(e, parseIdentifierExpression()); + set(e, begin); + } break; default: LparseAsmPrimaryExpression: @@ -3174,7 +3171,7 @@ auto begin = token; auto ident = requireIdentifier(MSG.ExpectedAnIdentifier); Expression e; - if (token.type == T.Not && peekNext() == T.LParen) + if (token.type == T.Not /+&& peekNext() == T.LParen+/) { // Identifier !( TemplateArguments ) nT(); // Skip !. auto tparams = parseTemplateArguments();