changeset 101:6f3c5473c5e5

- Implemented parsing TypeofExpression.
author aziz
date Sat, 07 Jul 2007 16:13:02 +0000
parents 538e8b546669
children 6e8b67ae15b7
files trunk/src/Expressions.d trunk/src/Parser.d
diffstat 2 files changed, 29 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Expressions.d	Sat Jul 07 13:55:01 2007 +0000
+++ b/trunk/src/Expressions.d	Sat Jul 07 16:13:02 2007 +0000
@@ -492,6 +492,15 @@
   }
 }
 
+class TypeofExpression : Expression
+{
+  Type type;
+  this(Type type)
+  {
+    this.type = type;
+  }
+}
+
 class TypeDotIdExpression : Expression
 {
   Type type;
--- a/trunk/src/Parser.d	Sat Jul 07 13:55:01 2007 +0000
+++ b/trunk/src/Parser.d	Sat Jul 07 16:13:02 2007 +0000
@@ -558,6 +558,25 @@
       require(T.RParen);
       e = new TypeidExpression(type);
       break;
+    case T.Typeof:
+      requireNext(T.LParen);
+      auto type = new TypeofType(parseExpression());
+      require(T.RParen);
+      if (token.type == T.Dot)
+      {
+        nT();
+        string ident;
+        if (token.type == T.Identifier)
+        {
+          ident = token.srcText;
+        }
+        else
+          errorIfNot(T.Identifier);
+        e = new TypeDotIdExpression(type, ident);
+      }
+      else
+        e = new TypeofExpression(type);
+      break;
     case T.Is:
       requireNext(T.LParen);
 
@@ -789,8 +808,7 @@
     else if (!identOptional)
       errorIfNot(T.Identifier);
 
-    t = parseDeclaratorSuffix(t);
-    return t;
+    return parseDeclaratorSuffix(t);
   }
 
   Argument[] parseParameters()