public GeneratedVariable CreateFunc(Type returnType, GeneratedMethod method) { GeneratedMethod.TargettingSelf(); Type delegateType = GeneratedMethod.CreateDelegate(() => method, returnType); var returnValue = CreateVariable(delegateType); returnValue.AssignFrom(Instantiate(delegateType, new[] { typeof(object), typeof(IntPtr) })); return(returnValue); }
public GeneratedVariable CreateFunc(MethodInfo target) { method.TargettingSelf(); for (int counter = 1; counter <= target.GetParameters().Length; counter++) { method.LoadVariable(counter); } if (!context.TypeGenerationContext.TypesToComplete.Contains(generator.NestedType.Builder)) { context.TypeGenerationContext.TypesToComplete.Add(generator.NestedType.Builder); } var variable = context.CreateVariable(generator.NestedType.Builder); variable.AssignFrom(context.Instantiate(generator.Constructor)); Type delegateType = method.CreateDelegate(variable, generator.NestedType.EntryPoint, target.ReturnType); var returnValue = context.CreateVariable(delegateType); returnValue.AssignFrom(context.Instantiate(delegateType, new[] { typeof(object), typeof(IntPtr) })); return(returnValue); }
public void TargettingSelf() { GeneratedMethod.TargettingSelf(); }