static Expression UnwindBoundExpression(BoundExpression be) { if (be.Variable.AssumedValue != null && be.Variable.AssumedValue is BoundExpression) { return UnwindBoundExpression(be.Variable.AssumedValue as BoundExpression); } return be.Variable.AssumedValue ?? be; }
protected override bool Walk(BoundExpression node) { BoundExpression e = node; Dictionary<Variable, bool> loopcheck = new Dictionary<Variable, bool>(); while (e.Variable.AssumedValue is BoundExpression) { var be = e.Variable.AssumedValue as BoundExpression; if (loopcheck.ContainsKey(e.Variable)) { e = node; break; } loopcheck.Add(e.Variable, true); if (!CanAlias(node.Variable, be.Variable)) { e = node; break; } if (e.Variable.Lift) { break; } e = be; } node.Variable = e.Variable; return base.Walk(node); }
protected override bool Walk(BoundExpression node) { if (references.ContainsKey(node.Variable)) { references[node.Variable]++; } else { references[node.Variable] = 1; } return base.Walk(node); }
protected internal override bool Walk(BoundExpression node) { node.Ref = Reference(node.Variable); return true; }
// BoundExpression protected internal override bool Walk(BoundExpression node) { bool defined; if (TryCheckVariable(node.Variable, out defined)) { node.IsDefined = defined; } return true; }
// BoundExpression private void DefaultWalk(BoundExpression node) { Walk(node); PostWalk(node); }
protected internal override bool Walk(BoundExpression node) { node.Ref = GetOrMakeRef(node.Variable); return true; }
protected override bool Walk(BoundExpression node) { var var = node.Variable; if (!refmap.ContainsKey(var)) { refmap[var] = 1; } else { refmap[var]++; } return base.Walk(node); }