+ private void analyzeFlowLoopNode(MethodDescriptor md, SymbolTable nametable, LoopNode ln,
+ NodeTupleSet implicitFlowTupleSet) {
+
+ if (ln.getType() == LoopNode.WHILELOOP || ln.getType() == LoopNode.DOWHILELOOP) {
+
+ NodeTupleSet condTupleNode = new NodeTupleSet();
+ analyzeFlowExpressionNode(md, nametable, ln.getCondition(), condTupleNode, null,
+ implicitFlowTupleSet);
+ condTupleNode.addTupleSet(implicitFlowTupleSet);
+ System.out.println("condTupleNode=" + condTupleNode);
+
+ // add edges from condNodeTupleSet to all nodes of conditional nodes
+ analyzeFlowBlockNode(md, nametable, ln.getBody(), condTupleNode);
+
+ } else {
+ // check 'for loop' case
+ BlockNode bn = ln.getInitializer();
+ analyzeFlowBlockNode(md, nametable, bn, implicitFlowTupleSet);
+ bn.getVarTable().setParent(nametable);
+
+ NodeTupleSet condTupleNode = new NodeTupleSet();
+ analyzeFlowExpressionNode(md, nametable, ln.getCondition(), condTupleNode, null,
+ implicitFlowTupleSet);
+ condTupleNode.addTupleSet(implicitFlowTupleSet);
+ System.out.println("condTupleNode=" + condTupleNode);
+
+ analyzeFlowBlockNode(md, bn.getVarTable(), ln.getUpdate(), condTupleNode);
+ analyzeFlowBlockNode(md, bn.getVarTable(), ln.getBody(), condTupleNode);
+
+ }