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;
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) {
}
}
if (m == null)
- m = AnonHostModuleHolder.anon_host_module;
+ m = AnonHostModuleHolder.AnonHostModule;
this.name = name;
this.attributes = attributes | MethodAttributes.Static;
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern void create_dynamic_method (DynamicMethod m);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void destroy_dynamic_method (DynamicMethod m);
-
private void CreateDynMethod () {
if (mhandle.Value == IntPtr.Zero) {
if (ilgen == null || ilgen.ILOffset == 0)
}
}
- ~DynamicMethod ()
- {
- destroy_dynamic_method (this);
- }
-
[ComVisible (true)]
public Delegate CreateDelegate (Type delegateType)
{
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 () {
return parameters == null ? 0 : parameters.Length;
}
+ internal override Type GetParameterType (int pos) {
+ return parameters [pos];
+ }
+
/*
public override object Invoke (object obj, object[] parameters) {
CreateDynMethod ();
anon_host_module = ab.GetManifestModule ();
}
+
+ public static Module AnonHostModule {
+ get {
+ return anon_host_module;
+ }
+ }
}
}
throw new InvalidOperationException ();
}
- public int GetToken (MemberInfo member) {
+ public int GetToken (MemberInfo member, bool create_open_instance) {
return m.AddRef (member);
}