/// <inheritdoc/> public Value Call(IList <Value> paramsList, LocalCodeExecutionContext localCodeExecutionContext) { var operand = paramsList[0]; var anotation = paramsList[1]; return(_operatorHandler.Call(operand, anotation, localCodeExecutionContext)); }
/// <inheritdoc/> public Value Call(IDictionary <string, Value> paramsDict, Value anotation, LocalCodeExecutionContext localCodeExecutionContext) { var leftOperand = paramsDict[_leftOperandKey]; var rightOperand = paramsDict[_rightOperandKey]; return(_operatorHandler.Call(leftOperand, rightOperand, anotation, localCodeExecutionContext)); }
private void FillUpPositionedParameters(LocalCodeExecutionContext localCodeExecutionContext, IExecutable function, List <Value> positionedParameters) { var varsStorage = localCodeExecutionContext.Storage.VarStorage; var positionedParametersEnumerator = positionedParameters.GetEnumerator(); foreach (var argument in function.Arguments) { #if DEBUG //Log($"argument = {argument}"); #endif if (!positionedParametersEnumerator.MoveNext()) { if (argument.HasDefaultValue) { varsStorage.SetValue(argument.Name, argument.DefaultValue); break; } throw new NotImplementedException(); } var parameterItem = positionedParametersEnumerator.Current; #if DEBUG //Log($"parameterItem = {parameterItem}"); #endif varsStorage.SetValue(argument.Name, parameterItem); } }
private CodeFrame ConvertExecutableToCodeFrame(IExecutable function, KindOfFunctionParameters kindOfParameters, Dictionary <StrongIdentifierValue, Value> namedParameters, List <Value> positionedParameters) { #if DEBUG //Log($"kindOfParameters = {kindOfParameters}"); //Log($"namedParameters = {namedParameters.WriteDict_1_ToString()}"); //Log($"positionedParameters = {positionedParameters.WriteListToString()}"); #endif var currentLocalContext = _currentCodeFrame.LocalContext; var storagesList = currentLocalContext.Storage.GetStorages(); #if DEBUG //Log($"storagesList.Count = {storagesList.Count}"); //foreach(var tmpStorage in storagesList) //{ // Log($"tmpStorage = {tmpStorage}"); //} #endif var localCodeExecutionContext = new LocalCodeExecutionContext(); var localStorageSettings = RealStorageSettingsHelper.Create(_context, storagesList.ToList()); var newStorage = new LocalStorage(localStorageSettings); localCodeExecutionContext.Storage = newStorage; switch (kindOfParameters) { case KindOfFunctionParameters.NoParameters: if (function.Arguments.Any()) { throw new NotImplementedException(); } break; case KindOfFunctionParameters.PositionedParameters: FillUpPositionedParameters(localCodeExecutionContext, function, positionedParameters); break; case KindOfFunctionParameters.NamedParameters: FillUpNamedParameters(localCodeExecutionContext, function, namedParameters); break; default: throw new ArgumentOutOfRangeException(nameof(kindOfParameters), kindOfParameters, null); } localCodeExecutionContext.Holder = currentLocalContext.Holder; var codeFrame = new CodeFrame(); codeFrame.CompiledFunctionBody = function.CompiledFunctionBody; codeFrame.LocalContext = localCodeExecutionContext; var processInfo = new ProcessInfo(); codeFrame.ProcessInfo = processInfo; processInfo.CodeFrame = codeFrame; codeFrame.Metadata = function.CodeEntity; #if DEBUG //Log($"codeFrame = {codeFrame}"); #endif return(codeFrame); }
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(); } } } }