changeset 83:9e6d66f647c9

- Fix: IsExpression was created instead of IdentityExpression. - Added code for parsing Slice- and IndexExpression.
author aziz
date Wed, 04 Jul 2007 23:00:01 +0000
parents fc645fb2fe72
children ac8d961d10d1
files trunk/src/Expressions.d trunk/src/Parser.d
diffstat 2 files changed, 49 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Expressions.d	Wed Jul 04 22:19:01 2007 +0000
+++ b/trunk/src/Expressions.d	Wed Jul 04 23:00:01 2007 +0000
@@ -80,7 +80,7 @@
   { super(left, right, TOK.Equal); }
 }
 
-class IdentExpression : CmpExpression
+class IdentityExpression : CmpExpression
 {
   this(Expression left, Expression right, TOK tok)
   { super(left, right, tok); }
@@ -334,14 +334,25 @@
 
 }
 
-class IndexExpression
+class IndexExpression : UnaryExpression
 {
-
+  Expression[] args;
+  this(Expression e, Expression[] args)
+  {
+    super(e);
+    this.args = args;
+  }
 }
 
-class SliceExpression
+class SliceExpression : UnaryExpression
 {
-
+  Expression left, right;
+  this(Expression e, Expression left, Expression right)
+  {
+    super(e);
+    this.left = left;
+    this.right = right;
+  }
 }
 
 class AssertExpression
--- a/trunk/src/Parser.d	Wed Jul 04 22:19:01 2007 +0000
+++ b/trunk/src/Parser.d	Wed Jul 04 23:00:01 2007 +0000
@@ -200,7 +200,7 @@
       operator = T.Identity;
     LNotIdentity:
       nT();
-      e = new IsExpression(e, parseShiftExpression(), operator);
+      e = new IdentityExpression(e, parseShiftExpression(), operator);
       break;
     case T.LessEqual, T.Less, T.GreaterEqual, T.Greater,
          T.Unordered, T.UorE, T.UorG, T.UorGorE,
@@ -301,6 +301,31 @@
         break;
       case T.LBracket:
         // parse Slice- and IndexExpression
+        nT();
+        if (lx.token.type == T.RBracket)
+        {
+          e = new SliceExpression(e, null, null);
+          nT();
+          break;
+        }
+        Expression[] es = [parseAssignExpression()];
+        if (lx.token.type == T.Slice)
+        {
+          nT();
+          e = new SliceExpression(e, es[0], parseAssignExpression());
+//           if (lx.token.type != T.RBracket)
+//             error()
+          nT();
+          break;
+        }
+        else if (lx.token.type == T.Comma)
+        {
+           es ~= parseArgumentList(T.RBracket);
+        }
+        e = new IndexExpression(e, es);
+//         if (lx.token.type != T.RBracket)
+//           error();
+        nT();
         break;
       }
     }
@@ -359,7 +384,13 @@
 
   Expression parsePrimaryExpression()
   {
-    return null;
+    Expression e;
+    switch (lx.token.type)
+    {
+    case T.Identifier:
+      
+    }
+    return e;
   }
 
   Expression parseNewExpression(Expression e)