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); }
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)); }
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); }