changeset 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
files trunk/src/Expressions.d trunk/src/Parser.d
diffstat 2 files changed, 31 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Expressions.d	Sat Jul 07 10:51:00 2007 +0000
+++ b/trunk/src/Expressions.d	Sat Jul 07 12:30:01 2007 +0000
@@ -320,8 +320,12 @@
 
 class CastExpression : UnaryExpression
 {
-  this(Expression e)
-  { super(e); }
+  Type type;
+  this(Expression e, Type type)
+  {
+    super(e);
+    this.type = type;
+  }
 }
 
 class AnonClassExpression : UnaryExpression
@@ -501,8 +505,11 @@
 
 class TypeidExpression : Expression
 {
-  this()
-  {}
+  Type type;
+  this(Type type)
+  {
+    this.type = type;
+  }
 }
 
 class IsExpression : Expression
--- 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)
         {