private void FillUpNamedParameters(LocalCodeExecutionContext localCodeExecutionContext, IExecutable function, Dictionary <StrongIdentifierValue, Value> namedParameters) { var varsStorage = localCodeExecutionContext.Storage.VarStorage; var usedParameters = new List <StrongIdentifierValue>(); foreach (var namedParameter in namedParameters) { var parameterName = namedParameter.Key; #if DEBUG //Log($"parameterName = {parameterName}"); #endif var kindOfParameterName = parameterName.KindOfName; switch (kindOfParameterName) { case KindOfName.Var: break; case KindOfName.Concept: parameterName = NameHelper.CreateName($"@{parameterName.NameValue}"); break; default: throw new ArgumentOutOfRangeException(nameof(kindOfParameterName), kindOfParameterName, null); } #if DEBUG //Log($"parameterName (after) = {parameterName}"); #endif if (function.ContainsArgument(parameterName)) { usedParameters.Add(parameterName); varsStorage.SetValue(parameterName, namedParameter.Value); } else { throw new NotImplementedException(); } } #if DEBUG //Log($"usedParameters = {usedParameters.WriteListToString()}"); #endif var argumentsList = function.Arguments; if (usedParameters.Count < argumentsList.Count) { foreach (var argument in argumentsList) { if (usedParameters.Contains(argument.Name)) { continue; } #if DEBUG //Log($"argument = {argument}"); #endif if (argument.HasDefaultValue) { varsStorage.SetValue(argument.Name, argument.DefaultValue); continue; } else { throw new NotImplementedException(); } } } }