# HG changeset patch # User Aziz K?ksal # Date 1190576885 -7200 # Node ID e242f0ee2d27ef7109084ec601041ca38699a31f # Parent e2529923a0cb6f7c8cea552cb230ae3a903abd0b Added class EnumMember. Refactored parseEnumDeclaration() to make use of EnumMember. diff -r e2529923a0cb -r e242f0ee2d27 trunk/src/dil/Declarations.d --- 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; } } diff -r e2529923a0cb -r e242f0ee2d27 trunk/src/dil/Parser.d --- 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() diff -r e2529923a0cb -r e242f0ee2d27 trunk/src/dil/SyntaxTree.d --- 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.