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
36 using System.Reflection;
37 using System.Reflection.Emit;
38 using System.Globalization;
39 using System.Runtime.CompilerServices;
40 using System.Runtime.InteropServices;
42 namespace System.Reflection.Emit {
44 [ComDefaultInterface (typeof (_EnumBuilder))]
45 [ClassInterface (ClassInterfaceType.None)]
46 public sealed class EnumBuilder :
54 private TypeBuilder _tb;
55 private FieldBuilder _underlyingField;
56 private Type _underlyingType;
58 internal EnumBuilder (ModuleBuilder mb, string name, TypeAttributes visibility, Type underlyingType)
60 _tb = new TypeBuilder (mb, name, (visibility | TypeAttributes.Sealed),
61 typeof(Enum), null, PackingSize.Unspecified, 0, null);
62 _underlyingType = underlyingType;
63 _underlyingField = _tb.DefineField ("value__", underlyingType,
64 (FieldAttributes.SpecialName | FieldAttributes.Private | FieldAttributes.RTSpecialName));
65 setup_enum_type (_tb);
68 internal TypeBuilder GetTypeBuilder ()
73 internal override Type InternalResolve ()
75 return _tb.InternalResolve ();
79 public override Assembly Assembly {
85 public override string AssemblyQualifiedName {
87 return _tb.AssemblyQualifiedName;
91 public override Type BaseType {
97 public override Type DeclaringType {
99 return _tb.DeclaringType;
103 public override string FullName {
109 public override Guid GUID {
115 public override Module Module {
121 public override string Name {
127 public override string Namespace {
129 return _tb.Namespace;
133 public override Type ReflectedType {
135 return _tb.ReflectedType;
139 public override RuntimeTypeHandle TypeHandle {
141 return _tb.TypeHandle;
145 public TypeToken TypeToken {
147 return _tb.TypeToken;
151 public FieldBuilder UnderlyingField {
153 return _underlyingField;
157 public override Type UnderlyingSystemType {
159 return _underlyingType;
163 public Type CreateType ()
165 Type res = _tb.CreateType ();
170 public override Type GetEnumUnderlyingType ()
172 return _underlyingType;
176 [MethodImplAttribute(MethodImplOptions.InternalCall)]
177 private extern void setup_enum_type (Type t);
179 public FieldBuilder DefineLiteral (string literalName, object literalValue)
181 Type fieldType = this;
182 FieldBuilder fieldBuilder = _tb.DefineField (literalName,
183 fieldType, (FieldAttributes.Literal |
184 (FieldAttributes.Static | FieldAttributes.Public)));
185 fieldBuilder.SetConstant (literalValue);
189 protected override TypeAttributes GetAttributeFlagsImpl ()
194 protected override ConstructorInfo GetConstructorImpl (
195 BindingFlags bindingAttr, Binder binder, CallingConventions callConvention,
196 Type[] types, ParameterModifier[] modifiers)
198 return _tb.GetConstructor (bindingAttr, binder, callConvention, types,
203 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
205 return _tb.GetConstructors (bindingAttr);
208 public override object[] GetCustomAttributes(bool inherit)
210 return _tb.GetCustomAttributes (inherit);
213 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
215 return _tb.GetCustomAttributes (attributeType, inherit);
218 public override Type GetElementType()
220 return _tb.GetElementType ();
223 public override EventInfo GetEvent( string name, BindingFlags bindingAttr)
225 return _tb.GetEvent (name, bindingAttr);
228 public override EventInfo[] GetEvents()
230 return _tb.GetEvents ();
233 public override EventInfo[] GetEvents( BindingFlags bindingAttr)
235 return _tb.GetEvents (bindingAttr);
238 public override FieldInfo GetField( string name, BindingFlags bindingAttr)
240 return _tb.GetField (name, bindingAttr);
243 public override FieldInfo[] GetFields( BindingFlags bindingAttr)
245 return _tb.GetFields (bindingAttr);
248 public override Type GetInterface (string name, bool ignoreCase)
250 return _tb.GetInterface (name, ignoreCase);
254 public override InterfaceMapping GetInterfaceMap (Type interfaceType)
256 return _tb.GetInterfaceMap (interfaceType);
259 public override Type[] GetInterfaces()
261 return _tb.GetInterfaces ();
264 public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr)
266 return _tb.GetMember (name, type, bindingAttr);
269 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
271 return _tb.GetMembers (bindingAttr);
274 protected override MethodInfo GetMethodImpl (
275 string name, BindingFlags bindingAttr, Binder binder,
276 CallingConventions callConvention, Type[] types,
277 ParameterModifier[] modifiers)
280 return _tb.GetMethod (name, bindingAttr);
283 return _tb.GetMethod (name, bindingAttr, binder,
284 callConvention, types, modifiers);
287 public override MethodInfo[] GetMethods (BindingFlags bindingAttr)
289 return _tb.GetMethods (bindingAttr);
292 public override Type GetNestedType (string name, BindingFlags bindingAttr)
294 return _tb.GetNestedType (name, bindingAttr);
297 public override Type[] GetNestedTypes (BindingFlags bindingAttr)
299 return _tb.GetNestedTypes (bindingAttr);
302 public override PropertyInfo[] GetProperties (BindingFlags bindingAttr)
304 return _tb.GetProperties (bindingAttr);
307 protected override PropertyInfo GetPropertyImpl (
308 string name, BindingFlags bindingAttr, Binder binder,
309 Type returnType, Type[] types,
310 ParameterModifier[] modifiers)
312 throw CreateNotSupportedException ();
315 protected override bool HasElementTypeImpl ()
317 return _tb.HasElementType;
320 public override object InvokeMember (
321 string name, BindingFlags invokeAttr, Binder binder,
322 object target, object[] args,
323 ParameterModifier[] modifiers, CultureInfo culture,
324 string[] namedParameters)
326 return _tb.InvokeMember (name, invokeAttr, binder, target,
327 args, modifiers, culture, namedParameters);
330 protected override bool IsArrayImpl()
335 protected override bool IsByRefImpl()
340 protected override bool IsCOMObjectImpl()
345 protected override bool IsPointerImpl()
350 protected override bool IsPrimitiveImpl()
355 protected override bool IsValueTypeImpl()
360 public override bool IsDefined (Type attributeType, bool inherit)
362 return _tb.IsDefined (attributeType, inherit);
365 public override Type MakeArrayType ()
367 return new ArrayType (this, 0);
370 public override Type MakeArrayType (int rank)
373 throw new IndexOutOfRangeException ();
374 return new ArrayType (this, rank);
377 public override Type MakeByRefType ()
379 return new ByRefType (this);
382 public override Type MakePointerType ()
384 return new PointerType (this);
387 public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
389 _tb.SetCustomAttribute (customBuilder);
393 public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
395 SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
398 private Exception CreateNotSupportedException ()
400 return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
403 void _EnumBuilder.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
405 throw new NotImplementedException ();
408 void _EnumBuilder.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
410 throw new NotImplementedException ();
413 void _EnumBuilder.GetTypeInfoCount (out uint pcTInfo)
415 throw new NotImplementedException ();
418 void _EnumBuilder.Invoke (uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
420 throw new NotImplementedException ();
423 internal override bool IsUserType {
430 public override bool IsConstructedGenericType {
431 get { return false; }
434 public override bool IsAssignableFrom (TypeInfo typeInfo)
436 return base.IsAssignableFrom (typeInfo);