From: bdemsky Date: Fri, 14 Oct 2005 18:34:28 +0000 (+0000) Subject: New option -printrepair added. Prints updates to data structures. X-Git-Url: http://demsky.eecs.uci.edu/git/?p=repair.git;a=commitdiff_plain;h=15be88521357bb3abffcd7273d7c9779daa53f1f New option -printrepair added. Prints updates to data structures. --- diff --git a/Repair/RepairCompiler/MCC/CLI.java b/Repair/RepairCompiler/MCC/CLI.java index d69310a..9b2e961 100755 --- a/Repair/RepairCompiler/MCC/CLI.java +++ b/Repair/RepairCompiler/MCC/CLI.java @@ -11,7 +11,7 @@ import MCC.IR.DebugItem; * files. * * @author le01, 6.035 Staff (6.035-staff@mit.edu) - * @version $Id: CLI.java,v 1.17 2005/10/12 17:43:10 bdemsky Exp $ + * @version $Id: CLI.java,v 1.18 2005/10/14 18:31:41 bdemsky Exp $ */ public class CLI { /** @@ -111,6 +111,7 @@ public class CLI { System.out.println("-mergenodes -- omit nodes for simpler role dependence graphs"); System.out.println("-debuggraph -- add edge labels and support to debug graph"); System.out.println("-rejectlengthchanges -- reject all updates which change the length of an array"); + System.out.println("-printrepairs -- print log of repair actions"); System.exit(-1); } @@ -127,6 +128,8 @@ public class CLI { Compiler.DEBUGGRAPH=true; } else if (args[i].equals("-mergenodes")) { Compiler.MERGENODES=true; + } else if (args[i].equals("-printrepairs")) { + Compiler.PRINTREPAIRS=true; } else if (args[i].equals("-depth")) { Compiler.debuggraphs.add(new DebugItem(Integer.parseInt(args[i+1]),Integer.parseInt(args[i+2]))); i+=2; diff --git a/Repair/RepairCompiler/MCC/Compiler.java b/Repair/RepairCompiler/MCC/Compiler.java index 5fa3fca..6151f2d 100755 --- a/Repair/RepairCompiler/MCC/Compiler.java +++ b/Repair/RepairCompiler/MCC/Compiler.java @@ -30,6 +30,7 @@ public class Compiler { public static boolean TIME=false; public static boolean DEBUGGRAPH=false; public static boolean REJECTLENGTH=false; + public static boolean PRINTREPAIRS=false; public static Vector debuggraphs=new Vector(); diff --git a/Repair/RepairCompiler/MCC/IR/UpdateNode.java b/Repair/RepairCompiler/MCC/IR/UpdateNode.java index 89ffed9..0f47287 100755 --- a/Repair/RepairCompiler/MCC/IR/UpdateNode.java +++ b/Repair/RepairCompiler/MCC/IR/UpdateNode.java @@ -1,6 +1,7 @@ package MCC.IR; import java.util.*; import MCC.State; +import MCC.Compiler; class UpdateNode { Vector updates; @@ -431,9 +432,13 @@ class UpdateNode { else if (op==Opcode.LE) ; else throw new Error(); + if (u.isGlobal()) { VarDescriptor vd=((VarExpr)u.getLeftExpr()).getVar(); cr.outputline(vd.getSafeSymbol()+"="+right.getSafeSymbol()+";"); + if (Compiler.PRINTREPAIRS) { + cr.outputline("printf(\""+u.getLeftExpr().toString()+"=%d\\n\","+right.getSafeSymbol()+");"); + } } else if (u.isField()) { /* NEED TO FIX */ Expr subexpr=((DotExpr)u.getLeftExpr()).getExpr(); @@ -441,9 +446,22 @@ class UpdateNode { VarDescriptor subvd=VarDescriptor.makeNew("subexpr"); VarDescriptor indexvd=VarDescriptor.makeNew("index"); subexpr.generate(cr,subvd); + if (intindex!=null) intindex.generate(cr,indexvd); FieldDescriptor fd=(FieldDescriptor)u.getDescriptor(); + if (Compiler.PRINTREPAIRS) { + if (intindex==null) { + cr.outputline("printf(\"0x%x."+fd.toString()+ + "=%d\\n\","+subvd.getSafeSymbol()+","+right.getSafeSymbol()+");"); + } else { + cr.outputline("printf(\"0x%x."+fd.toString()+ + "[%d]=%d\\n\","+subvd.getSafeSymbol()+ + ","+indexvd.getSafeSymbol()+","+right.getSafeSymbol()+");"); + } + } + + StructureTypeDescriptor std=(StructureTypeDescriptor)subexpr.getType(); Expr offsetbits = std.getOffsetExpr(fd); if (fd instanceof ArrayDescriptor) {