示例#1
0
 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);
         }
     }
 }
示例#2
0
 public override void FindNodes(FindNodesResult fnr)
 {
     fnr.AllNodes.Add(this);
     fnr.SingleUseNodes.Add(this);
 }
示例#3
0
 protected override void findChildNodes(FindNodesResult fnr)
 {
 }
示例#4
0
 protected override void findChildNodes(FindNodesResult fnr)
 {
     Left.FindNodes(fnr);
     Right.FindNodes(fnr);
 }
示例#5
0
 protected override void findChildNodes(FindNodesResult fnr)
 {
     fnr.NodesUsedAsFunctionInputs.Add(ReturnValue1);
     fnr.NodesUsedAsFunctionInputs.Add(ReturnValue2);
     ReturnValue1.FindNodes(fnr);
     ReturnValue2.FindNodes(fnr);
 }
示例#6
0
 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);
         }
     }
 }
示例#7
0
 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;
 }
示例#8
0
 protected abstract void findChildNodes(FindNodesResult fnr);
示例#9
0
            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);
            }
示例#10
0
 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);
 }