// CommaExpression private void DefaultWalk(CommaExpression node) { if (Walk(node)) { foreach (Expression e in node.Expressions) { WalkNode(e); } } PostWalk(node); }
// 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; }
// 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); } }