changeset 406:e242f0ee2d27

Added class EnumMember. Refactored parseEnumDeclaration() to make use of EnumMember.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sun, 23 Sep 2007 21:48:05 +0200
parents e2529923a0cb
children 5431c0faf3b5
files trunk/src/dil/Declarations.d trunk/src/dil/Parser.d trunk/src/dil/SyntaxTree.d
diffstat 3 files changed, 31 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/dil/Declarations.d	Sun Sep 23 20:32:12 2007 +0200
+++ b/trunk/src/dil/Declarations.d	Sun Sep 23 21:48:05 2007 +0200
@@ -163,21 +163,35 @@
 {
   Token* name;
   Type baseType;
-  Token*[] members;
-  Expression[] values;
-  this(Token* name, Type baseType, Token*[] members, Expression[] values, bool hasBody)
+  EnumMember[] members;
+  this(Token* name, Type baseType, EnumMember[] members, bool hasBody)
   {
     super(hasBody);
     mixin(set_kind);
     if (baseType)
       this.children = [baseType];
-    foreach(value; values)
-      if (value)
-        this.children ~= value;
+    if (members.length)
+        this.children ~= members;
+
     this.name = name;
     this.baseType = baseType;
     this.members = members;
-    this.values = values;
+  }
+}
+
+class EnumMember : Node
+{
+  Token* name;
+  Expression value;
+  this(Token* name, Expression value)
+  {
+    super(NodeCategory.Other);
+    mixin(set_kind);
+    if (value)
+      this.children = [value];
+
+    this.name = name;
+    this.value = value;
   }
 }
 
--- a/trunk/src/dil/Parser.d	Sun Sep 23 20:32:12 2007 +0200
+++ b/trunk/src/dil/Parser.d	Sun Sep 23 21:48:05 2007 +0200
@@ -903,8 +903,7 @@
 
     Token* enumName;
     Type baseType;
-    Token*[] members;
-    Expression[] values;
+    EnumMember[] members;
     bool hasBody;
 
     nT(); // Skip enum keyword.
@@ -933,15 +932,19 @@
       nT(); // Skip {
       while (token.type != T.RBrace)
       {
-        members ~= requireId();
+        auto begin = token;
+        auto memberName = requireId();
+        Expression value;
 
         if (token.type == T.Assign)
         {
           nT();
-          values ~= parseAssignExpression();
+          value = parseAssignExpression();
         }
         else
-          values ~= null;
+          value = null;
+
+        members ~= set(new EnumMember(memberName, value), begin);
 
         if (token.type != T.Comma)
           break;
@@ -952,7 +955,7 @@
     else
       error(MID.ExpectedButFound, "enum declaration", token.srcText);
 
-    return new EnumDeclaration(enumName, baseType, members, values, hasBody);
+    return new EnumDeclaration(enumName, baseType, members, hasBody);
   }
 
   Declaration parseClassDeclaration()
--- a/trunk/src/dil/SyntaxTree.d	Sun Sep 23 20:32:12 2007 +0200
+++ b/trunk/src/dil/SyntaxTree.d	Sun Sep 23 21:48:05 2007 +0200
@@ -211,6 +211,7 @@
   TemplateParameters,
   TemplateArguments,
   Linkage,
+  EnumMember,
 }
 
 /// This string is mixed into the constructor of a class that inherits from Node.