diff trunk/src/dil/Parser.d @ 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 a92f7826a4fa
line wrap: on
line diff
--- 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;
   }