Mercurial > projects > dil
changeset 99:6b8c248f5911
- Added member type to classes CastExpression and TypeidExpression.
- Parsing CastExpression and TypeDotIdExpression in parseUnaryExpression() correctly.
- Parsing type for TypeidExpression.
- Parsing declarator in parseParameters().
author | aziz |
---|---|
date | Sat, 07 Jul 2007 12:30:01 +0000 |
parents | aec3b16144fe |
children | 538e8b546669 |
files | trunk/src/Expressions.d trunk/src/Parser.d |
diffstat | 2 files changed, 31 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/Expressions.d Sat Jul 07 10:51:00 2007 +0000 +++ b/trunk/src/Expressions.d Sat Jul 07 12:30:01 2007 +0000 @@ -320,8 +320,12 @@ class CastExpression : UnaryExpression { - this(Expression e) - { super(e); } + Type type; + this(Expression e, Type type) + { + super(e); + this.type = type; + } } class AnonClassExpression : UnaryExpression @@ -501,8 +505,11 @@ class TypeidExpression : Expression { - this() - {} + Type type; + this(Type type) + { + this.type = type; + } } class IsExpression : Expression
--- a/trunk/src/Parser.d Sat Jul 07 10:51:00 2007 +0000 +++ b/trunk/src/Parser.d Sat Jul 07 12:30:01 2007 +0000 @@ -320,12 +320,24 @@ e = new DeleteExpression(parseUnaryExpression()); break; case T.Cast: - nT(); - // Type type = parseType(); - e = new CastExpression(parseUnaryExpression() /*, type*/); + requireNext(T.LParen); + auto type = parseType(); + require(T.RParen); + e = new CastExpression(parseUnaryExpression(), type); break; case T.LParen: // parse ( Type ) . Identifier + auto type = parseType(); + require(T.RParen); + require(T.Dot); + string ident; + if (token.type != T.Identifier) + { + ident = token.srcText; + } + else + errorIfNot(T.Identifier); + e = new TypeDotIdExpression(type, ident); break; default: e = parsePostExpression(parsePrimaryExpression()); @@ -542,7 +554,9 @@ break; case T.Typeid: requireNext(T.LParen); - e = new TypeidExpression(); + auto type = parseType(); + require(T.RParen); + e = new TypeidExpression(type); break; case T.Is: // e = new IsExpression(); @@ -780,9 +794,9 @@ args ~= new Argument(StorageClass.Variadic, null, null, null); break; default: - Type type = parseBasicType(); string ident; - // parseDeclarator() + auto type = parseDeclarator(ident); + Expression assignExpr; if (token.type == T.Assign) {