Esempio n. 1
0
        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));
        }
Esempio n. 2
0
 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));
 }
Esempio n. 3
0
 static public int Emit(this MethodBody body, MethodInfo method)
 {
     return(body.Emit(body.Method.DeclaringType.Module.Import(method)));
 }
Esempio n. 4
0
 static public int Emit(this MethodBody body, TypeReference type)
 {
     body.Emit(OpCodes.Ldtoken, type);
     return(body.Emit(OpCodes.Call, __MethodBody.GetTypeFromHandle));
 }
Esempio n. 5
0
 static public int Emit(this MethodBody body, Type type)
 {
     return(body.Emit(body.Method.DeclaringType.Module.Import(type)));
 }
Esempio n. 6
0
 static public int Emit(this MethodBody body, System.Reflection.BindingFlags binding)
 {
     return(body.Emit(OpCodes.Ldc_I4, (int)binding));
 }