Ejemplo n.º 1
0
        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]);
                }
            }
        }
Ejemplo n.º 2
0
        public void addAssign(List <Identifier> sources, Identifier sink)
        {
            DFGNode sinkNode = _findNode(sink);

            foreach (Identifier i in sources)
            {
                DFGNode source = _findNode(i);
                source.addEdge(sinkNode);
            }
        }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
        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);
            }
            ;
        }
Ejemplo n.º 5
0
        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;
        }
Ejemplo n.º 6
0
 private void _addEdge(DFGNode source, DFGNode target)
 {
     source.addEdge(target);
 }