public void EmitInitialize(IBlockContext context) { rangeRef = context.DeclareHiddenLocal(typeof(Range)); rangeRef.EmitStore(context); currentIndex = context.DeclareHiddenLocal(typeof(long)); rangeRef.EmitLoad(context); context.IL.Emit(OpCodes.Ldfld, typeof(Range).GetField("from")); context.IL.Emit(OpCodes.Ldc_I4_1); context.IL.Emit(OpCodes.Conv_I8); context.IL.Emit(OpCodes.Sub); currentIndex.EmitStore(context); }
public override void Prepare(IBlockContext context) { if (preparedResult != null) { return; } TO2Type targetType = target.ResultType(context); IMethodInvokeEmitter methodInvoker = targetType.FindMethod(context.ModuleContext, methodName) ?.Create(context, arguments.Select(arg => arg.ResultType(context)).ToList(), this); if (methodInvoker == null || !methodInvoker.IsAsync || !context.IsAsync) { return; } EmitCode(context, false); preparedResult = context.DeclareHiddenLocal(methodInvoker.ResultType.GeneratedType(context.ModuleContext)); preparedResult.EmitStore(context); }