public static IFunction Call(this IFunction function, IFunction[] arguments, string output,
                                     CompilationContext info, CallSite?callSite = null)
        {
            if (function == null)
            {
                throw new ArgumentNullException(nameof(function));
            }
            if (callSite.HasValue)
            {
                info.Push(callSite.Value);
            }
            var retval = function.CallInternal(arguments, output, info);

            if (callSite.HasValue)
            {
                info.Pop();
            }
            return(retval);
        }