Mercurial > projects > dil
changeset 83:9e6d66f647c9
- Fix: IsExpression was created instead of IdentityExpression.
- Added code for parsing Slice- and IndexExpression.
author | aziz |
---|---|
date | Wed, 04 Jul 2007 23:00:01 +0000 |
parents | fc645fb2fe72 |
children | ac8d961d10d1 |
files | trunk/src/Expressions.d trunk/src/Parser.d |
diffstat | 2 files changed, 49 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/Expressions.d Wed Jul 04 22:19:01 2007 +0000 +++ b/trunk/src/Expressions.d Wed Jul 04 23:00:01 2007 +0000 @@ -80,7 +80,7 @@ { super(left, right, TOK.Equal); } } -class IdentExpression : CmpExpression +class IdentityExpression : CmpExpression { this(Expression left, Expression right, TOK tok) { super(left, right, tok); } @@ -334,14 +334,25 @@ } -class IndexExpression +class IndexExpression : UnaryExpression { - + Expression[] args; + this(Expression e, Expression[] args) + { + super(e); + this.args = args; + } } -class SliceExpression +class SliceExpression : UnaryExpression { - + Expression left, right; + this(Expression e, Expression left, Expression right) + { + super(e); + this.left = left; + this.right = right; + } } class AssertExpression
--- a/trunk/src/Parser.d Wed Jul 04 22:19:01 2007 +0000 +++ b/trunk/src/Parser.d Wed Jul 04 23:00:01 2007 +0000 @@ -200,7 +200,7 @@ operator = T.Identity; LNotIdentity: nT(); - e = new IsExpression(e, parseShiftExpression(), operator); + e = new IdentityExpression(e, parseShiftExpression(), operator); break; case T.LessEqual, T.Less, T.GreaterEqual, T.Greater, T.Unordered, T.UorE, T.UorG, T.UorGorE, @@ -301,6 +301,31 @@ break; case T.LBracket: // parse Slice- and IndexExpression + nT(); + if (lx.token.type == T.RBracket) + { + e = new SliceExpression(e, null, null); + nT(); + break; + } + Expression[] es = [parseAssignExpression()]; + if (lx.token.type == T.Slice) + { + nT(); + e = new SliceExpression(e, es[0], parseAssignExpression()); +// if (lx.token.type != T.RBracket) +// error() + nT(); + break; + } + else if (lx.token.type == T.Comma) + { + es ~= parseArgumentList(T.RBracket); + } + e = new IndexExpression(e, es); +// if (lx.token.type != T.RBracket) +// error(); + nT(); break; } } @@ -359,7 +384,13 @@ Expression parsePrimaryExpression() { - return null; + Expression e; + switch (lx.token.type) + { + case T.Identifier: + + } + return e; } Expression parseNewExpression(Expression e)