changeset 232:2a4e2c8ca094

- Renamed method isTemplateParameterList() to tokenAfterParenIs(). - Checking for T.LBrace after right parenthesis before parsing as ParameterList.
author aziz
date Fri, 27 Jul 2007 12:12:05 +0000
parents 6846138a0e24
children c2b601dcd57d
files trunk/src/Parser.d
diffstat 1 files changed, 12 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Parser.d	Fri Jul 27 11:19:00 2007 +0000
+++ b/trunk/src/Parser.d	Fri Jul 27 12:12:05 2007 +0000
@@ -319,7 +319,7 @@
 //         writef("°Function°");
         // It's a function declaration
         TemplateParameter[] tparams;
-        if (isTemplateParameterList())
+        if (tokenAfterParenIs(T.LParen))
         {
           // ( TemplateParameterList ) ( ParameterList )
           tparams = parseTemplateParameterList();
@@ -2797,11 +2797,9 @@
       e = new IsExpression(type, ident, specType);
       break;
     case T.LParen:
-      Token t;
-      bool success;
-      auto parameters = try_(parseParameterList(), success);
-      if (success)
+      if (tokenAfterParenIs(T.LBrace))
       {
+        auto parameters = parseParameterList();
         // ( ParameterList ) FunctionBody
         auto funcType = new FunctionType(null, parameters);
         auto funcBody = parseFunctionBody(new FunctionBody);
@@ -2959,20 +2957,21 @@
     assert(0);
   }
 
-  bool isTemplateParameterList()
+  bool tokenAfterParenIs(TOK tok)
   {
     // We count nested parentheses tokens because template types may appear inside parameter lists; e.g. (int x, Foo!(int) y).
-    Token t;
+    assert(token.type == T.LParen);
+    Token next;
     uint level = 1;
     while (1)
     {
-      lx.peek(t);
-      switch (t.type)
+      lx.peek(next);
+      switch (next.type)
       {
       case T.RParen:
         if (--level == 0)
         { // Closing parentheses found.
-          lx.peek(t);
+          lx.peek(next);
           break;
         }
         continue;
@@ -2986,9 +2985,8 @@
       }
       break;
     }
-    if (t.type == T.LParen)
-      return true;
-    return false;
+
+    return next.type == tok;
   }
 
   Type parseDeclaratorSuffix(Type t)
@@ -3005,7 +3003,7 @@
 /+ // parsed in parseDeclaration()
     case T.LParen:
       TemplateParameter[] tparams;
-      if (isTemplateParameterList())
+      if (tokenAfterParenIs(T.LParen))
       {
         // ( TemplateParameterList ) ( ParameterList )
         tparams = parseTemplateParameterList();