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) : base (name)
38 this.mod_flags = Modifiers.Check (AllowedModifiers, mod_flags, Modifiers.PUBLIC);
39 OptAttributes = attrs;
40 ordered_enums = new ArrayList ();
44 // Adds @name to the enumeration space, with @expr
45 // being its definition.
47 public AdditionResult AddEnumMember (string name, Expression expr)
49 if (defined_names.Contains (name))
50 return AdditionResult.NameExists;
52 DefineName (name, expr);
54 ordered_enums.Add (name);
55 return AdditionResult.Success;
58 public void Define (TypeContainer parent)
60 TypeAttributes attr = Modifiers.TypeAttr (ModFlags, parent);
62 Type t = System.Type.GetType (type);
64 EnumBuilder = parent.RootContext.CodeGen.ModuleBuilder.DefineEnum (name, attr, t);
73 public ArrayList ValueNames {
86 public Expression this [string name] {
88 return (Expression) defined_names [name];