3 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
5 // Permission is hereby granted, free of charge, to any person obtaining
6 // a copy of this software and associated documentation files (the
7 // "Software"), to deal in the Software without restriction, including
8 // without limitation the rights to use, copy, modify, merge, publish,
9 // distribute, sublicense, and/or sell copies of the Software, and to
10 // permit persons to whom the Software is furnished to do so, subject to
11 // the following conditions:
13 // The above copyright notice and this permission notice shall be
14 // included in all copies or substantial portions of the Software.
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 // System.Reflection.Emit/EnumBuilder.cs
29 // Paolo Molaro (lupus@ximian.com)
31 // (C) 2001 Ximian, Inc. http://www.ximian.com
35 using System.Reflection;
36 using System.Reflection.Emit;
37 using System.Globalization;
38 using System.Runtime.CompilerServices;
39 using System.Runtime.InteropServices;
41 namespace System.Reflection.Emit {
43 [ComDefaultInterface (typeof (_EnumBuilder))]
44 [ClassInterface (ClassInterfaceType.None)]
45 public sealed class EnumBuilder : Type, _EnumBuilder {
46 private TypeBuilder _tb;
47 private FieldBuilder _underlyingField;
48 private Type _underlyingType;
50 internal EnumBuilder (ModuleBuilder mb, string name, TypeAttributes visibility, Type underlyingType)
52 _tb = new TypeBuilder (mb, name, (visibility | TypeAttributes.Sealed),
53 typeof(Enum), null, PackingSize.Unspecified, 0, null);
54 _underlyingType = underlyingType;
55 _underlyingField = _tb.DefineField ("value__", underlyingType,
56 (FieldAttributes.SpecialName | FieldAttributes.Private | FieldAttributes.RTSpecialName));
57 setup_enum_type (_tb);
60 internal TypeBuilder GetTypeBuilder ()
65 internal override bool IsCompilerContext {
67 return _tb.IsCompilerContext;
71 internal override Type InternalResolve ()
73 return _tb.InternalResolve ();
77 public override Assembly Assembly {
83 public override string AssemblyQualifiedName {
85 return _tb.AssemblyQualifiedName;
89 public override Type BaseType {
95 public override Type DeclaringType {
97 return _tb.DeclaringType;
101 public override string FullName {
107 public override Guid GUID {
113 public override Module Module {
119 public override string Name {
125 public override string Namespace {
127 return _tb.Namespace;
131 public override Type ReflectedType {
133 return _tb.ReflectedType;
137 public override RuntimeTypeHandle TypeHandle {
139 return _tb.TypeHandle;
143 public TypeToken TypeToken {
145 return _tb.TypeToken;
149 public FieldBuilder UnderlyingField {
151 return _underlyingField;
155 public override Type UnderlyingSystemType {
157 return _underlyingType;
161 public Type CreateType ()
163 Type res = _tb.CreateType ();
168 public override Type GetEnumUnderlyingType ()
170 return _underlyingType;
174 [MethodImplAttribute(MethodImplOptions.InternalCall)]
175 private extern void setup_enum_type (Type t);
177 public FieldBuilder DefineLiteral (string literalName, object literalValue)
179 Type fieldType = this;
180 FieldBuilder fieldBuilder = _tb.DefineField (literalName,
181 fieldType, (FieldAttributes.Literal |
182 (FieldAttributes.Static | FieldAttributes.Public)));
183 fieldBuilder.SetConstant (literalValue);
187 protected override TypeAttributes GetAttributeFlagsImpl ()
192 protected override ConstructorInfo GetConstructorImpl (
193 BindingFlags bindingAttr, Binder binder, CallingConventions callConvention,
194 Type[] types, ParameterModifier[] modifiers)
196 return _tb.GetConstructor (bindingAttr, binder, callConvention, types,
201 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
203 return _tb.GetConstructors (bindingAttr);
206 public override object[] GetCustomAttributes(bool inherit)
208 return _tb.GetCustomAttributes (inherit);
211 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
213 return _tb.GetCustomAttributes (attributeType, inherit);
216 public override Type GetElementType()
218 return _tb.GetElementType ();
221 public override EventInfo GetEvent( string name, BindingFlags bindingAttr)
223 return _tb.GetEvent (name, bindingAttr);
226 public override EventInfo[] GetEvents()
228 return _tb.GetEvents ();
231 public override EventInfo[] GetEvents( BindingFlags bindingAttr)
233 return _tb.GetEvents (bindingAttr);
236 public override FieldInfo GetField( string name, BindingFlags bindingAttr)
238 return _tb.GetField (name, bindingAttr);
241 public override FieldInfo[] GetFields( BindingFlags bindingAttr)
243 return _tb.GetFields (bindingAttr);
246 public override Type GetInterface (string name, bool ignoreCase)
248 return _tb.GetInterface (name, ignoreCase);
252 public override InterfaceMapping GetInterfaceMap (Type interfaceType)
254 return _tb.GetInterfaceMap (interfaceType);
257 public override Type[] GetInterfaces()
259 return _tb.GetInterfaces ();
262 public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr)
264 return _tb.GetMember (name, type, bindingAttr);
267 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
269 return _tb.GetMembers (bindingAttr);
272 protected override MethodInfo GetMethodImpl (
273 string name, BindingFlags bindingAttr, Binder binder,
274 CallingConventions callConvention, Type[] types,
275 ParameterModifier[] modifiers)
278 return _tb.GetMethod (name, bindingAttr);
281 return _tb.GetMethod (name, bindingAttr, binder,
282 callConvention, types, modifiers);
285 public override MethodInfo[] GetMethods (BindingFlags bindingAttr)
287 return _tb.GetMethods (bindingAttr);
290 public override Type GetNestedType (string name, BindingFlags bindingAttr)
292 return _tb.GetNestedType (name, bindingAttr);
295 public override Type[] GetNestedTypes (BindingFlags bindingAttr)
297 return _tb.GetNestedTypes (bindingAttr);
300 public override PropertyInfo[] GetProperties (BindingFlags bindingAttr)
302 return _tb.GetProperties (bindingAttr);
305 protected override PropertyInfo GetPropertyImpl (
306 string name, BindingFlags bindingAttr, Binder binder,
307 Type returnType, Type[] types,
308 ParameterModifier[] modifiers)
310 throw CreateNotSupportedException ();
313 protected override bool HasElementTypeImpl ()
315 return _tb.HasElementType;
318 public override object InvokeMember (
319 string name, BindingFlags invokeAttr, Binder binder,
320 object target, object[] args,
321 ParameterModifier[] modifiers, CultureInfo culture,
322 string[] namedParameters)
324 return _tb.InvokeMember (name, invokeAttr, binder, target,
325 args, modifiers, culture, namedParameters);
328 protected override bool IsArrayImpl()
333 protected override bool IsByRefImpl()
338 protected override bool IsCOMObjectImpl()
343 protected override bool IsPointerImpl()
348 protected override bool IsPrimitiveImpl()
353 protected override bool IsValueTypeImpl()
358 public override bool IsDefined (Type attributeType, bool inherit)
360 return _tb.IsDefined (attributeType, inherit);
363 public override Type MakeArrayType ()
365 return new ArrayType (this, 0);
368 public override Type MakeArrayType (int rank)
371 throw new IndexOutOfRangeException ();
372 return new ArrayType (this, rank);
375 public override Type MakeByRefType ()
377 return new ByRefType (this);
380 public override Type MakePointerType ()
382 return new PointerType (this);
385 public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
387 _tb.SetCustomAttribute (customBuilder);
391 public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
393 SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
396 private Exception CreateNotSupportedException ()
398 return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
401 void _EnumBuilder.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
403 throw new NotImplementedException ();
406 void _EnumBuilder.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
408 throw new NotImplementedException ();
411 void _EnumBuilder.GetTypeInfoCount (out uint pcTInfo)
413 throw new NotImplementedException ();
416 void _EnumBuilder.Invoke (uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
418 throw new NotImplementedException ();