Beispiel #1
0
 // CommaExpression
 private void DefaultWalk(CommaExpression node)
 {
     if (Walk(node))
     {
         foreach (Expression e in node.Expressions)
         {
             WalkNode(e);
         }
     }
     PostWalk(node);
 }
Beispiel #2
0
 // CommaExpression
 private void Dump(CommaExpression node)
 {
     Out(String.Format(".comma ({0}) {{", node.ValueIndex), Flow.NewLine);
     Indent();
     for (int i = 0; i < node.Expressions.Count; i++)
     {
         WalkNode(node.Expressions[i]);
         Out(",", Flow.NewLine);
     }
     Dedent();
     Out("}", Flow.NewLine);
 }
 public CommaAddress(CommaExpression address, List <EvaluationAddress> addresses)
     : base(address)
 {
     _addrs = addresses;
 }
 public CommaAddress(CommaExpression address, List<EvaluationAddress> addresses)
     : base(address) {
     _addrs = addresses;
 }
Beispiel #5
0
 // CommaExpression
 private void DefaultWalk(CommaExpression node)
 {
     if (Walk(node)) {
         foreach (Expression e in node.Expressions) {
             WalkNode(e);
         }
     }
     PostWalk(node);
 }
Beispiel #6
0
        // CommaExpression
        private Expression Rewrite(CommaExpression node)
        {
            ReadOnlyCollection <Expression> expressions = node.Expressions;
            int index = node.ValueIndex;

            Expression[] clone  = null;
            Expression   result = null;

            for (int i = 0; i < expressions.Count; i++)
            {
                Expression expression = expressions[i];
                Expression rewritten  = RewriteExpression(expression);

                if ((object)expression != (object)rewritten)
                {
                    if (clone == null)
                    {
                        int size = expressions.Count;
                        // If the result is not at the end of the comma,
                        // we need an extra element for the result temp.
                        if (index < expressions.Count - 1)
                        {
                            size++;
                        }
                        clone = new Expression[size];
                        for (int j = 0; j < i; j++)
                        {
                            Expression expr = expressions[j];
                            if (j == index)
                            {
                                // This expression is not the last (j < i < expressions.Count)
                                Debug.Assert(j < expressions.Count - 1);
                                result = ToTemp(expr, out expr);
                            }
                            clone[j] = expr;
                        }
                    }
                }

                if (clone != null)
                {
                    if (i == index && index < expressions.Count - 1)
                    {
                        result = ToTemp(rewritten, out rewritten);
                    }
                    clone[i] = rewritten;
                }
            }

            if (clone != null)
            {
                if (result != null)
                {
                    Debug.Assert(index < expressions.Count - 1);
                    Debug.Assert(clone[clone.Length - 1] == null);
                    clone[clone.Length - 1] = result;
                }
                return(Ast.Comma(clone));
            }
            else
            {
                return(node);
            }
        }