Esempio n. 1
0
 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);
 }
Esempio n. 2
0
        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);
        }