changeset 78:f043759fb59a

- Added code to parseUnaryExpression(); not fully implemented. - Added class AddressExpression, PreIncrExpression, PreDecrExpression, DerefExpression, SignExpression, NotExpression and CompExpression.
author aziz
date Sun, 01 Jul 2007 21:35:01 +0000
parents 7e21c4df1c02
children df4e5c7ad58a
files trunk/src/Expressions.d trunk/src/Parser.d
diffstat 2 files changed, 109 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Expressions.d	Sun Jul 01 19:39:03 2007 +0000
+++ b/trunk/src/Expressions.d	Sun Jul 01 21:35:01 2007 +0000
@@ -10,11 +10,6 @@
 
 }
 
-class UnaryExpression : Expression
-{
-
-}
-
 class BinaryExpression : Expression
 {
   Expression left, right;
@@ -223,34 +218,93 @@
   { super(left, right, TOK.CatAssign); }
 }
 
+class UnaryExpression : Expression
+{
+  Expression e;
+  this(Expression e)
+  { this.e = e; }
+}
+
+class AddressExpression : UnaryExpression
+{
+  this(Expression e)
+  { super(e); }
+}
+
+class PreIncrExpression : UnaryExpression
+{
+  this(Expression e)
+  { super(e); }
+}
+
+class PreDecrExpression : UnaryExpression
+{
+  this(Expression e)
+  { super(e); }
+}
+
+class DerefExpression : UnaryExpression
+{
+  this(Expression e)
+  { super(e); }
+}
+
+class SignExpression : UnaryExpression
+{
+  TOK sign;
+  this(Expression e, TOK sign)
+  {
+    super(e);
+    this.sign = sign;
+  }
+}
+
+class NotExpression : UnaryExpression
+{
+  this(Expression e)
+  { super(e); }
+}
+
+class CompExpression : UnaryExpression
+{
+  this(Expression e)
+  { super(e); }
+}
+
 class PostfixExpression : UnaryExpression
 {
-
+  this(Expression e)
+  { super(e); }
 }
 
 class DotExpression : UnaryExpression
 {
-
+  this(Expression e)
+  { super(e); }
 }
 
 class NewExpression : UnaryExpression
 {
-
+  this(Expression e)
+  { super(e); }
 }
 
 class DeleteExpression : UnaryExpression
 {
-
+  this(Expression e)
+  { super(e); }
 }
 
 class CastExpression : UnaryExpression
 {
-
+  this(Expression e)
+  { super(e); }
 }
 
 class AnonClassExpression : UnaryExpression
 {
-
+  this(Expression e)
+  { super(e); }
 }
 
 class PrimaryExpression
--- a/trunk/src/Parser.d	Sun Jul 01 19:39:03 2007 +0000
+++ b/trunk/src/Parser.d	Sun Jul 01 21:35:01 2007 +0000
@@ -270,7 +270,50 @@
 
   Expression parseUnaryExpression()
   {
-    return new Expression;
+    Expression e;
+    switch (lx.token.type)
+    {
+    case T.AndBinary:
+      nT(); e = new AddressExpression(parseUnaryExpression());
+      break;
+    case T.PlusPlus:
+      nT(); e = new PreIncrExpression(parseUnaryExpression());
+      break;
+    case T.MinusMinus:
+      nT(); e = new PreDecrExpression(parseUnaryExpression());
+      break;
+    case T.Mul:
+      nT(); e = new DerefExpression(parseUnaryExpression());
+      break;
+    case T.Minus:
+    case T.Plus:
+      nT(); e = new SignExpression(parseUnaryExpression(), lx.token.type);
+      break;
+    case T.Not:
+      nT(); e = new NotExpression(parseUnaryExpression());
+      break;
+    case T.Tilde:
+      nT(); e = new CompExpression(parseUnaryExpression());
+      break;
+    case T.New:
+      // parseNewExpression();
+      break;
+    case T.Delete:
+      // parseDeleteExpression();
+      break;
+    case T.Cast:
+      // parseDeleteExpression();
+      break;
+    case T.LParen:
+      // parse ( Type ) . Identifier
+      break;
+    }
+    return e;
+  }
+
+  Expression parsePostExpression()
+  {
+    return null;
   }
 
   void error(MID id, ...)