コード例 #1
0
 public override void EmitLoad(ILGenerator generator)
 {
     EmitLoadToStack(generator);
     var mt = _methodParameter.ParameterType.RemoveByRef();
     var dt = _delegateParameter.ParameterType.RemoveByRef();
     if (dt.IsValueType && !mt.IsValueType)
         generator.EmitBox(dt);
     else if (!mt.IsAssignableFrom(dt))
         generator.EmitUnBoxAnyOrCastClass(mt);
 }
コード例 #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);
        }