public GeneratedVariable LoadValueAtIndex(Type objectType, MethodBodyContext context, int index) { var variable = context.CreateVariable(objectType); actions.Add(new LoadValueAtIndexAction(method, this, index)); actions.Add(new VariableAssignmentAction(() => method.MethodBuilder(), variable.LocalIndex)); return(variable); }
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); }