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 public override Assembly Assembly {
77 public override string AssemblyQualifiedName {
79 return _tb.AssemblyQualifiedName;
83 public override Type BaseType {
89 public override Type DeclaringType {
91 return _tb.DeclaringType;
95 public override string FullName {
101 public override Guid GUID {
107 public override Module Module {
113 public override string Name {
119 public override string Namespace {
121 return _tb.Namespace;
125 public override Type ReflectedType {
127 return _tb.ReflectedType;
131 public override RuntimeTypeHandle TypeHandle {
133 return _tb.TypeHandle;
137 public TypeToken TypeToken {
139 return _tb.TypeToken;
143 public FieldBuilder UnderlyingField {
145 return _underlyingField;
149 public override Type UnderlyingSystemType {
151 return _underlyingType;
155 public Type CreateType ()
157 Type res = _tb.CreateType ();
161 [MethodImplAttribute(MethodImplOptions.InternalCall)]
162 private extern void setup_enum_type (Type t);
164 public FieldBuilder DefineLiteral (string literalName, object literalValue)
166 Type fieldType = this;
167 FieldBuilder fieldBuilder = _tb.DefineField (literalName,
168 fieldType, (FieldAttributes.Literal |
169 (FieldAttributes.Static | FieldAttributes.Public)));
170 fieldBuilder.SetConstant (literalValue);
174 protected override TypeAttributes GetAttributeFlagsImpl ()
179 protected override ConstructorInfo GetConstructorImpl (
180 BindingFlags bindingAttr, Binder binder, CallingConventions callConvention,
181 Type[] types, ParameterModifier[] modifiers)
183 return _tb.GetConstructor (bindingAttr, binder, callConvention, types,
188 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
190 return _tb.GetConstructors (bindingAttr);
193 public override object[] GetCustomAttributes(bool inherit)
195 return _tb.GetCustomAttributes (inherit);
198 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
200 return _tb.GetCustomAttributes (attributeType, inherit);
203 public override Type GetElementType()
205 return _tb.GetElementType ();
208 public override EventInfo GetEvent( string name, BindingFlags bindingAttr)
210 return _tb.GetEvent (name, bindingAttr);
213 public override EventInfo[] GetEvents()
215 return _tb.GetEvents ();
218 public override EventInfo[] GetEvents( BindingFlags bindingAttr)
220 return _tb.GetEvents (bindingAttr);
223 public override FieldInfo GetField( string name, BindingFlags bindingAttr)
225 return _tb.GetField (name, bindingAttr);
228 public override FieldInfo[] GetFields( BindingFlags bindingAttr)
230 return _tb.GetFields (bindingAttr);
233 public override Type GetInterface (string name, bool ignoreCase)
235 return _tb.GetInterface (name, ignoreCase);
239 public override InterfaceMapping GetInterfaceMap (Type interfaceType)
241 return _tb.GetInterfaceMap (interfaceType);
244 public override Type[] GetInterfaces()
246 return _tb.GetInterfaces ();
249 public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr)
251 return _tb.GetMember (name, type, bindingAttr);
254 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
256 return _tb.GetMembers (bindingAttr);
259 protected override MethodInfo GetMethodImpl (
260 string name, BindingFlags bindingAttr, Binder binder,
261 CallingConventions callConvention, Type[] types,
262 ParameterModifier[] modifiers)
265 return _tb.GetMethod (name, bindingAttr);
268 return _tb.GetMethod (name, bindingAttr, binder,
269 callConvention, types, modifiers);
272 public override MethodInfo[] GetMethods (BindingFlags bindingAttr)
274 return _tb.GetMethods (bindingAttr);
277 public override Type GetNestedType (string name, BindingFlags bindingAttr)
279 return _tb.GetNestedType (name, bindingAttr);
282 public override Type[] GetNestedTypes (BindingFlags bindingAttr)
284 return _tb.GetNestedTypes (bindingAttr);
287 public override PropertyInfo[] GetProperties (BindingFlags bindingAttr)
289 return _tb.GetProperties (bindingAttr);
292 protected override PropertyInfo GetPropertyImpl (
293 string name, BindingFlags bindingAttr, Binder binder,
294 Type returnType, Type[] types,
295 ParameterModifier[] modifiers)
297 throw CreateNotSupportedException ();
300 protected override bool HasElementTypeImpl ()
302 return _tb.HasElementType;
305 public override object InvokeMember (
306 string name, BindingFlags invokeAttr, Binder binder,
307 object target, object[] args,
308 ParameterModifier[] modifiers, CultureInfo culture,
309 string[] namedParameters)
311 return _tb.InvokeMember (name, invokeAttr, binder, target,
312 args, modifiers, culture, namedParameters);
315 protected override bool IsArrayImpl()
320 protected override bool IsByRefImpl()
325 protected override bool IsCOMObjectImpl()
330 protected override bool IsPointerImpl()
335 protected override bool IsPrimitiveImpl()
340 protected override bool IsValueTypeImpl()
345 public override bool IsDefined (Type attributeType, bool inherit)
347 return _tb.IsDefined (attributeType, inherit);
350 public override Type MakeArrayType ()
352 return new ArrayType (this, 0);
355 public override Type MakeArrayType (int rank)
358 throw new IndexOutOfRangeException ();
359 return new ArrayType (this, rank);
362 public override Type MakeByRefType ()
364 return new ByRefType (this);
367 public override Type MakePointerType ()
369 return new PointerType (this);
372 public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
374 _tb.SetCustomAttribute (customBuilder);
378 public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
380 SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
383 private Exception CreateNotSupportedException ()
385 return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
388 void _EnumBuilder.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
390 throw new NotImplementedException ();
393 void _EnumBuilder.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
395 throw new NotImplementedException ();
398 void _EnumBuilder.GetTypeInfoCount (out uint pcTInfo)
400 throw new NotImplementedException ();
403 void _EnumBuilder.Invoke (uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
405 throw new NotImplementedException ();