private void OutputTuple(BoundTuple node, string prefix) { builder.AddFragment(new OutputFragment($"{prefix}(", DefaultColour)); foreach (var expression in node.Expressions) { Output(expression, string.Empty); if (!node.IsLast(expression)) { builder.AddFragment(new OutputFragment(", ", DefaultColour)); } } builder.AddFragment(new OutputFragment(")", DefaultColour)); }
private object EvaluateTuple(BoundTuple expression) { var tupleSymbol = (TupleSymbol)expression.ValueType; var minLength = Math.Min(expression.Expressions.Length, tupleSymbol.Variables.Count); var variables = new Dictionary <VariableSymbol, object>(); var orderBuilder = ImmutableArray.CreateBuilder <VariableSymbol>(); for (int index = 0; index < minLength; index++) { var evaluate = EvaluateExpression(expression.Expressions[index]); var variable = tupleSymbol.Variables[index]; variables.Add(variable, evaluate); orderBuilder.Add(variable); } return(new TupleObject(variables, orderBuilder.ToImmutable())); }
private BoundExpression RewriteTuple(BoundTuple expression) { var builder = ImmutableArray.CreateBuilder <BoundExpression>(); bool isSame = true; for (int index = 0; index < expression.Expressions.Length; index++) { var rewrite = RewriteExpression(expression.Expressions[index]); builder.Add(rewrite); if (rewrite != expression.Expressions[index]) { isSame = false; } } if (isSame) { return(expression); } return(new BoundTuple(builder.ToImmutable(), expression.IsReadOnly)); }