aspect MyAnalysis { syn boolean Stmt.isEmptyStmt() = false; eq EmptyStmt.isEmptyStmt() = true; syn lazy int CFGNode.uniqueIndex(); public static int Stmt.uniqueIndex = 0; eq Stmt.uniqueIndex() = uniqueIndex++; eq Expr.uniqueIndex() = Stmt.uniqueIndex++; eq Stmt.dumpString() { StringBuffer buf = new StringBuffer(); buf.append(super.dumpString()); buf.append(" <** " + uniqueIndex() + " -> {"); for(Iterator iter = succ().iterator(); iter.hasNext(); ) { CFGNode node = (CFGNode)iter.next(); buf.append(node.uniqueIndex() + " "); } buf.append("} **>"); /* //Liveness buf.append(" I_Live{"); for(Iterator iter = in().iterator(); iter.hasNext(); ) { Variable in = (Variable)iter.next(); buf.append(in.name() + ", "); } buf.append("} "); buf.append(" O_Live{"); for(Iterator iter = out().iterator(); iter.hasNext(); ) { Variable out = (Variable)iter.next(); buf.append(out.name() + ", "); } buf.append("} "); //deadCodeNum(); //deadCode if(isDead()) System.err.println("Dead Code: "+this); */ //CF buf.append("CF{"); for(Iterator it = out_cf().keySet().iterator();it.hasNext();){ Variable v = (Variable)it.next(); buf.append(v.name()+"-"+(Long)out_cf().get(v)+", "); } buf.append("}"); return buf.toString(); } eq Expr.dumpString() { StringBuffer buf = new StringBuffer(); buf.append(super.dumpString()); buf.append(" <* " + uniqueIndex() + " -> {"); for(Iterator iter = succ().iterator(); iter.hasNext(); ) { CFGNode node = (CFGNode)iter.next(); buf.append(node.uniqueIndex() + " "); } buf.append("} *>"); /* //Liveness buf.append(" I_Live{"); for(Iterator iter = in().iterator(); iter.hasNext(); ) { Variable in = (Variable)iter.next(); buf.append(in.name() + ", "); } buf.append("} "); buf.append(" O_Live{"); for(Iterator iter = out().iterator(); iter.hasNext(); ) { Variable out = (Variable)iter.next(); buf.append(out.name() + ", "); } buf.append("} "); //deadCodeNum(); //deadCode if(isDead()) System.err.println("Dead Code: "+this+" in "+enclosingStmt()); */ /* //CF buf.append("CF{"); for(Iterator it = out_cf().keySet().iterator();it.hasNext();){ Variable v = (Variable)it.next(); buf.append(v.name()+"-"+(Long)out_cf().get(v)+", "); } buf.append("}"); */ return buf.toString(); } refine PrettyPrint eq VarAccess.dumpString() { StringBuffer buf = new StringBuffer(); buf.append(PrettyPrint.VarAccess.dumpString()); buf.append(" <* " + uniqueIndex() + " -> {"); for(Iterator iter = succ().iterator(); iter.hasNext(); ) { CFGNode node = (CFGNode)iter.next(); buf.append(node.uniqueIndex() + " "); } buf.append("} *>"); /* //Liveness buf.append(" I_Live{"); for(Iterator iter = in().iterator(); iter.hasNext(); ) { Variable in = (Variable)iter.next(); buf.append(in.name() + ", "); } buf.append("} "); buf.append(" O_Live{"); for(Iterator iter = out().iterator(); iter.hasNext(); ) { Variable out = (Variable)iter.next(); buf.append(out.name() + ", "); } buf.append("} "); //deadCodeNum(); //deadCode if(isDead()) System.err.println("Dead Code: "+this+" in "+enclosingStmt()); */ /* //CF buf.append("CF{"); for(Iterator it = out_cf().keySet().iterator();it.hasNext();){ Variable v = (Variable)it.next(); buf.append(v.name()+"-"+(String)out_cf().get(v)+", "); } buf.append("}"); */ return buf.toString(); } //add refine PrettyPrint eq MethodAccess.dumpString() { StringBuffer buf = new StringBuffer(); buf.append(PrettyPrint.MethodAccess.dumpString()); buf.append(" <* " + uniqueIndex() + " -> {"); for(Iterator iter = succ().iterator(); iter.hasNext(); ) { CFGNode node = (CFGNode)iter.next(); buf.append(node.uniqueIndex() + " "); } buf.append("} *>"); return buf.toString(); } refine PrettyPrint eq Literal.dumpString() { StringBuffer buf = new StringBuffer(); buf.append(PrettyPrint.Literal.dumpString()); buf.append(" <* " + uniqueIndex() + " -> {"); for(Iterator iter = succ().iterator(); iter.hasNext(); ) { CFGNode node = (CFGNode)iter.next(); buf.append(node.uniqueIndex() + " "); } buf.append("} *>"); /* //CF buf.append("CF{"); for(Iterator it = out_cf().keySet().iterator();it.hasNext();){ Variable v = (Variable)it.next(); buf.append(v.name()+"-"+(String)out_cf().get(v)+", "); } buf.append("}"); */ return buf.toString(); } //nullness refine PrettyPrint eq VariableDeclaration.dumpString() { StringBuffer buf = new StringBuffer(); buf.append(PrettyPrint.VariableDeclaration.dumpString()); buf.append(" <* " + uniqueIndex() + " -> {"); for(Iterator iter = succ().iterator(); iter.hasNext(); ) { CFGNode node = (CFGNode)iter.next(); buf.append(node.uniqueIndex() + " "); } buf.append("} *>"); /* //Liveness buf.append(" I_Live{"); for(Iterator iter = in().iterator(); iter.hasNext(); ) { Variable in = (Variable)iter.next(); buf.append(in.name() + ", "); } buf.append("} "); buf.append(" O_Live{"); for(Iterator iter = out().iterator(); iter.hasNext(); ) { Variable out = (Variable)iter.next(); buf.append(out.name() + ", "); } buf.append("} "); //deadCodeNum(); //deadCode if(isDead()) System.err.println("Dead Code: "+this); */ /* //CF buf.append("CF{"); for(Iterator it = out_cf().keySet().iterator();it.hasNext();){ Variable v = (Variable)it.next(); buf.append(v.name()+"-"+(String)out_cf().get(v)+", "); } buf.append("}"); */ return buf.toString(); } refine PrettyPrint eq TypeAccess.dumpString() { StringBuffer buf = new StringBuffer(); buf.append(PrettyPrint.TypeAccess.dumpString()); buf.append(" <* " + uniqueIndex() + " -> {"); for(Iterator iter = succ().iterator(); iter.hasNext(); ) { CFGNode node = (CFGNode)iter.next(); buf.append(node.uniqueIndex() + " "); } buf.append("} *>"); return buf.toString(); } refine PrettyPrint eq ArrayTypeAccess.dumpString() { StringBuffer buf = new StringBuffer(); buf.append(PrettyPrint.ArrayTypeAccess.dumpString()); buf.append(" <* " + uniqueIndex() + " -> {"); for(Iterator iter = succ().iterator(); iter.hasNext(); ) { CFGNode node = (CFGNode)iter.next(); buf.append(node.uniqueIndex() + " "); } buf.append("} *>"); return buf.toString(); } //nullness eq AssignExpr.dumpString() { StringBuffer buf = new StringBuffer(); buf.append(super.dumpString()); //CF buf.append("CF{"); for(Iterator it = out_cf().keySet().iterator();it.hasNext();){ Variable v = (Variable)it.next(); buf.append(v.name()+"-"+(Long)out_cf().get(v)+", "); } buf.append("}"); return buf.toString(); } /* //useless comparison eq EqualityExpr.dumpString() { String str = super.dumpString(); uselessComparison(); return str; }*/ eq RelationalExpr.dumpString() { String str = super.dumpString(); constUselessComparison(); return str; } }