From: Sebastian Dröge Date: Thu, 8 Apr 2010 08:14:26 +0000 (+0200) Subject: Add support for constant members inside enums X-Git-Tag: 0.8.1~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8ff933a6a5c5dc86192c2fc0c74531f37c97c5ee;p=thirdparty%2Fvala.git Add support for constant members inside enums --- diff --git a/vala/valacodewriter.vala b/vala/valacodewriter.vala index 04b3d5f1d..8d5f1b385 100644 --- a/vala/valacodewriter.vala +++ b/vala/valacodewriter.vala @@ -526,7 +526,7 @@ public class Vala.CodeWriter : CodeVisitor { } if (!first) { - if (en.get_methods ().size > 0) { + if (en.get_methods ().size > 0 || en.get_constants ().size > 0) { write_string (";"); } write_newline (); @@ -536,6 +536,9 @@ public class Vala.CodeWriter : CodeVisitor { foreach (Method m in en.get_methods ()) { m.accept (this); } + foreach (Constant c in en.get_constants ()) { + c.accept (this); + } current_scope = current_scope.parent_scope; write_end_block (); diff --git a/vala/valaenum.vala b/vala/valaenum.vala index f5c21489b..407e88f6f 100644 --- a/vala/valaenum.vala +++ b/vala/valaenum.vala @@ -38,6 +38,7 @@ public class Vala.Enum : TypeSymbol { private List values = new ArrayList (); private List methods = new ArrayList (); + private List constants = new ArrayList (); private string cname; private string cprefix; private string lower_case_cprefix; @@ -90,6 +91,16 @@ public class Vala.Enum : TypeSymbol { scope.add (m.name, m); } + /** + * Adds the specified constant as a member to this enum. + * + * @param c a constant + */ + public void add_constant (Constant c) { + constants.add (c); + scope.add (c.name, c); + } + /** * Returns a copy of the list of enum values. * @@ -108,6 +119,15 @@ public class Vala.Enum : TypeSymbol { return methods; } + /** + * Returns a copy of the list of constants. + * + * @return list of constants + */ + public List get_constants () { + return constants; + } + public override void accept (CodeVisitor visitor) { visitor.visit_enum (this); } @@ -120,6 +140,10 @@ public class Vala.Enum : TypeSymbol { foreach (Method m in methods) { m.accept (visitor); } + + foreach (Constant c in constants) { + c.accept (visitor); + } } public override string get_cname (bool const_type = false) { @@ -312,6 +336,10 @@ public class Vala.Enum : TypeSymbol { m.check (analyzer); } + foreach (Constant c in constants) { + c.check (analyzer); + } + analyzer.current_source_file = old_source_file; analyzer.current_symbol = old_symbol; diff --git a/vala/valaparser.vala b/vala/valaparser.vala index 15ae81b96..23d4b0fb4 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -2943,6 +2943,8 @@ public class Vala.Parser : CodeVisitor { var member_sym = parse_declaration (); if (member_sym is Method) { en.add_method ((Method) member_sym); + } else if (member_sym is Constant) { + en.add_constant ((Constant) member_sym); } else { Report.error (member_sym.source_reference, "unexpected declaration in enum"); }