コード例 #1
0
 private void EmitLoadToStack(ILGenerator generator)
 {
     generator.EmitLdarg(_delegateParameterIndex);
     if (_delegateParameter.ParameterType.IsByRef)
     {
         generator.EmitLdind(_delegateParameter.ParameterType.RemoveByRef());
     }
 }
コード例 #2
0
        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);
        }