static public int Emit(this MethodBody body, MethodReference method) { ////if (method is GenericInstanceMethod) { return body.Emit(method.MakeGenericMethod((method as GenericInstanceMethod).GenericArguments.Select(_Type => body.Method.GenericParameterType(_Type.Name)).ToArray())); } //if (method.GenericParameters.Count > 0) //{ // // var _type1 = body.Method.Resolve(method.DeclaringType.MakeGenericType(body.Method.DeclaringType.GenericParameters)); // //var _method = new MethodReference(method.Name, method.Module.Import(typeof(void))); // //foreach (var _type in method.GenericParameters) { _method.GenericParameters.Add(new GenericParameter(_type.Name, _method)); } // //_method.ReturnType = method.GenericParameters.Contains(method.ReturnType) ? _method.GenericParameters.First(_Type => _Type.Name == method.ReturnType.Name) : method.ReturnType; // //_method.DeclaringType = method.DeclaringType.MakeGenericType(body.Method.DeclaringType.GenericParameters.Take(method.DeclaringType.GenericParameters.Count).Concat(_method.GenericParameters)); // //foreach (var _parameter in method.Parameters) { _method.Parameters.Add(new ParameterDefinition(_parameter.Name, _parameter.Attributes, method.GenericParameters.Contains(_parameter.ParameterType) ? _method.GenericParameters.First(_Type => _Type.Name == _parameter.ParameterType.Name) : (_parameter.ParameterType.IsGenericParameter ? (_method.DeclaringType as GenericInstanceType).GenericArguments.First(_Type => _Type.Name == _parameter.ParameterType.Name) : _parameter.ParameterType))); } // body.Emit(OpCodes.Ldtoken, method); // body.Emit(OpCodes.Ldtoken, method.DeclaringType); // return body.Emit(OpCodes.Call, __MethodBody.GetMethodFromHandle); // //return body.Emit(_method); //} body.Emit(OpCodes.Ldtoken, method); //body.Emit(OpCodes.Ldtoken, body.Resolve(method)); body.Emit(OpCodes.Ldtoken, body.Method.Resolve(method.DeclaringType)); return(body.Emit(OpCodes.Call, __MethodBody.GetMethodFromHandle)); }
static public int Emit(this MethodBody body, MethodReference method) { body.Emit(OpCodes.Ldtoken, method); body.Emit(OpCodes.Ldtoken, method.DeclaringType); return(body.Emit(OpCodes.Call, __MethodBody.GetMethodFromHandle)); }
static public int Emit(this MethodBody body, MethodInfo method) { return(body.Emit(body.Method.DeclaringType.Module.Import(method))); }
static public int Emit(this MethodBody body, TypeReference type) { body.Emit(OpCodes.Ldtoken, type); return(body.Emit(OpCodes.Call, __MethodBody.GetTypeFromHandle)); }
static public int Emit(this MethodBody body, Type type) { return(body.Emit(body.Method.DeclaringType.Module.Import(type))); }
static public int Emit(this MethodBody body, System.Reflection.BindingFlags binding) { return(body.Emit(OpCodes.Ldc_I4, (int)binding)); }