Mercurial > projects > dil
changeset 377:906599374b69
- Added tparams member to IsExpression.
- Added code for parsing optional TemplateParameterList in IsExpression (D 2.0).
- Separated common code to parseTemplateParameterList_().
- Added method parseTemplateParameterList2().
- Fix in ctor of TemplateDeclaration: tparams can be null.
author | aziz |
---|---|
date | Sat, 08 Sep 2007 18:25:01 +0000 |
parents | 5ebe80ce84f2 |
children | ffb92a52ff44 |
files | trunk/src/dil/Declarations.d trunk/src/dil/Expressions.d trunk/src/dil/Parser.d |
diffstat | 3 files changed, 43 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/dil/Declarations.d Sat Sep 08 17:24:05 2007 +0000 +++ b/trunk/src/dil/Declarations.d Sat Sep 08 18:25:01 2007 +0000 @@ -464,7 +464,9 @@ { super(true); mixin(set_kind); - this.children = [cast(Node)tparams, decls]; + if (tparams) + this.children = [tparams]; + this.children ~= decls; this.name = name; this.tparams = tparams; this.decls = decls;
--- a/trunk/src/dil/Expressions.d Sat Sep 08 17:24:05 2007 +0000 +++ b/trunk/src/dil/Expressions.d Sat Sep 08 18:25:01 2007 +0000 @@ -819,17 +819,21 @@ Token* ident; Token* opTok, specTok; Type specType; - this(Type type, Token* ident, Token* opTok, Token* specTok, Type specType) + TemplateParameters tparams; // D 2.0 + this(Type type, Token* ident, Token* opTok, Token* specTok, Type specType, typeof(tparams) tparams) { mixin(set_kind); this.children = [type]; if (specType) this.children ~= specType; + if (tparams) + this.children ~= tparams; this.type = type; this.ident = ident; this.opTok = opTok; this.specTok = specTok; this.specType = specType; + this.tparams = tparams; } }
--- a/trunk/src/dil/Parser.d Sat Sep 08 17:24:05 2007 +0000 +++ b/trunk/src/dil/Parser.d Sat Sep 08 18:25:01 2007 +0000 @@ -3514,8 +3514,17 @@ } default: } + + TemplateParameters tparams; + version(D2) + { + // is ( Type Identifier : TypeSpecialization , TemplateParameterList ) + // is ( Type Identifier == TypeSpecialization , TemplateParameterList ) + if (ident && specType && token.type == T.Comma) + tparams = parseTemplateParameterList2(); + } require(T.RParen); - e = new IsExpression(type, ident, opTok, specTok, specType); + e = new IsExpression(type, ident, opTok, specTok, specType, tparams); break; case T.LParen: if (tokenAfterParenIs(T.LBrace)) @@ -4026,11 +4035,34 @@ TemplateParameters parseTemplateParameterList() { + TemplateParameters tparams; + require(T.LParen); + if (token.type != T.RParen) + tparams = parseTemplateParameterList_(); + require(T.RParen); + return tparams; + } + +version(D2) +{ + TemplateParameters parseTemplateParameterList2() + { + assert(token.type == T.Comma); + nT(); + TemplateParameters tparams; + if (token.type != T.RParen) + tparams = parseTemplateParameterList_(); + else + error(MID.ExpectedButFound, "Type/Expression", ")"); + return tparams; + } +} // version(D2) + + TemplateParameters parseTemplateParameterList_() + { auto begin = token; auto tparams = new TemplateParameters; - require(T.LParen); - if (token.type != T.RParen) while (1) { auto paramBegin = token; @@ -4119,7 +4151,6 @@ break; nT(); } - require(T.RParen); set(tparams, begin); return tparams; }