Mercurial > projects > dil
changeset 243:461e544ebb53
- Added method requireId().
- In parseUnaryExpression(): moved nT() out of some case blocks because it's common. Only two cases have to skip nT() with a goto.
- Changed type of member ident of TypeDotIdExpression to Token*.
author | aziz |
---|---|
date | Wed, 01 Aug 2007 11:12:00 +0000 |
parents | 7ec7ad8df9da |
children | 829fdb2e2915 |
files | trunk/src/Expressions.d trunk/src/Parser.d |
diffstat | 2 files changed, 29 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/Expressions.d Wed Aug 01 10:12:01 2007 +0000 +++ b/trunk/src/Expressions.d Wed Aug 01 11:12:00 2007 +0000 @@ -569,8 +569,8 @@ class TypeDotIdExpression : Expression { Type type; - string ident; - this(Type type, string ident) + Token* ident; + this(Type type, Token* ident) { this.type = type; this.ident = ident;
--- a/trunk/src/Parser.d Wed Aug 01 10:12:01 2007 +0000 +++ b/trunk/src/Parser.d Wed Aug 01 11:12:00 2007 +0000 @@ -2604,39 +2604,39 @@ switch (token.type) { case T.AndBinary: - nT(); e = new AddressExpression(parseUnaryExpression()); + e = new AddressExpression(parseUnaryExpression()); break; case T.PlusPlus: - nT(); e = new PreIncrExpression(parseUnaryExpression()); + e = new PreIncrExpression(parseUnaryExpression()); break; case T.MinusMinus: - nT(); e = new PreDecrExpression(parseUnaryExpression()); + e = new PreDecrExpression(parseUnaryExpression()); break; case T.Mul: - nT(); e = new DerefExpression(parseUnaryExpression()); + e = new DerefExpression(parseUnaryExpression()); break; case T.Minus: case T.Plus: - nT(); e = new SignExpression(parseUnaryExpression()); + e = new SignExpression(parseUnaryExpression()); break; case T.Not: - nT(); e = new NotExpression(parseUnaryExpression()); + e = new NotExpression(parseUnaryExpression()); break; case T.Tilde: - nT(); e = new CompExpression(parseUnaryExpression()); + e = new CompExpression(parseUnaryExpression()); break; case T.New: e = parseNewExpression(); return e; case T.Delete: - nT(); e = new DeleteExpression(parseUnaryExpression()); + e = new DeleteExpression(parseUnaryExpression()); break; case T.Cast: requireNext(T.LParen); auto type = parseType(); require(T.RParen); e = new CastExpression(parseUnaryExpression(), type); - break; + goto Lset; case T.LParen: // ( Type ) . Identifier Type parseType_() @@ -2651,10 +2651,9 @@ auto type = try_(parseType_(), success); if (success) { - // TODO: save Token instead of string - string ident = requireIdentifier(); + auto ident = requireId(); e = new TypeDotIdExpression(type, ident); - break; + goto Lset; } goto default; default: @@ -2662,6 +2661,8 @@ return e; } assert(e !is null); + nT(); + Lset: set(e, begin); return e; } @@ -2990,7 +2991,7 @@ T.Cfloat, T.Cdouble, T.Creal, T.Void: auto type = new Type(token.type); requireNext(T.Dot); - auto ident = requireIdentifier(); + auto ident = requireId(); e = new TypeDotIdExpression(type, ident); break; @@ -3527,6 +3528,19 @@ return identifier; } + Token* requireId() + { + if (token.type == T.Identifier) + { + auto id = token; + nT(); + return id; + } + else + error(MID.ExpectedButFound, "Identifier", token.srcText); + return null; + } + void error(MID id, ...) { if (trying)