Mercurial > projects > dil
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()