Example #1
0
        private Reference GetDelegate(AbstractTypeEmitter invocation, MethodEmitter invokeMethodOnTarget)
        {
            var closedDelegateType   = delegateType.MakeGenericType(GenericTypeParameterBuilderExtender.AsTypes(invocation.GenericTypeParams));
            var localReference       = invokeMethodOnTarget.CodeBuilder.DeclareLocal(closedDelegateType);
            var closedMethodOnTarget = method.MethodOnTarget.MakeGenericMethod(GenericTypeParameterBuilderExtender.AsTypes(invocation.GenericTypeParams));
            var localTarget          = new ReferenceExpression(targetReference);

            invokeMethodOnTarget.CodeBuilder.AddStatement(
                SetDelegate(localReference, localTarget, closedDelegateType, closedMethodOnTarget));
            return(localReference);
        }
Example #2
0
 public BindDelegateExpression(Type @delegate, Expression owner, MethodInfo methodToBindTo,
                               GenericTypeParameterBuilder[] genericTypeParams)
 {
     delegateCtor        = @delegate.GetConstructors()[0];
     this.methodToBindTo = methodToBindTo;
     if (@delegate.IsGenericTypeDefinition())
     {
         var closedDelegate = @delegate.MakeGenericType(GenericTypeParameterBuilderExtender.AsTypes(genericTypeParams));
         delegateCtor        = TypeBuilder.GetConstructor(closedDelegate, delegateCtor);
         this.methodToBindTo = methodToBindTo.MakeGenericMethod(GenericTypeParameterBuilderExtender.AsTypes(genericTypeParams));
     }
     this.owner = owner;
 }