2 // enum.cs: Enum handling.
4 // Author: Miguel de Icaza (miguel@gnu.org)
6 // Licensed under the terms of the GNU GPL
8 // (C) 2001 Ximian, Inc (http://www.ximian.com)
12 using System.Collections;
13 using System.Reflection;
14 using System.Reflection.Emit;
18 public class Enum : DeclSpace {
20 ArrayList ordered_enums;
24 public EnumBuilder EnumBuilder;
25 public Attributes OptAttributes;
27 public const int AllowedModifiers =
34 public Enum (string type, int mod_flags, string name, Attributes attrs, Location l)
39 this.mod_flags = Modifiers.Check (AllowedModifiers, mod_flags, Modifiers.PUBLIC);
40 OptAttributes = attrs;
41 ordered_enums = new ArrayList ();
45 // Adds @name to the enumeration space, with @expr
46 // being its definition.
48 public AdditionResult AddEnumMember (string name, Expression expr)
50 if (defined_names.Contains (name))
51 return AdditionResult.NameExists;
53 DefineName (name, expr);
55 ordered_enums.Add (name);
56 return AdditionResult.Success;
59 public void Define (TypeContainer parent)
61 TypeAttributes attr = Modifiers.TypeAttr (ModFlags, parent);
63 Type t = parent.LookupType (type, false);
65 EnumBuilder = parent.RootContext.CodeGen.ModuleBuilder.DefineEnum (name, attr, t);
74 public ArrayList ValueNames {
87 public Expression this [string name] {
89 return (Expression) defined_names [name];