StreamItOptions.debug = options.debug;
  public boolean run(String[] args) {    if (!parseArguments(args)) {      return false;    }    initialize();    if (infiles.size() == 0) {      options.usage();      inform(KjcMessages.NO_INPUT_FILE);      return false;    }    if (verboseMode()) {      inform(CompilerMessages.COMPILATION_STARTED, new Integer(infiles.size()));    }    try {      infiles = verifyFiles(infiles);    } catch (UnpositionedError e) {      reportTrouble(e);      return false;    }    options.destination = checkDestination(options.destination);    JCompilationUnit[]	tree = new JCompilationUnit[infiles.size()];    if (options.proc > tree.length) {      options.proc = tree.length;    }    if (options.multi) {      parseMultiProc(tree);    } else {      for (int count = 0; count < tree.length; count++) {	tree[count] = parseFile((File)infiles.elementAt(count));      }    }    infiles = null;    if (errorFound) {      return false;    }    if (!options.beautify) {      long	lastTime = System.currentTimeMillis();      for (int count = 0; count < tree.length; count++) {	checkInterface(tree[count]);      }      if (verboseMode()) {	inform(CompilerMessages.INTERFACES_CHECKED, new Long(System.currentTimeMillis() - lastTime));      }      if (errorFound) {	return false;      }      for (int count = 0; count < tree.length; count++) {	checkInitializers(tree[count]);      }      if (errorFound) {	return false;      }      if (options.multi) {	checkBodyMultiProc(tree);      } else {	for (int count = 0; count < tree.length; count++) {	  checkBody(tree[count]);	  if (!options.java && !options.beautify && !options.streamit) {	    tree[count] = null;	  }	}      }      if (errorFound) {	return false;      }    }    // do streamit pass    if (options.streamit) {	StreamItOptions.unroll = options.unroll;	StreamItOptions.fusion = options.fusion;	StreamItOptions.partition = options.partition;	StreamItOptions.constprop = options.constprop;	StreamItOptions.rawRows = StreamItOptions.rawColumns = options.raw;	StreamItOptions.sync = options.sync;	StreamItOptions.ratematch = options.ratematch;	StreamItOptions.simplesjfusion = options.simplesjfusion;	StreamItOptions.linearanalysis = options.linearanalysis;	StreaMITMain.compile(tree);	/*			for (int count=0; count < tree.length; count++) {		StreaMITMain.compile(tree[count]);		}	*/    }    if (!options.nowrite && !options.streamit) {      if (options.java || options.beautify) {	if (options.multi) {	  acceptMultiProc(tree);	} else {	  for (int count = 0; count < tree.length; count++) {	    tree[count].accept(this, options.destination);	    tree[count] = null;	  }	}      } else {	genCode();      }    }    if (errorFound) {      return false;    }    if (verboseMode()) {      inform(CompilerMessages.COMPILATION_ENDED);    }    CodeSequence.endSession();    return true;  }