Beispiel #1
0
        public override int Run(InterpretedFrame frame)
        {
            int first = frame.StackIndex - _argumentCount;

            object[] args = new object[1 + _argumentCount];
            args[0] = _site;
            for (int i = 0; i < _argumentCount; i++)
            {
                args[1 + i] = frame.Data[first + i];
            }

            object ret = _target.InvokeInstance(_targetDelegate, args);

            if (_isVoid)
            {
                frame.StackIndex = first;
            }
            else
            {
                frame.Data[first] = ret;
                frame.StackIndex  = first + 1;
            }

            return(1);
        }
Beispiel #2
0
            public object CallWithInstance(object[] args, out bool shouldOptimize)
            {
                shouldOptimize = TrackUsage(args);

                try {
                    if (_caller != null)
                    {
                        return(_caller.InvokeInstance(_instanceBuilder(args), GetArguments(args)));
                    }

                    return(_mi.Invoke(_instanceBuilder(args), GetArguments(args)));
                } catch (TargetInvocationException tie) {
                    ExceptionHelpers.UpdateForRethrow(tie.InnerException);
                    throw tie.InnerException;
                }
            }