Mercurial > projects > dil
changeset 140:64d7186b087c
- Implemented parseTemplateParameters().
- Added class TemplateDeclaration.
author | aziz |
---|---|
date | Wed, 11 Jul 2007 19:41:04 +0000 |
parents | d48f345b05f8 |
children | 7ab33ee1a641 |
files | trunk/src/Declarations.d trunk/src/Parser.d |
diffstat | 2 files changed, 32 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/Declarations.d Wed Jul 11 14:22:05 2007 +0000 +++ b/trunk/src/Declarations.d Wed Jul 11 19:41:04 2007 +0000 @@ -265,3 +265,17 @@ this.message = message; } } + +class TemplateDeclaration : Declaration +{ + string templateName; + TemplateParameter[] templateParams; + Declaration[] decls; + this(string templateName, TemplateParameter[] templateParams, Declaration[] decls) + { + super(true); + this.templateName = templateName; + this.templateParams = templateParams; + this.decls = decls; + } +}
--- a/trunk/src/Parser.d Wed Jul 11 14:22:05 2007 +0000 +++ b/trunk/src/Parser.d Wed Jul 11 19:41:04 2007 +0000 @@ -165,6 +165,10 @@ break; case T.Debug: decl = parseDebugDeclaration(); + break; + case T.Template: + decl = parseTemplateDeclaration(); + break; case T.Semicolon: nT(); decl = new EmptyDeclaration(); @@ -376,6 +380,7 @@ if (token.type == T.LParen) { // TODO: parse template parameters + // parseTemplateParameters(); } if (token.type == T.Colon) @@ -422,7 +427,7 @@ case T.Protected: prot = Protection.Protected; break; case T.Package: prot = Protection.Package; break; case T.Public: /*prot = Protection.Public;*/ break; - //case T.Dot: // What about "class Foo : .Bar"? + //case T.Dot: // TODO: What about "class Foo : .Bar"? default: // TODO: issue error msg return bases; @@ -778,6 +783,18 @@ return new StaticAssertDeclaration(condition, message); } + Declaration parseTemplateDeclaration() + { + assert(token.type == T.Template); + nT(); // Skip template keyword. + auto templateName = requireIdentifier(); + auto templateParams = parseTemplateParameters(); + require(T.LBrace); + auto decls = parseDeclarationDefinitions(); + require(T.RBrace); + return new TemplateDeclaration(templateName, templateParams, decls); + } + /+++++++++++++++++++++++++++++ + Expression parsing methods + +++++++++++++++++++++++++++++/