diff trunk/src/dil/Parser.d @ 376:5ebe80ce84f2

- Separated common code to parseTemplateArguments_(). - Checking for null before adding targs to children member, because pTA() and pTA2() can return null.
author aziz
date Sat, 08 Sep 2007 17:24:05 +0000
parents 0bd21b746a04
children 906599374b69
line wrap: on
line diff
--- a/trunk/src/dil/Parser.d	Sat Sep 08 16:42:02 2007 +0000
+++ b/trunk/src/dil/Parser.d	Sat Sep 08 17:24:05 2007 +0000
@@ -3975,78 +3975,55 @@
 
   TemplateArguments parseTemplateArguments()
   {
-    auto begin = token;
-    auto args = new TemplateArguments;
-
+    TemplateArguments targs;
     require(T.LParen);
     if (token.type != T.RParen)
-    {
-      while (1)
-      {
-        bool success;
-        auto typeArgument = try_(parseType(), success);
-        if (success)
-        {
-          // TemplateArgument:
-          //         Type
-          //         Symbol
-          args ~= typeArgument;
-        }
-        else
-        {
-          // TemplateArgument:
-          //         AssignExpression
-          args ~= parseAssignExpression();
-        }
-        if (token.type != T.Comma)
-          break; // Exit loop.
-        nT();
-      }
-    }
+     targs = parseTemplateArguments_();
     require(T.RParen);
-    set(args, begin);
-    return args;
+    return targs;
   }
+
 version(D2)
 {
   TemplateArguments parseTemplateArguments2()
   {
     assert(token.type == T.Comma);
     nT();
-    auto begin = token;
-    auto args = new TemplateArguments;
-
+    TemplateArguments targs;
     if (token.type != T.RParen)
-    {
-      while (1)
-      {
-        bool success;
-        auto typeArgument = try_(parseType(), success);
-        if (success)
-        {
-          // TemplateArgument:
-          //         Type
-          //         Symbol
-          args ~= typeArgument;
-        }
-        else
-        {
-          // TemplateArgument:
-          //         AssignExpression
-          args ~= parseAssignExpression();
-        }
-        if (token.type != T.Comma)
-          break; // Exit loop.
-        nT();
-      }
-    }
+      targs = parseTemplateArguments_();
     else
       error(MID.ExpectedButFound, "Type/Expression", ")");
     require(T.RParen);
-    set(args, begin);
-    return args;
+    return targs;
   }
 } // version(D2)
+
+  TemplateArguments parseTemplateArguments_()
+  {
+    auto begin = token;
+    auto targs = new TemplateArguments;
+    while (1)
+    {
+      bool success;
+      auto typeArgument = try_(parseType(), success);
+      if (success)
+        // TemplateArgument:
+        //         Type
+        //         Symbol
+        targs ~= typeArgument;
+      else
+        // TemplateArgument:
+        //         AssignExpression
+        targs ~= parseAssignExpression();
+      if (token.type != T.Comma)
+        break; // Exit loop.
+      nT();
+    }
+    set(targs, begin);
+    return targs;
+  }
+
   TemplateParameters parseTemplateParameterList()
   {
     auto begin = token;