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 ();
167 [MethodImplAttribute(MethodImplOptions.InternalCall)]
168 private extern void setup_enum_type (Type t);
170 public FieldBuilder DefineLiteral (string literalName, object literalValue)
172 Type fieldType = this;
173 FieldBuilder fieldBuilder = _tb.DefineField (literalName,
174 fieldType, (FieldAttributes.Literal |
175 (FieldAttributes.Static | FieldAttributes.Public)));
176 fieldBuilder.SetConstant (literalValue);
180 protected override TypeAttributes GetAttributeFlagsImpl ()
185 protected override ConstructorInfo GetConstructorImpl (
186 BindingFlags bindingAttr, Binder binder, CallingConventions callConvention,
187 Type[] types, ParameterModifier[] modifiers)
189 return _tb.GetConstructor (bindingAttr, binder, callConvention, types,
194 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
196 return _tb.GetConstructors (bindingAttr);
199 public override object[] GetCustomAttributes(bool inherit)
201 return _tb.GetCustomAttributes (inherit);
204 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
206 return _tb.GetCustomAttributes (attributeType, inherit);
209 public override Type GetElementType()
211 return _tb.GetElementType ();
214 public override EventInfo GetEvent( string name, BindingFlags bindingAttr)
216 return _tb.GetEvent (name, bindingAttr);
219 public override EventInfo[] GetEvents()
221 return _tb.GetEvents ();
224 public override EventInfo[] GetEvents( BindingFlags bindingAttr)
226 return _tb.GetEvents (bindingAttr);
229 public override FieldInfo GetField( string name, BindingFlags bindingAttr)
231 return _tb.GetField (name, bindingAttr);
234 public override FieldInfo[] GetFields( BindingFlags bindingAttr)
236 return _tb.GetFields (bindingAttr);
239 public override Type GetInterface (string name, bool ignoreCase)
241 return _tb.GetInterface (name, ignoreCase);
245 public override InterfaceMapping GetInterfaceMap (Type interfaceType)
247 return _tb.GetInterfaceMap (interfaceType);
250 public override Type[] GetInterfaces()
252 return _tb.GetInterfaces ();
255 public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr)
257 return _tb.GetMember (name, type, bindingAttr);
260 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
262 return _tb.GetMembers (bindingAttr);
265 protected override MethodInfo GetMethodImpl (
266 string name, BindingFlags bindingAttr, Binder binder,
267 CallingConventions callConvention, Type[] types,
268 ParameterModifier[] modifiers)
271 return _tb.GetMethod (name, bindingAttr);
274 return _tb.GetMethod (name, bindingAttr, binder,
275 callConvention, types, modifiers);
278 public override MethodInfo[] GetMethods (BindingFlags bindingAttr)
280 return _tb.GetMethods (bindingAttr);
283 public override Type GetNestedType (string name, BindingFlags bindingAttr)
285 return _tb.GetNestedType (name, bindingAttr);
288 public override Type[] GetNestedTypes (BindingFlags bindingAttr)
290 return _tb.GetNestedTypes (bindingAttr);
293 public override PropertyInfo[] GetProperties (BindingFlags bindingAttr)
295 return _tb.GetProperties (bindingAttr);
298 protected override PropertyInfo GetPropertyImpl (
299 string name, BindingFlags bindingAttr, Binder binder,
300 Type returnType, Type[] types,
301 ParameterModifier[] modifiers)
303 throw CreateNotSupportedException ();
306 protected override bool HasElementTypeImpl ()
308 return _tb.HasElementType;
311 public override object InvokeMember (
312 string name, BindingFlags invokeAttr, Binder binder,
313 object target, object[] args,
314 ParameterModifier[] modifiers, CultureInfo culture,
315 string[] namedParameters)
317 return _tb.InvokeMember (name, invokeAttr, binder, target,
318 args, modifiers, culture, namedParameters);
321 protected override bool IsArrayImpl()
326 protected override bool IsByRefImpl()
331 protected override bool IsCOMObjectImpl()
336 protected override bool IsPointerImpl()
341 protected override bool IsPrimitiveImpl()
346 protected override bool IsValueTypeImpl()
351 public override bool IsDefined (Type attributeType, bool inherit)
353 return _tb.IsDefined (attributeType, inherit);
356 public override Type MakeArrayType ()
358 return new ArrayType (this, 0);
361 public override Type MakeArrayType (int rank)
364 throw new IndexOutOfRangeException ();
365 return new ArrayType (this, rank);
368 public override Type MakeByRefType ()
370 return new ByRefType (this);
373 public override Type MakePointerType ()
375 return new PointerType (this);
378 public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
380 _tb.SetCustomAttribute (customBuilder);
384 public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
386 SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
389 private Exception CreateNotSupportedException ()
391 return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
394 void _EnumBuilder.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
396 throw new NotImplementedException ();
399 void _EnumBuilder.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
401 throw new NotImplementedException ();
404 void _EnumBuilder.GetTypeInfoCount (out uint pcTInfo)
406 throw new NotImplementedException ();
409 void _EnumBuilder.Invoke (uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
411 throw new NotImplementedException ();