Esempio n. 1
0
        public IFunction FindFunction(string name, IReadOnlyList <TypeId> arguments)
        {
            var normalizedName = NormalizeFunctionName(name);

            if (!_functions.TryGetValue(normalizedName, out var functions))
            {
                return(null);
            }

            // find function with minimal conversion cost
            var       minCost     = int.MaxValue;
            IFunction minFunction = null;

            foreach (var function in functions)
            {
                if (function.Arguments.Count != arguments.Count)
                {
                    continue;
                }

                var cost = _converter.ComputeConversionCost(arguments, function.Arguments);
                if (cost < minCost)
                {
                    minCost     = cost;
                    minFunction = function;
                }
            }

            return(minFunction);
        }