using System.Reflection.Emit;
using System.Globalization;
using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
namespace System.Reflection.Emit {
- public sealed class EnumBuilder : Type {
- private CustomAttributeBuilder[] cattrs;
+ [ComVisible (true)]
+ [ComDefaultInterface (typeof (_EnumBuilder))]
+ [ClassInterface (ClassInterfaceType.None)]
+ public sealed class EnumBuilder : Type, _EnumBuilder {
private TypeBuilder _tb;
private FieldBuilder _underlyingField;
private Type _underlyingType;
typeof(Enum), null, PackingSize.Unspecified, 0, null);
_underlyingType = underlyingType;
_underlyingField = _tb.DefineField ("value__", underlyingType,
- (FieldAttributes.SpecialName | FieldAttributes.Private));
+ (FieldAttributes.SpecialName | FieldAttributes.Private | FieldAttributes.RTSpecialName));
+ setup_enum_type (_tb);
}
+ internal TypeBuilder GetTypeBuilder ()
+ {
+ return _tb;
+ }
+
+ internal override Type InternalResolve ()
+ {
+ return _tb.InternalResolve ();
+ }
+
+
public override Assembly Assembly {
get {
return _tb.Assembly;
public Type CreateType ()
{
- return _tb.CreateType ();
+ Type res = _tb.CreateType ();
+ return res;
}
+#if NET_4_0
+ public override Type GetEnumUnderlyingType ()
+ {
+ return _underlyingType;
+ }
+#endif
+
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern void setup_enum_type (Type t);
+
public FieldBuilder DefineLiteral (string literalName, object literalValue)
{
+ Type fieldType = this;
FieldBuilder fieldBuilder = _tb.DefineField (literalName,
- _underlyingType, (FieldAttributes.Literal |
+ fieldType, (FieldAttributes.Literal |
(FieldAttributes.Static | FieldAttributes.Public)));
fieldBuilder.SetConstant (literalValue);
return fieldBuilder;
}
protected override ConstructorInfo GetConstructorImpl (
- BindingFlags bindingAttr, Binder binder, CallingConventions cc,
+ BindingFlags bindingAttr, Binder binder, CallingConventions callConvention,
Type[] types, ParameterModifier[] modifiers)
{
- return _tb.GetConstructor (bindingAttr, binder, cc, types,
+ return _tb.GetConstructor (bindingAttr, binder, callConvention, types,
modifiers);
}
+ [ComVisible (true)]
public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
{
return _tb.GetConstructors (bindingAttr);
return _tb.GetInterface (name, ignoreCase);
}
+ [ComVisible (true)]
public override InterfaceMapping GetInterfaceMap (Type interfaceType)
{
return _tb.GetInterfaceMap (interfaceType);
return _tb.IsDefined (attributeType, inherit);
}
- public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
+ public override Type MakeArrayType ()
{
- if (cattrs != null) {
- CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1];
- cattrs.CopyTo (new_array, 0);
- new_array [cattrs.Length] = customBuilder;
- cattrs = new_array;
- } else {
- cattrs = new CustomAttributeBuilder [1];
- cattrs [0] = customBuilder;
- }
+ return new ArrayType (this, 0);
}
- public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
+ public override Type MakeArrayType (int rank)
{
- SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
+ if (rank < 1)
+ throw new IndexOutOfRangeException ();
+ return new ArrayType (this, rank);
}
-#if NET_2_0 || BOOTSTRAP_NET_2_0
- [MonoTODO]
- public override Type[] GetGenericArguments ()
+ public override Type MakeByRefType ()
{
- throw new NotImplementedException ();
+ return new ByRefType (this);
}
- [MonoTODO]
- public override bool HasGenericArguments {
- get {
- throw new NotImplementedException ();
- }
+ public override Type MakePointerType ()
+ {
+ return new PointerType (this);
}
- [MonoTODO]
- public override bool ContainsGenericParameters {
- get {
- throw new NotImplementedException ();
- }
+ public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
+ {
+ _tb.SetCustomAttribute (customBuilder);
}
- [MonoTODO]
- public override bool IsGenericParameter {
- get {
- throw new NotImplementedException ();
- }
+ [ComVisible (true)]
+ public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
+ {
+ SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
}
- [MonoTODO]
- public override int GenericParameterPosition {
- get {
- throw new NotImplementedException ();
- }
+ private Exception CreateNotSupportedException ()
+ {
+ return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
}
- [MonoTODO]
- public override MethodInfo DeclaringMethod {
- get {
- throw new NotImplementedException ();
- }
+ void _EnumBuilder.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
+ {
+ throw new NotImplementedException ();
}
-#endif
- private Exception CreateNotSupportedException ()
+ void _EnumBuilder.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
{
- return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
+ 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 ();
}
}
}