public void addDeferredInvocation(DeferredInvocation di, DFG functionGraph, List <List <Identifier> > sources) { // create invocation node //DFGNode dfgni = new DFGNode(invc); Guid subgraphId = Guid.NewGuid(); //addNode(dfgni); // add the copied graph nodes to this graph foreach (DFGNode dfgn in functionGraph.nodes) { dfgn.subGraphId = subgraphId; addNode(dfgn); } // hook up the return node to the invocation node //functionGraph.returnNode.addEdge(dfgni); //if (functionGraph.returnNode == null) //{ // functionGraph.returnNode //} functionGraph.returnNode.addEdge(di.invocationNode); // hook up actual args to formal args for (int i = 0; i < sources.Count; i++) { List <Identifier> paramSources = sources[i]; foreach (Identifier ident in paramSources) { DFGNode source = _findNode(ident); source.addEdge(functionGraph._formalParams[i]); } } }
public void addAssign(List <Identifier> sources, Identifier sink) { DFGNode sinkNode = _findNode(sink); foreach (Identifier i in sources) { DFGNode source = _findNode(i); source.addEdge(sinkNode); } }
public void addReturn(List <Identifier> sources) { _return = new DFGNode(DFGNodeType.Return, "return"); if (sources != null) { foreach (Identifier i in sources) { DFGNode source = _findNode(i); source.addEdge(_return); } } _nodes.Add(_return); }
public void addAddition(List <Identifier> sources, Identifier addition) { DFGNode sinkNode = _findNode(addition); if (sinkNode == null) { sinkNode = new DFGNode(DFGNodeType.Addition, addition.name); addNode(sinkNode); } foreach (Identifier i in sources) { DFGNode source = _findNode(i); source.addEdge(sinkNode); } ; }
private void _replace(DFGNode newNode, DFGNode nodeToReplace) { foreach (DFGNode n in nodeToReplace.adjacencyList) { n.parents.Remove(nodeToReplace); newNode.addEdge(n); } foreach (DFGNode n in nodeToReplace.parents) { n.adjacencyList.Remove(nodeToReplace); n.addEdge(newNode); } nodeToReplace.adjacencyList.Clear(); nodeToReplace.parents.Clear(); nodeToReplace = newNode; }
private void _addEdge(DFGNode source, DFGNode target) { source.addEdge(target); }