| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447 |
- //
- // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- //
- // System.Reflection.Emit/EnumBuilder.cs
- //
- // Author:
- // Paolo Molaro ([email protected])
- //
- // (C) 2001 Ximian, Inc. http://www.ximian.com
- //
- #if MONO_FEATURE_SRE
- using System;
- using System.Reflection;
- using System.Reflection.Emit;
- using System.Globalization;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- namespace System.Reflection.Emit {
- #if !MOBILE
- [ComVisible (true)]
- [ComDefaultInterface (typeof (_EnumBuilder))]
- [ClassInterface (ClassInterfaceType.None)]
- partial class EnumBuilder : _EnumBuilder
- {
- void _EnumBuilder.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
- {
- throw new NotImplementedException ();
- }
- void _EnumBuilder.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
- {
- throw new NotImplementedException ();
- }
- void _EnumBuilder.GetTypeInfoCount (out uint pcTInfo)
- {
- throw new NotImplementedException ();
- }
- void _EnumBuilder.Invoke (uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
- {
- throw new NotImplementedException ();
- }
- }
- #endif
- public sealed partial class EnumBuilder : TypeInfo
- {
- private TypeBuilder _tb;
- private FieldBuilder _underlyingField;
- private Type _underlyingType;
- internal EnumBuilder (ModuleBuilder mb, string name, TypeAttributes visibility, Type underlyingType)
- {
- _tb = new TypeBuilder (mb, name, (visibility | TypeAttributes.Sealed),
- typeof(Enum), null, PackingSize.Unspecified, 0, null);
- _underlyingType = underlyingType;
- _underlyingField = _tb.DefineField ("value__", underlyingType,
- (FieldAttributes.SpecialName | FieldAttributes.Private | FieldAttributes.RTSpecialName));
- setup_enum_type (_tb);
- }
- internal TypeBuilder GetTypeBuilder ()
- {
- return _tb;
- }
- internal override Type InternalResolve ()
- {
- return _tb.InternalResolve ();
- }
- internal override Type RuntimeResolve () {
- return _tb.RuntimeResolve ();
- }
- public override Assembly Assembly {
- get {
- return _tb.Assembly;
- }
- }
- public override string AssemblyQualifiedName {
- get {
- return _tb.AssemblyQualifiedName;
- }
- }
- public override Type BaseType {
- get {
- return _tb.BaseType;
- }
- }
- public override Type DeclaringType {
- get {
- return _tb.DeclaringType;
- }
- }
- public override string FullName {
- get {
- return _tb.FullName;
- }
- }
- public override Guid GUID {
- get {
- return _tb.GUID;
- }
- }
- public override Module Module {
- get {
- return _tb.Module;
- }
- }
- public override string Name {
- get {
- return _tb.Name;
- }
- }
- public override string Namespace {
- get {
- return _tb.Namespace;
- }
- }
- public override Type ReflectedType {
- get {
- return _tb.ReflectedType;
- }
- }
- public override RuntimeTypeHandle TypeHandle {
- get {
- return _tb.TypeHandle;
- }
- }
- public TypeToken TypeToken {
- get {
- return _tb.TypeToken;
- }
- }
- public FieldBuilder UnderlyingField {
- get {
- return _underlyingField;
- }
- }
- public override Type UnderlyingSystemType {
- get {
- return _underlyingType;
- }
- }
- public Type CreateType ()
- {
- Type res = _tb.CreateType ();
- return res;
- }
- public TypeInfo CreateTypeInfo()
- {
- return _tb.CreateTypeInfo ();
- }
- public override Type GetEnumUnderlyingType ()
- {
- return _underlyingType;
- }
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void setup_enum_type (Type t);
- public FieldBuilder DefineLiteral (string literalName, object literalValue)
- {
- Type fieldType = this;
- FieldBuilder fieldBuilder = _tb.DefineField (literalName,
- fieldType, (FieldAttributes.Literal |
- (FieldAttributes.Static | FieldAttributes.Public)));
- fieldBuilder.SetConstant (literalValue);
- return fieldBuilder;
- }
- protected override TypeAttributes GetAttributeFlagsImpl ()
- {
- return _tb.attrs;
- }
- protected override ConstructorInfo GetConstructorImpl (
- BindingFlags bindingAttr, Binder binder, CallingConventions callConvention,
- Type[] types, ParameterModifier[] modifiers)
- {
- return _tb.GetConstructor (bindingAttr, binder, callConvention, types,
- modifiers);
- }
- [ComVisible (true)]
- public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
- {
- return _tb.GetConstructors (bindingAttr);
- }
- public override object[] GetCustomAttributes(bool inherit)
- {
- return _tb.GetCustomAttributes (inherit);
- }
- public override object[] GetCustomAttributes(Type attributeType, bool inherit)
- {
- return _tb.GetCustomAttributes (attributeType, inherit);
- }
- public override Type GetElementType()
- {
- return _tb.GetElementType ();
- }
- public override EventInfo GetEvent( string name, BindingFlags bindingAttr)
- {
- return _tb.GetEvent (name, bindingAttr);
- }
- public override EventInfo[] GetEvents()
- {
- return _tb.GetEvents ();
- }
- public override EventInfo[] GetEvents( BindingFlags bindingAttr)
- {
- return _tb.GetEvents (bindingAttr);
- }
- public override FieldInfo GetField( string name, BindingFlags bindingAttr)
- {
- return _tb.GetField (name, bindingAttr);
- }
- public override FieldInfo[] GetFields( BindingFlags bindingAttr)
- {
- return _tb.GetFields (bindingAttr);
- }
- public override Type GetInterface (string name, bool ignoreCase)
- {
- return _tb.GetInterface (name, ignoreCase);
- }
- [ComVisible (true)]
- public override InterfaceMapping GetInterfaceMap (Type interfaceType)
- {
- return _tb.GetInterfaceMap (interfaceType);
- }
- public override Type[] GetInterfaces()
- {
- return _tb.GetInterfaces ();
- }
- public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr)
- {
- return _tb.GetMember (name, type, bindingAttr);
- }
- public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
- {
- return _tb.GetMembers (bindingAttr);
- }
- protected override MethodInfo GetMethodImpl (
- string name, BindingFlags bindingAttr, Binder binder,
- CallingConventions callConvention, Type[] types,
- ParameterModifier[] modifiers)
- {
- if (types == null) {
- return _tb.GetMethod (name, bindingAttr);
- }
- return _tb.GetMethod (name, bindingAttr, binder,
- callConvention, types, modifiers);
- }
- public override MethodInfo[] GetMethods (BindingFlags bindingAttr)
- {
- return _tb.GetMethods (bindingAttr);
- }
- public override Type GetNestedType (string name, BindingFlags bindingAttr)
- {
- return _tb.GetNestedType (name, bindingAttr);
- }
- public override Type[] GetNestedTypes (BindingFlags bindingAttr)
- {
- return _tb.GetNestedTypes (bindingAttr);
- }
- public override PropertyInfo[] GetProperties (BindingFlags bindingAttr)
- {
- return _tb.GetProperties (bindingAttr);
- }
- protected override PropertyInfo GetPropertyImpl (
- string name, BindingFlags bindingAttr, Binder binder,
- Type returnType, Type[] types,
- ParameterModifier[] modifiers)
- {
- throw CreateNotSupportedException ();
- }
- protected override bool HasElementTypeImpl ()
- {
- return _tb.HasElementType;
- }
- public override object InvokeMember (
- string name, BindingFlags invokeAttr, Binder binder,
- object target, object[] args,
- ParameterModifier[] modifiers, CultureInfo culture,
- string[] namedParameters)
- {
- return _tb.InvokeMember (name, invokeAttr, binder, target,
- args, modifiers, culture, namedParameters);
- }
- protected override bool IsArrayImpl()
- {
- return false;
- }
- protected override bool IsByRefImpl()
- {
- return false;
- }
- protected override bool IsCOMObjectImpl()
- {
- return false;
- }
- protected override bool IsPointerImpl()
- {
- return false;
- }
- protected override bool IsPrimitiveImpl()
- {
- return false;
- }
- protected override bool IsValueTypeImpl()
- {
- return true;
- }
- public override bool IsDefined (Type attributeType, bool inherit)
- {
- return _tb.IsDefined (attributeType, inherit);
- }
- public override Type MakeArrayType ()
- {
- return new ArrayType (this, 0);
- }
- public override Type MakeArrayType (int rank)
- {
- if (rank < 1)
- throw new IndexOutOfRangeException ();
- return new ArrayType (this, rank);
- }
- public override Type MakeByRefType ()
- {
- return new ByRefType (this);
- }
- public override Type MakePointerType ()
- {
- return new PointerType (this);
- }
- public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
- {
- _tb.SetCustomAttribute (customBuilder);
- }
- [ComVisible (true)]
- public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
- {
- SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
- }
- private Exception CreateNotSupportedException ()
- {
- return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
- }
- internal override bool IsUserType {
- get {
- return false;
- }
- }
- public override bool IsConstructedGenericType {
- get { return false; }
- }
- public override bool IsAssignableFrom (TypeInfo typeInfo)
- {
- return base.IsAssignableFrom (typeInfo);
- }
- public override bool IsTypeDefinition => true;
- }
- }
- #endif
|