1 19 20 package soot.dava.internal.SET; 21 22 import java.util.*; 23 import soot.util.*; 24 import soot.jimple.*; 25 import soot.dava.internal.asg.*; 26 import soot.dava.internal.AST.*; 27 import soot.dava.internal.javaRep.*; 28 import soot.dava.toolkits.base.misc.*; 29 30 public class SETIfElseNode extends SETDagNode 31 { 32 private IterableSet ifBody, elseBody; 33 34 public SETIfElseNode( AugmentedStmt characterizingStmt, IterableSet body, IterableSet ifBody, IterableSet elseBody) 35 { 36 super( characterizingStmt, body); 37 38 this.ifBody = ifBody; 39 this.elseBody = elseBody; 40 41 add_SubBody( ifBody); 42 add_SubBody( elseBody); 43 } 44 45 public IterableSet get_NaturalExits() 46 { 47 IterableSet c = new IterableSet(); 48 49 IterableSet ifChain = (IterableSet) body2childChain.get( ifBody); 50 if (ifChain.isEmpty() == false) 51 c.addAll( ((SETNode) ifChain.getLast()).get_NaturalExits()); 52 53 IterableSet elseChain = (IterableSet) body2childChain.get( elseBody); 54 if (elseChain.isEmpty() == false) 55 c.addAll( ((SETNode) elseChain.getLast()).get_NaturalExits()); 56 57 return c; 58 } 59 60 public ASTNode emit_AST() 61 { 62 List 63 astBody0 = emit_ASTBody( (IterableSet) body2childChain.get( ifBody)), 64 astBody1 = emit_ASTBody( (IterableSet) body2childChain.get( elseBody)); 65 66 ConditionExpr ce = (ConditionExpr) ((IfStmt) get_CharacterizingStmt().get_Stmt()).getCondition(); 67 68 if (astBody0.isEmpty()) { 69 List tbody = astBody0; 70 astBody0 = astBody1; 71 astBody1 = tbody; 72 73 ce = ConditionFlipper.flip( ce); 74 } 75 76 if (astBody1.isEmpty()) 77 return new ASTIfNode( get_Label(), ce, astBody0); 78 else 79 return new ASTIfElseNode( get_Label(), ce, astBody0, astBody1); 80 } 81 } 82 83 84 | Popular Tags |