package MCC;
-import java.util.Vector;
-import java.util.StringTokenizer;
+import java.util.*;
+import MCC.IR.DebugItem;
/**
* A generic command-line interface for 6.035 compilers. This class
* files.
*
* @author le01, 6.035 Staff (<tt>6.035-staff@mit.edu</tt>)
- * @version <tt>$Id: CLI.java,v 1.3 2004/04/21 21:15:48 bdemsky Exp $</tt>
+ * @version <tt>$Id: CLI.java,v 1.19 2005/10/17 00:29:13 bdemsky Exp $</tt>
*/
public class CLI {
/**
* should be performed.
*/
public boolean opts[];
-
+
/**
* Vector of String containing the command-line arguments which could
* not otherwise be parsed.
*/
public Vector extras;
-
+
/**
* Vector of String containing the optimizations which could not be
* parsed. It is okay to complain about anything in this list, even
* Name of the file to put the output in.
*/
public String outfile;
-
+
/**
* Name of the file to get input from. This is null if the user didn't
* provide a file name.
opts = new boolean[optnames.length];
+ if (args.length==0) {
+ System.out.println("-debugcompiler -- print out debug messages");
+ System.out.println("-depth depthnum constraintnum -- generate dependency graph from constraintnum with depth of depthnum");
+ System.out.println("-depthconj depthnum constraintnum conjunctionnum -- generate dependency graph from constraintnum with depth of depthnum");
+ System.out.println("-instrument -- generate instrumentation code");
+ System.out.println("-aggressivesearch -- search for one repair per constraint");
+ System.out.println("-prunequantifiernodes -- prune nodes that satisfy constraint by decreasing scope");
+ System.out.println("-cplusplus -- properly set up c++ classes");
+ System.out.println("-time -- generate timing code");
+ System.out.println("-omitcomp -- omit compensation updates");
+ 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.out.println("-exactallocation -- application calls malloc for each struct and");
+ System.out.println(" allocates exactly the right amount of space.");
+
+ System.exit(-1);
+ }
+
for (int i = 0; i < args.length; i++) {
- if (args[i].equals("-debug")) {
+ if (args[i].equals("-debugcompiler")) {
context = 0;
debug = true;
} else if (args[i].equals("-checkonly")) {
Compiler.REPAIR=false;
+ } else if (args[i].equals("-exactallocation")) {
+ Compiler.EXACTALLOCATION=true;
+ } else if (args[i].equals("-omitcomp")) {
+ Compiler.OMITCOMP=true;
+ } else if (args[i].equals("-debuggraph")) {
+ 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;
+ } else if (args[i].equals("-depthconj")) {
+ Compiler.debuggraphs.add(new DebugItem(Integer.parseInt(args[i+1]),Integer.parseInt(args[i+2]),Integer.parseInt(args[i+3])));
+ i+=3;
+ } else if (args[i].equals("-rejectlengthchanges")) {
+ Compiler.REJECTLENGTH=true;
+ } else if (args[i].equals("-debug")) {
+ Compiler.GENERATEDEBUGHOOKS=true;
+ } else if (args[i].equals("-time")) {
+ Compiler.TIME=true;
+ } else if (args[i].equals("-instrument")) {
+ Compiler.GENERATEINSTRUMENT=true;
+ } else if (args[i].equals("-aggressivesearch")) {
+ Compiler.AGGRESSIVESEARCH=true;
+ } else if (args[i].equals("-prunequantifiernodes")) {
+ Compiler.PRUNEQUANTIFIERS=true;
+ } else if (args[i].equals("-cplusplus")) {
+ Compiler.ALLOCATECPLUSPLUS=true;
} else if (args[i].equals("-verbose") || args[i].equals("-v")) {
context = 0;
verbose++;
int i = 0;
while (infile == null && i < extras.size()) {
String fn = (String) extras.elementAt(i);
-
+
if (fn.charAt(0) != '-')
{
infile = fn;