enables the labeled_statements. The scope of a label declared by a labled statement...
[IRC.git] / Robust / src / IR / State.java
index 30f89e46fbd6b2ced3c49d532325b83370f1c715..303d3e39d48a7ef2938bfdce1383284aaecf9284 100644 (file)
@@ -6,10 +6,26 @@ import Util.Lattice;
 
 import java.util.*;
 import Analysis.TaskStateAnalysis.*;
+import Analysis.CallGraph.CallGraph;
 
 public class State {
+  public static long startTime;
+  public static long lastTime;
+  public static void logEvent(String event) {
+    long currTime=System.nanoTime();
+    double delta=((double)(currTime-startTime))/1000000000;
+    double deltaLast=((double)(currTime-lastTime))/1000000000;
+    System.out.println("TLOG: Time of "+event+"="+delta);
+    System.out.println("TLOG: Elapsed time "+event+"="+deltaLast);
+    lastTime=currTime;
+  }
+
+  public static void initTimer() {
+    startTime=System.nanoTime();
+    lastTime=startTime;
+  }
 
-    public int lines;
+  public int lines;
   public State() {
     this.classes=new SymbolTable();
     this.tasks=new SymbolTable();
@@ -24,6 +40,7 @@ public class State {
     this.excprefetch=new HashSet();
     this.classpath=new Vector();
     this.cd2locationOrderMap=new Hashtable();
+    this.cd2locationPropertyMap=new Hashtable();
     this.lines=0;
   }
 
@@ -51,6 +68,7 @@ public class State {
 
   /** Boolean flag which indicates whether compiler is compiling a task-based
    * program. */
+  public boolean JNI=false;
   public boolean POINTER=false;
   public boolean COREPROF=false;
   public boolean WEBINTERFACE=false;
@@ -165,6 +183,7 @@ public class State {
   public String outputdir = "/scratch/";
   // MGC options
   public boolean MGC=false;
+  public boolean OBJECTLOCKDEBUG=false;
   
   //Other options
   public String structfile;
@@ -180,14 +199,18 @@ public class State {
   public Set parsetrees;
   public Hashtable treemethodmap;
   public Hashtable flatmethodmap;
+  SymbolTable methods2gen;
   private HashSet arraytypes;
   public Hashtable arraytonumber;
   private int numclasses=1; // start from 1 instead of 0 for multicore gc
+  private int numinterfaces = 0;
   private int numtasks=0;
   private int numstaticblocks=0;
   private int arraycount=0;
   public Hashtable cd2locationOrderMap;
+  public Hashtable cd2locationPropertyMap;
   public boolean OPTIMIZE=false;
+  public boolean LINENUM=false;
 
   private Hashtable<ClassDescriptor, Hashtable<OptionalTaskDescriptor, OptionalTaskDescriptor>> optionaltaskdescriptors;
   private Hashtable<ClassDescriptor, Hashtable<FlagState, Set<OptionalTaskDescriptor>>> analysisresults;
@@ -234,12 +257,21 @@ public class State {
     TypeDescriptor td=new TypeDescriptor(n);
     return td;
   }
+  
+  public static TypeDescriptor getTypeDescriptor(String n) {
+    TypeDescriptor td=new TypeDescriptor(n);
+    return td;
+  }
 
   public void addClass(ClassDescriptor tdn) {
     if (classes.contains(tdn.getSymbol()))
       throw new Error("Class "+tdn.getSymbol()+" defined twice");
     classes.add(tdn);
-    numclasses++;
+    if(tdn.isInterface()) {
+      numinterfaces++;
+    } else {
+      numclasses++;
+    }
     if((tdn.numstaticfields != 0) || (tdn.numstaticblocks != 0)) {
       sclasses.add(tdn);
     }
@@ -249,6 +281,10 @@ public class State {
     return numclasses;
   }
   
+  public int numInterfaces() {
+    return numinterfaces;
+  }
+  
   public int numStaticBlocks() {
     return numstaticblocks;
   }
@@ -329,4 +365,12 @@ public class State {
     return cd2locationOrderMap;
   }
   
+  public void addLocationPropertySet(ClassDescriptor cd, Set<String> set){
+    cd2locationPropertyMap.put(cd,set);
+  }
+  
+  public Hashtable getCd2LocationPropertyMap(){
+    return cd2locationPropertyMap;
+  }
+  
 }