Example #1
0
        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));
        }
Example #2
0
        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()));
        }
Example #3
0
        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));
        }