diff trunk/src/Parser.d @ 99:6b8c248f5911

- Added member type to classes CastExpression and TypeidExpression. - Parsing CastExpression and TypeDotIdExpression in parseUnaryExpression() correctly. - Parsing type for TypeidExpression. - Parsing declarator in parseParameters().
author aziz
date Sat, 07 Jul 2007 12:30:01 +0000
parents aec3b16144fe
children 538e8b546669
line wrap: on
line diff
--- a/trunk/src/Parser.d	Sat Jul 07 10:51:00 2007 +0000
+++ b/trunk/src/Parser.d	Sat Jul 07 12:30:01 2007 +0000
@@ -320,12 +320,24 @@
       e = new DeleteExpression(parseUnaryExpression());
       break;
     case T.Cast:
-      nT();
-      // Type type = parseType();
-      e = new CastExpression(parseUnaryExpression() /*, type*/);
+      requireNext(T.LParen);
+      auto type = parseType();
+      require(T.RParen);
+      e = new CastExpression(parseUnaryExpression(), type);
       break;
     case T.LParen:
       // parse ( Type ) . Identifier
+      auto type = parseType();
+      require(T.RParen);
+      require(T.Dot);
+      string ident;
+      if (token.type != T.Identifier)
+      {
+        ident = token.srcText;
+      }
+      else
+        errorIfNot(T.Identifier);
+      e = new TypeDotIdExpression(type, ident);
       break;
     default:
       e = parsePostExpression(parsePrimaryExpression());
@@ -542,7 +554,9 @@
       break;
     case T.Typeid:
       requireNext(T.LParen);
-      e = new TypeidExpression();
+      auto type = parseType();
+      require(T.RParen);
+      e = new TypeidExpression(type);
       break;
     case T.Is:
 //       e = new IsExpression();
@@ -780,9 +794,9 @@
         args ~= new Argument(StorageClass.Variadic, null, null, null);
         break;
       default:
-        Type type = parseBasicType();
         string ident;
-        // parseDeclarator()
+        auto type = parseDeclarator(ident);
+
         Expression assignExpr;
         if (token.type == T.Assign)
         {