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 public override Assembly Assembly {
71 public override string AssemblyQualifiedName {
73 return _tb.AssemblyQualifiedName;
77 public override Type BaseType {
83 public override Type DeclaringType {
85 return _tb.DeclaringType;
89 public override string FullName {
95 public override Guid GUID {
101 public override Module Module {
107 public override string Name {
113 public override string Namespace {
115 return _tb.Namespace;
119 public override Type ReflectedType {
121 return _tb.ReflectedType;
125 public override RuntimeTypeHandle TypeHandle {
127 return _tb.TypeHandle;
131 public TypeToken TypeToken {
133 return _tb.TypeToken;
137 public FieldBuilder UnderlyingField {
139 return _underlyingField;
143 public override Type UnderlyingSystemType {
145 return _underlyingType;
149 public Type CreateType ()
151 Type res = _tb.CreateType ();
155 [MethodImplAttribute(MethodImplOptions.InternalCall)]
156 private extern void setup_enum_type (Type t);
158 public FieldBuilder DefineLiteral (string literalName, object literalValue)
160 Type fieldType = this;
161 FieldBuilder fieldBuilder = _tb.DefineField (literalName,
162 fieldType, (FieldAttributes.Literal |
163 (FieldAttributes.Static | FieldAttributes.Public)));
164 fieldBuilder.SetConstant (literalValue);
168 protected override TypeAttributes GetAttributeFlagsImpl ()
173 protected override ConstructorInfo GetConstructorImpl (
174 BindingFlags bindingAttr, Binder binder, CallingConventions callConvention,
175 Type[] types, ParameterModifier[] modifiers)
177 return _tb.GetConstructor (bindingAttr, binder, callConvention, types,
182 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
184 return _tb.GetConstructors (bindingAttr);
187 public override object[] GetCustomAttributes(bool inherit)
189 return _tb.GetCustomAttributes (inherit);
192 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
194 return _tb.GetCustomAttributes (attributeType, inherit);
197 public override Type GetElementType()
199 return _tb.GetElementType ();
202 public override EventInfo GetEvent( string name, BindingFlags bindingAttr)
204 return _tb.GetEvent (name, bindingAttr);
207 public override EventInfo[] GetEvents()
209 return _tb.GetEvents ();
212 public override EventInfo[] GetEvents( BindingFlags bindingAttr)
214 return _tb.GetEvents (bindingAttr);
217 public override FieldInfo GetField( string name, BindingFlags bindingAttr)
219 return _tb.GetField (name, bindingAttr);
222 public override FieldInfo[] GetFields( BindingFlags bindingAttr)
224 return _tb.GetFields (bindingAttr);
227 public override Type GetInterface (string name, bool ignoreCase)
229 return _tb.GetInterface (name, ignoreCase);
233 public override InterfaceMapping GetInterfaceMap (Type interfaceType)
235 return _tb.GetInterfaceMap (interfaceType);
238 public override Type[] GetInterfaces()
240 return _tb.GetInterfaces ();
243 public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr)
245 return _tb.GetMember (name, type, bindingAttr);
248 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
250 return _tb.GetMembers (bindingAttr);
253 protected override MethodInfo GetMethodImpl (
254 string name, BindingFlags bindingAttr, Binder binder,
255 CallingConventions callConvention, Type[] types,
256 ParameterModifier[] modifiers)
259 return _tb.GetMethod (name, bindingAttr);
262 return _tb.GetMethod (name, bindingAttr, binder,
263 callConvention, types, modifiers);
266 public override MethodInfo[] GetMethods (BindingFlags bindingAttr)
268 return _tb.GetMethods (bindingAttr);
271 public override Type GetNestedType (string name, BindingFlags bindingAttr)
273 return _tb.GetNestedType (name, bindingAttr);
276 public override Type[] GetNestedTypes (BindingFlags bindingAttr)
278 return _tb.GetNestedTypes (bindingAttr);
281 public override PropertyInfo[] GetProperties (BindingFlags bindingAttr)
283 return _tb.GetProperties (bindingAttr);
286 protected override PropertyInfo GetPropertyImpl (
287 string name, BindingFlags bindingAttr, Binder binder,
288 Type returnType, Type[] types,
289 ParameterModifier[] modifiers)
291 throw CreateNotSupportedException ();
294 protected override bool HasElementTypeImpl ()
296 return _tb.HasElementType;
299 public override object InvokeMember (
300 string name, BindingFlags invokeAttr, Binder binder,
301 object target, object[] args,
302 ParameterModifier[] modifiers, CultureInfo culture,
303 string[] namedParameters)
305 return _tb.InvokeMember (name, invokeAttr, binder, target,
306 args, modifiers, culture, namedParameters);
309 protected override bool IsArrayImpl()
314 protected override bool IsByRefImpl()
319 protected override bool IsCOMObjectImpl()
324 protected override bool IsPointerImpl()
329 protected override bool IsPrimitiveImpl()
334 protected override bool IsValueTypeImpl()
339 public override bool IsDefined (Type attributeType, bool inherit)
341 return _tb.IsDefined (attributeType, inherit);
344 public override Type MakeArrayType ()
346 return new ArrayType (this, 0);
349 public override Type MakeArrayType (int rank)
352 throw new IndexOutOfRangeException ();
353 return new ArrayType (this, rank);
356 public override Type MakeByRefType ()
358 return new ByRefType (this);
361 public override Type MakePointerType ()
363 return new PointerType (this);
366 public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
368 _tb.SetCustomAttribute (customBuilder);
372 public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
374 SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
377 private Exception CreateNotSupportedException ()
379 return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
382 void _EnumBuilder.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
384 throw new NotImplementedException ();
387 void _EnumBuilder.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
389 throw new NotImplementedException ();
392 void _EnumBuilder.GetTypeInfoCount (out uint pcTInfo)
394 throw new NotImplementedException ();
397 void _EnumBuilder.Invoke (uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
399 throw new NotImplementedException ();