changeset 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
files trunk/src/dil/Expressions.d trunk/src/dil/Parser.d trunk/src/dil/Types.d
diffstat 3 files changed, 39 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/dil/Expressions.d	Sat Sep 08 16:42:02 2007 +0000
+++ b/trunk/src/dil/Expressions.d	Sat Sep 08 17:24:05 2007 +0000
@@ -618,7 +618,8 @@
   this(Token* ident, TemplateArguments targs)
   {
     mixin(set_kind);
-    this.children = [targs];
+    if (targs)
+      this.children = [targs];
     this.ident = ident;
     this.targs = targs;
   }
@@ -872,7 +873,8 @@
   this(typeof(ident) ident, typeof(targs) targs)
   {
     mixin(set_kind);
-    this.children = [targs];
+    if (targs)
+      this.children = [targs];
     this.ident = ident;
     this.targs = targs;
   }
--- 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;
--- a/trunk/src/dil/Types.d	Sat Sep 08 16:42:02 2007 +0000
+++ b/trunk/src/dil/Types.d	Sat Sep 08 17:24:05 2007 +0000
@@ -397,7 +397,8 @@
   {
     super(TID.TemplateInstance);
     mixin(set_kind);
-    this.children ~= targs;
+    if (targs)
+      this.children ~= targs;
     this.ident = ident;
     this.targs = targs;
   }