public override void VisitEnumDeclaration(EnumDeclarationSyntax node) { _memberCollector = new EnumMemberValueCollector(); node.Accept(_memberCollector); var enumType = TempLocalVar(node.Identifier.ValueText); var attrs = ModifiersToCecil("TypeAttributes", node.Modifiers, "Private"); var typeDef = CecilDefinitionsFactory.Type(Context, enumType, node.Identifier.ValueText, attrs + " | TypeAttributes.Sealed", Context.TypeResolver.Resolve("System.Enum"), false, Array.Empty <string>()); AddCecilExpressions(typeDef); using (Context.DefinitionVariables.WithCurrent(node.Parent.IsKind(SyntaxKind.CompilationUnit) ? "" : node.Parent.ResolveDeclaringType().Identifier.ValueText, node.Identifier.ValueText, MemberKind.Type, enumType)) { //.class private auto ansi MyEnum //TODO: introduce TypeSystem.CoreLib.Enum/Action/etc... var fieldVar = MethodExtensions.LocalVariableNameFor("valueField", node.Identifier.ValueText); var valueFieldExp = CecilDefinitionsFactory.Field(enumType, fieldVar, "value__", "assembly.MainModule.TypeSystem.Int32", "FieldAttributes.SpecialName | FieldAttributes.RTSpecialName | FieldAttributes.Public"); AddCecilExpressions(valueFieldExp); HandleAttributesInMemberDeclaration(node.AttributeLists, enumType); base.VisitEnumDeclaration(node); } }