Exemple #1
0
        static INamedExpressionTuple AssignArguments(NamedCollection <IArgumentInstance> instances, INamedExpressionTuple arguments)
        {
            var result = new NamedExpressionTuple();
            var o      = arguments.Tuple.Count - instances.Count;

            foreach (var instance in instances)
            {
                // TODO: check that conversion exists
                result.Tuple.Add(arguments.Tuple[o]);
                arguments.Tuple.RemoveAt(o);
            }
            // TODO: check that enough arguments are given
            return(result);
        }
Exemple #2
0
        static IExpression ParseFunctionOverloads(IList <IFunctionInstance> pool, INamedExpressionTuple leftArguments, IEnumerator <TokenData> tokens, IContext context, ref bool done)
        {
            var range = tokens.Current.Range;
            INamedExpressionTuple rightArguments = new NamedExpressionTuple();

            if (!tokens.MoveNext())
            {
                done = true;
                return(CreateFunctionInvocation(pool, range, leftArguments, rightArguments));
            }

            var filteredPool = FilterFunctionLeftArguments(pool, leftArguments);

            filteredPool = ParseAndFilterFunctionRightArguments(filteredPool, ref rightArguments, tokens, context, ref done);
            if (filteredPool.Count != 1)
            {
                return(null);
            }
            // TODO: proper error handling
            return(CreateFunctionInvocation(filteredPool.First(), range, leftArguments, rightArguments));
        }
Exemple #3
0
        static IExpression ExtractResultValues(ILocalValueScope localValues, IExpression result, ArgumentInstanceCollection results)
        {
            if (results.IsEmpty())
            {
                return(null);
            }
            if (results.Count == 1 && results.First().Name == null)
            {
                return(result);
            }
            var expressionTuple = new NamedExpressionTuple();

            foreach (var namedResult in results)
            {
                var value = localValues[namedResult];
                expressionTuple.Tuple.Add(
                    new NamedExpression {
                    Name       = namedResult.Name,
                    Expression = value
                });
            }
            return(expressionTuple);
        }