protected override void findChildNodes(FindNodesResult fnr) { if (OutputPosition != 2) fnr.LetNodes.Add(this); if (fnr.Invocations.Add(Invocation)) { foreach (var inp in new[] { Invocation.LambdaGetter, Invocation.Argument }) { fnr.NodesUsedAsFunctionInputs.Add(inp); inp.FindNodes(fnr); } } }
public override void FindNodes(FindNodesResult fnr) { fnr.AllNodes.Add(this); fnr.SingleUseNodes.Add(this); }
protected override void findChildNodes(FindNodesResult fnr) { }
protected override void findChildNodes(FindNodesResult fnr) { Left.FindNodes(fnr); Right.FindNodes(fnr); }
protected override void findChildNodes(FindNodesResult fnr) { fnr.NodesUsedAsFunctionInputs.Add(ReturnValue1); fnr.NodesUsedAsFunctionInputs.Add(ReturnValue2); ReturnValue1.FindNodes(fnr); ReturnValue2.FindNodes(fnr); }
protected override void findChildNodes(FindNodesResult fnr) { if (Call.Function.OutputNodes.Count(n => n != null) > 1) fnr.LetNodes.Add(this); if (fnr.Calls.Add(Call)) { foreach (var inp in Call.Inputs.Where(i => i != null)) { fnr.NodesUsedAsFunctionInputs.Add(inp); inp.FindNodes(fnr); } } }
public FindNodesResult FindNodes() { var fnr = new FindNodesResult(); foreach (var output in OutputNodes.Where(on => on != null)) output.FindNodes(fnr); foreach (var node in fnr.SingleUseNodes.OfType<LambdaInvocationOutputNode>()) if (fnr.LetNodes.OfType<LambdaInvocationOutputNode>().Any(lion => lion.Invocation == node.Invocation)) fnr.LetNodes.Add(node); return fnr; }
protected abstract void findChildNodes(FindNodesResult fnr);
public virtual void FindNodes(FindNodesResult fnr) { fnr.AllNodes.Add(this); if (fnr.MultiUseNodes.Contains(this)) return; if (fnr.SingleUseNodes.Contains(this)) { fnr.SingleUseNodes.Remove(this); fnr.MultiUseNodes.Add(this); fnr.LetNodes.Add(this); return; } fnr.SingleUseNodes.Add(this); findChildNodes(fnr); }
protected override void findChildNodes(FindNodesResult fnr) { Left.FindNodes(fnr); // If the two nodes are the same, this NAND is used to express a NOT. // getExpression() will recognize that and just output a unary NOT (¬). // In such a case, we should not allocate a variable for it if that is its only use. if (Right != Left) Right.FindNodes(fnr); }