public override void Emit(AffeCompilerState state) { ILGenerator il = state.ILGenerator; LocalBuilder array = state.CheckOutLocal(typeof(object[]), true); il.Emit(OpCodes.Ldc_I4, this.Arguments.Count); il.Emit(OpCodes.Newarr, typeof(object)); il.Emit(OpCodes.Stloc, array); for (int i = 0; i < this.Arguments.Count; i++) { il.Emit(OpCodes.Ldloc, array); il.Emit(OpCodes.Ldc_I4, i); this.Arguments[i].Emit(state); il.Emit(OpCodes.Stelem_Ref); } this.Target.Emit(state); il.Emit(OpCodes.Ldstr, this.Name.Name); il.Emit(OpCodes.Ldloc, array); il.Emit(OpCodes.Call, PerformInvokeInfo); }
public virtual void EmitForInvocation(AffeCompilerState state) { this.Emit(state); if (this.Type.IsValueType) { LocalBuilder l = state.CheckOutLocal(this.Type, true); state.ILGenerator.Emit(OpCodes.Stloc, l); state.ILGenerator.Emit(OpCodes.Ldloca, l); } }