+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
//
// System.Reflection.Emit/EnumBuilder.cs
//
using System.Reflection.Emit;
using System.Globalization;
using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
namespace System.Reflection.Emit {
- public sealed class EnumBuilder : Type {
+#if NET_2_0
+ [ComVisible (true)]
+ [ComDefaultInterface (typeof (_EnumBuilder))]
+#endif
+ [ClassInterface (ClassInterfaceType.None)]
+ public sealed class EnumBuilder : Type, _EnumBuilder {
+ private TypeBuilder _tb;
+ private FieldBuilder _underlyingField;
+ private Type _underlyingType;
+
+ internal EnumBuilder (ModuleBuilder mb, string name, TypeAttributes visibility, Type underlyingType)
+ {
+ _tb = new TypeBuilder (mb, name, (visibility | TypeAttributes.Sealed),
+ typeof(Enum), null, PackingSize.Unspecified, 0, null);
+ _underlyingType = underlyingType;
+ _underlyingField = _tb.DefineField ("value__", underlyingType,
+ (FieldAttributes.SpecialName | FieldAttributes.Private));
+ setup_enum_type (_tb);
+ }
+
+ internal TypeBuilder GetTypeBuilder ()
+ {
+ return _tb;
+ }
+
public override Assembly Assembly {
- get {return null;}
+ get {
+ return _tb.Assembly;
+ }
}
+
public override string AssemblyQualifiedName {
- get {return null;}
+ get {
+ return _tb.AssemblyQualifiedName;
+ }
}
+
public override Type BaseType {
- get {return null;}
+ get {
+ return _tb.BaseType;
+ }
}
+
public override Type DeclaringType {
- get {return null;}
+ get {
+ return _tb.DeclaringType;
+ }
}
+
public override string FullName {
- get {return null;}
+ get {
+ return _tb.FullName;
+ }
}
- /*public override Guid GUID {
- get {return null;}
- }*/
+
+ public override Guid GUID {
+ get {
+ return _tb.GUID;
+ }
+ }
+
public override Module Module {
- get {return null;}
+ get {
+ return _tb.Module;
+ }
}
+
public override string Name {
- get {return null;}
+ get {
+ return _tb.Name;
+ }
}
+
public override string Namespace {
- get {return null;}
+ get {
+ return _tb.Namespace;
+ }
}
+
public override Type ReflectedType {
- get {return null;}
+ get {
+ return _tb.ReflectedType;
+ }
}
+
public override RuntimeTypeHandle TypeHandle {
- get {return new RuntimeTypeHandle ();}
+ get {
+ return _tb.TypeHandle;
+ }
}
+
public TypeToken TypeToken {
- get {return new TypeToken ();}
+ get {
+ return _tb.TypeToken;
+ }
}
+
public FieldBuilder UnderlyingField {
- get {return null;}
+ get {
+ return _underlyingField;
+ }
}
+
public override Type UnderlyingSystemType {
- get {return null;}
+ get {
+ return _underlyingType;
+ }
}
- public override MemberTypes MemberType {
- get {return MemberTypes.TypeInfo;}
+
+ public Type CreateType ()
+ {
+ Type res = _tb.CreateType ();
+ return res;
}
- internal EnumBuilder (ModuleBuilder mb, string name, TypeAttributes visibility, Type underlyingType) {
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern void setup_enum_type (Type t);
+
+ public FieldBuilder DefineLiteral (string literalName, object literalValue)
+ {
+ FieldBuilder fieldBuilder = _tb.DefineField (literalName,
+ _underlyingType, (FieldAttributes.Literal |
+ (FieldAttributes.Static | FieldAttributes.Public)));
+ fieldBuilder.SetConstant (literalValue);
+ return fieldBuilder;
}
- public Type CreateType() {
- return null;
+
+ protected override TypeAttributes GetAttributeFlagsImpl ()
+ {
+ return _tb.attrs;
}
- public FieldBuilder DefineLiteral( string literalName, object literalValue) {
- return null;
+
+ protected override ConstructorInfo GetConstructorImpl (
+ BindingFlags bindingAttr, Binder binder, CallingConventions cc,
+ Type[] types, ParameterModifier[] modifiers)
+ {
+ return _tb.GetConstructor (bindingAttr, binder, cc, types,
+ modifiers);
}
- /*protected override TypeAttributes GetAttributeFlagsImpl() {
- return (TypeAttributes)0;
+
+ public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
+ {
+ return _tb.GetConstructors (bindingAttr);
}
- protected override ConstructorInfo GetConstructorImpl( BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) {
- return null;
+
+ public override object[] GetCustomAttributes(bool inherit)
+ {
+ return _tb.GetCustomAttributes (inherit);
}
- public override ConstructorInfo[] GetConstructors( BindingFlags bindingAttr) {
- return null;
- }*/
- public override object[] GetCustomAttributes(bool inherit) {
- return null;
+
+ public override object[] GetCustomAttributes(Type attributeType, bool inherit)
+ {
+ return _tb.GetCustomAttributes (attributeType, inherit);
}
- public override object[] GetCustomAttributes(Type attributeType, bool inherit) {
- return null;
+
+ public override Type GetElementType()
+ {
+ return _tb.GetElementType ();
}
- public override Type GetElementType() {
- throw new NotSupportedException ();
+
+ public override EventInfo GetEvent( string name, BindingFlags bindingAttr)
+ {
+ return _tb.GetEvent (name, bindingAttr);
}
- /*public override EventInfo GetEvent( string name, BindingFlags bindingAttr) {
- return null;
+
+ public override EventInfo[] GetEvents()
+ {
+ return _tb.GetEvents ();
}
- public override EventInfo[] GetEvents() {
- return null;
+
+ public override EventInfo[] GetEvents( BindingFlags bindingAttr)
+ {
+ return _tb.GetEvents (bindingAttr);
}
- public override EventInfo[] GetEvents( BindingFlags bindingAttr) {
- return null;
+
+ public override FieldInfo GetField( string name, BindingFlags bindingAttr)
+ {
+ return _tb.GetField (name, bindingAttr);
}
- public override FieldInfo GetField( string name, BindingFlags bindingAttr) {
- return null;
+
+ public override FieldInfo[] GetFields( BindingFlags bindingAttr)
+ {
+ return _tb.GetFields (bindingAttr);
}
- public override FieldInfo[] GetFields( BindingFlags bindingAttr) {
- return null;
+
+ public override Type GetInterface (string name, bool ignoreCase)
+ {
+ return _tb.GetInterface (name, ignoreCase);
}
- public override Type GetInterface( string name, bool ignoreCase) {
- return null;
+
+ public override InterfaceMapping GetInterfaceMap (Type interfaceType)
+ {
+ return _tb.GetInterfaceMap (interfaceType);
}
- public override InterfaceMapping GetInterfaceMap( Type interfaceType) {
- return null;
- }*/
- public override Type[] GetInterfaces() {
- return null;
+
+ public override Type[] GetInterfaces()
+ {
+ return _tb.GetInterfaces ();
}
- /*public override MemberInfo[] GetMember( string name, MemberTypes type, BindingFlags bindingAttr) {
- return null;
+
+ public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr)
+ {
+ return _tb.GetMember (name, type, bindingAttr);
}
- public override MemberInfo[] GetMembers( BindingFlags bindingAttr) {
- return null;
+
+ public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
+ {
+ return _tb.GetMembers (bindingAttr);
}
- public override MethodInfo[] GetMethods( BindingFlags bindingAttr) {
- return null;
+
+ protected override MethodInfo GetMethodImpl (
+ string name, BindingFlags bindingAttr, Binder binder,
+ CallingConventions callConvention, Type[] types,
+ ParameterModifier[] modifiers)
+ {
+ if (types == null) {
+ return _tb.GetMethod (name, bindingAttr);
+ }
+
+ return _tb.GetMethod (name, bindingAttr, binder,
+ callConvention, types, modifiers);
}
- public override Type GetNestedType( string name, BindingFlags bindingAttr) {
- return null;
+
+ public override MethodInfo[] GetMethods (BindingFlags bindingAttr)
+ {
+ return _tb.GetMethods (bindingAttr);
}
- public override Type[] GetNestedTypes( BindingFlags bindingAttr) {
- return null;
+
+ public override Type GetNestedType (string name, BindingFlags bindingAttr)
+ {
+ return _tb.GetNestedType (name, bindingAttr);
}
- public override PropertyInfo[] GetProperties( BindingFlags bindingAttr) {
- return null;
+
+ public override Type[] GetNestedTypes (BindingFlags bindingAttr)
+ {
+ return _tb.GetNestedTypes (bindingAttr);
}
- protected override PropertyInfo GetPropertyImpl( string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) {
- return null;
+
+ public override PropertyInfo[] GetProperties (BindingFlags bindingAttr)
+ {
+ return _tb.GetProperties (bindingAttr);
}
- protected override bool HasElementTypeImpl() {
- throw new NotSupportedException ();
+
+ protected override PropertyInfo GetPropertyImpl (
+ string name, BindingFlags bindingAttr, Binder binder,
+ Type returnType, Type[] types,
+ ParameterModifier[] modifiers)
+ {
+ throw CreateNotSupportedException ();
}
- public override object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters) {
- return null;
+
+ protected override bool HasElementTypeImpl ()
+ {
+ return _tb.HasElementType;
}
- protected override bool IsArrayImpl() {
- return false;
+
+ public override object InvokeMember (
+ string name, BindingFlags invokeAttr, Binder binder,
+ object target, object[] args,
+ ParameterModifier[] modifiers, CultureInfo culture,
+ string[] namedParameters)
+ {
+ return _tb.InvokeMember (name, invokeAttr, binder, target,
+ args, modifiers, culture, namedParameters);
}
- protected override bool IsByRefImpl() {
+
+ protected override bool IsArrayImpl()
+ {
return false;
}
- protected override bool IsCOMObjectImpl() {
+
+ protected override bool IsByRefImpl()
+ {
return false;
- }*/
- public override bool IsDefined( Type attributeType, bool inherit) {
+ }
+
+ protected override bool IsCOMObjectImpl()
+ {
return false;
}
- /*protected override bool IsPointerImpl() {
+
+ protected override bool IsPointerImpl()
+ {
return false;
}
- protected override bool IsPrimitiveImpl() {
+
+ protected override bool IsPrimitiveImpl()
+ {
return false;
}
- protected override bool IsValueTypeImpl() {
+
+ protected override bool IsValueTypeImpl()
+ {
return true;
- }*/
-
- public void SetCustomAttribute( CustomAttributeBuilder customBuilder) {
}
- public void SetCustomAttribute( ConstructorInfo con, byte[] binaryAttribute) {
+
+ public override bool IsDefined (Type attributeType, bool inherit)
+ {
+ return _tb.IsDefined (attributeType, inherit);
+ }
+
+ public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
+ {
+ _tb.SetCustomAttribute (customBuilder);
+ }
+
+#if NET_2_0
+ [ComVisible (true)]
+#endif
+ public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
+ {
+ SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
+ }
+
+#if NET_2_0 || BOOTSTRAP_NET_2_0
+ [MonoTODO]
+ public override Type[] GetGenericArguments ()
+ {
+ throw new NotImplementedException ();
+ }
+
+ [MonoTODO]
+ public override bool ContainsGenericParameters {
+ get {
+ throw new NotImplementedException ();
+ }
+ }
+
+ [MonoTODO]
+ public override bool IsGenericParameter {
+ get {
+ throw new NotImplementedException ();
+ }
+ }
+
+ [MonoTODO]
+ public override int GenericParameterPosition {
+ get {
+ throw new NotImplementedException ();
+ }
+ }
+#endif
+
+ private Exception CreateNotSupportedException ()
+ {
+ return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
+ }
+
+ void _EnumBuilder.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
+ {
+ throw new NotImplementedException ();
+ }
+
+ void _EnumBuilder.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
+ {
+ throw new NotImplementedException ();
+ }
+
+ void _EnumBuilder.GetTypeInfoCount (out uint pcTInfo)
+ {
+ throw new NotImplementedException ();
+ }
+
+ void _EnumBuilder.Invoke (uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
+ {
+ throw new NotImplementedException ();
}
}
}