BananaHook.ReflectionDetourNotifier.InterceptorFuncBuilder.CallOriginal C# (CSharp) Method

CallOriginal() private method

ret = _detour.Invoke(...);
private CallOriginal ( MethodInfo mi, IEnumerable parameters, System.Linq.Expressions.ParameterExpression eventArgs ) : void
mi System.Reflection.MethodInfo
parameters IEnumerable
eventArgs System.Linq.Expressions.ParameterExpression
return void
            private void CallOriginal(MethodInfo mi, IEnumerable<ParameterExpression> parameters,
                ParameterExpression eventArgs)
            {
                Func<object[], DetourCallbackEventArgs, object> actualCall = (p, e) =>
                {
                    object ret = null;
                    if (e.CallOriginal)
                    {
                        ret = _notifier._detour.Invoke(p);
                    }
                    if (e.ReturnValue != null)
                    {
                        ret = e.ReturnValue;
                    }
                    return ret;
                };
                NewArrayExpression parametersAsArray = Expression.NewArrayInit(typeof(object),
                    from p in parameters select Expression.Convert(p, typeof(object)));
                MethodCallExpression callOriginal = Expression.Call(Expression.Constant(actualCall.Target),
                    actualCall.Method,
                    parametersAsArray, eventArgs);

                if (HasNoReturnValue(mi))
                {
                    _body.Add(callOriginal);
                    _body.Add(Expression.Empty());
                }
                else
                {
                    _body.Add(Expression.Convert(callOriginal, mi.ReturnType));
                }
            }