X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=mcs%2Fclass%2Fcorlib%2FSystem.Reflection.Emit%2FDynamicMethod.cs;h=931573d5449459c3860e103b5dab2811d820ee2c;hb=e2b2d181084848f3c5dde2788370db1b79893c69;hp=6fb1600be4d387e84f83431602e66a1c48cc133f;hpb=89d1455a80ef13cddee5d79ec00c06055da3085c;p=mono.git diff --git a/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.cs b/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.cs index 6fb1600be4d..931573d5449 100644 --- a/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.cs +++ b/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.cs @@ -31,6 +31,7 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // +#if !FULL_AOT_RUNTIME using System; using System.Reflection; @@ -42,9 +43,10 @@ using System.Runtime.InteropServices; namespace System.Reflection.Emit { [ComVisible (true)] + [StructLayout (LayoutKind.Sequential)] public sealed class DynamicMethod : MethodInfo { -#pragma warning disable 169, 414 +#pragma warning disable 169, 414, 649 #region Sync with reflection.h private RuntimeMethodHandle mhandle; private string name; @@ -61,12 +63,13 @@ namespace System.Reflection.Emit { private IntPtr referenced_by; private Type owner; #endregion -#pragma warning restore 169, 414 +#pragma warning restore 169, 414, 649 private Delegate deleg; private MonoMethod method; private ParameterBuilder[] pinfo; internal bool creating; + private DynamicILInfo il_info; public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Module m) : this (name, returnType, parameterTypes, m, false) { } @@ -110,9 +113,12 @@ namespace System.Reflection.Emit { if (parameterTypes [i] == null) throw new ArgumentException ("Parameter " + i + " is null", "parameterTypes"); } + if (owner != null && (owner.IsArray || owner.IsInterface)) { + throw new ArgumentException ("Owner can't be an array or an interface."); + } if (m == null) - m = AnonHostModuleHolder.anon_host_module; + m = AnonHostModuleHolder.AnonHostModule; this.name = name; this.attributes = attributes | MethodAttributes.Static; @@ -213,9 +219,10 @@ namespace System.Reflection.Emit { throw new NotImplementedException (); } - [MonoTODO("Not implemented")] public DynamicILInfo GetDynamicILInfo () { - throw new NotImplementedException (); + if (il_info == null) + il_info = new DynamicILInfo (this); + return il_info; } public ILGenerator GetILGenerator () { @@ -254,6 +261,10 @@ namespace System.Reflection.Emit { return parameters == null ? 0 : parameters.Length; } + internal override Type GetParameterType (int pos) { + return parameters [pos]; + } + /* public override object Invoke (object obj, object[] parameters) { CreateDynMethod (); @@ -405,6 +416,12 @@ namespace System.Reflection.Emit { anon_host_module = ab.GetManifestModule (); } + + public static Module AnonHostModule { + get { + return anon_host_module; + } + } } } @@ -434,3 +451,4 @@ namespace System.Reflection.Emit { } } +#endif