private void EmitLoadToStack(ILGenerator generator) { generator.EmitLdarg(_delegateParameterIndex); if (_delegateParameter.ParameterType.IsByRef) { generator.EmitLdind(_delegateParameter.ParameterType.RemoveByRef()); } }
public override void EmitPrepare(ILGenerator generator) { base.EmitPrepare(generator); if (!_needLocalVariable) return; generator.EmitLdarg(_delegateParameterIndex); var dt = _delegateParameter.ParameterType.RemoveByRef(); var mt = _methodParameter.ParameterType.RemoveByRef(); if (_delegateParameter.ParameterType.IsByRef) generator.EmitLdind(dt); if (dt.IsValueType && !mt.IsValueType) generator.EmitBox(dt); else if (!mt.IsAssignableFrom(dt)) generator.EmitUnBoxAnyOrCastClass(mt); generator.EmitStloc(_localVariable.LocalIndex); }