Mercurial > projects > dil
diff trunk/src/Parser.d @ 139:d48f345b05f8
- Implemented parseTemplateArgumentList().
- Restructure parseArgumentList().
author | aziz |
---|---|
date | Wed, 11 Jul 2007 14:22:05 +0000 |
parents | 91b5187ed775 |
children | 64d7186b087c |
line wrap: on
line diff
--- a/trunk/src/Parser.d Wed Jul 11 12:59:05 2007 +0000 +++ b/trunk/src/Parser.d Wed Jul 11 14:22:05 2007 +0000 @@ -1549,7 +1549,7 @@ Expression[] parseArgumentList(TOK terminator) { - Expression[] es; + Expression[] args; nT(); if (token.type == terminator) @@ -1558,15 +1558,16 @@ return null; } - while (1) + goto LenterLoop; + do { - es ~= parseAssignExpression(); - if (token.type == terminator) - break; - require(T.Comma); - } - nT(); - return es; + nT(); + LenterLoop: + args ~= parseAssignExpression(); + } while (token.type == T.Comma) + + require(terminator); + return args; } Parameters parseParameters() @@ -1637,6 +1638,45 @@ return params; } + Object[] parseTemplateArgumentList() + { + Object[] args; + + require(T.LParen); + if (token.type == T.RParen) + { + nT(); + return null; + } + + goto LenterLoop; + do + { + nT(); // Skip comma. + LenterLoop: + + bool failed; + auto typeArgument = try_(parseType(), failed); + + if (!failed) + { + // TemplateArgument: + // Type + // Symbol + args ~= typeArgument; + } + else + { + // TemplateArgument: + // AssignExpression + args ~= parseAssignExpression(); + } + } while (token.type == T.Comma) + + require(T.RParen); + return args; + } + TemplateParameter[] parseTemplateParameters() { require(T.LParen);