/// <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));
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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();
                    }
                }
            }
        }