* files.
*
* @author le01, 6.035 Staff (<tt>6.035-staff@mit.edu</tt>)
- * @version <tt>$Id: CLI.java,v 1.17 2005/10/12 17:43:10 bdemsky Exp $</tt>
+ * @version <tt>$Id: CLI.java,v 1.18 2005/10/14 18:31:41 bdemsky Exp $</tt>
*/
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);
}
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;
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();
package MCC.IR;
import java.util.*;
import MCC.State;
+import MCC.Compiler;
class UpdateNode {
Vector updates;
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();
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) {