add more comments
[IRC.git] / Robust / src / IR / State.java
index 06666e204123c4c1d117e082141c45283b24d120..9df0cc3235d9d2067de8914edc0b1f491e09839a 100644 (file)
@@ -5,8 +5,6 @@ import IR.*;
 import java.util.*;
 
 public class State {
-    public String main;
-
     public State() {
        this.classes=new SymbolTable();
        this.tasks=new SymbolTable();
@@ -15,12 +13,44 @@ public class State {
        this.parsetrees=new HashSet();
        this.arraytypes=new HashSet();
        this.arraytonumber=new Hashtable();
+       this.tagmap=new Hashtable();
+       this.analysisresult=new Hashtable();
+       this.optionaltaskdescriptors=new Hashtable();
     }
 
     public void addParseNode(ParseNode parsetree) {
        parsetrees.add(parsetree);
     }
 
+    public void storeAnalysisResult(Hashtable result){
+       analysisresult = result;
+    }
+    
+    public void storeOptionalTaskDescriptors(Hashtable optionaltaskdescriptors){
+       this.optionaltaskdescriptors=optionaltaskdescriptors;
+    }
+
+    public Hashtable getAnalysisResult(){
+       return analysisresult;
+    }
+    
+    public Hashtable getOptionalTaskDescriptors(){
+       return optionaltaskdescriptors;
+    }
+
+    /** Boolean flag which indicates whether compiler is compiling a task-based
+     * program. */
+    public boolean WEBINTERFACE=false;
+    public boolean TASK=false;
+    public boolean DSM=false;
+    public boolean TASKSTATE=false;
+    public boolean OPTIONAL=false;
+    public boolean THREAD=false;
+    public boolean CONSCHECK=false;
+    public boolean INSTRUCTIONFAILURE=false;
+    public String structfile;
+    public String main;
+
     public SymbolTable classes;
     public SymbolTable tasks;
     public Set parsetrees;
@@ -32,6 +62,13 @@ public class State {
     private int numtasks=0;
     private int arraycount=0;
 
+
+    private Hashtable analysisresult;
+    private Hashtable optionaltaskdescriptors;
+
+    private Hashtable tagmap;
+    private int numtags=0;
+
     public void addArrayType(TypeDescriptor td) {
        if (!arraytypes.contains(td)) {
            arraytypes.add(td);
@@ -43,6 +80,15 @@ public class State {
        return arraytypes.iterator();
     }
 
+    public int getTagId(TagDescriptor tag) {
+       if (tagmap.containsKey(tag)) {
+           return ((Integer) tagmap.get(tag)).intValue();
+       } else {
+           tagmap.put(tag, new Integer(numtags));
+           return numtags++;
+       }
+    }
+
     public int getArrayNumber(TypeDescriptor td) {
        return ((Integer)arraytonumber.get(td)).intValue();
     }
@@ -88,10 +134,18 @@ public class State {
        return tasks;
     }
 
+    /** Returns Flat IR representation of MethodDescriptor md. */
+
     public FlatMethod getMethodFlat(MethodDescriptor md) {
        return (FlatMethod)flatmethodmap.get(md);
     }
 
+    /** Returns Flat IR representation of TaskDescriptor td. */
+
+    public FlatMethod getMethodFlat(TaskDescriptor td) {
+       return (FlatMethod)flatmethodmap.get(td);
+    }
+
     public void addTreeCode(MethodDescriptor md, BlockNode bn) {
        treemethodmap.put(md,bn);
     }
@@ -104,6 +158,10 @@ public class State {
        flatmethodmap.put(md,bn);
     }
 
+    public void addFlatCode(TaskDescriptor td, FlatMethod bn) {
+       flatmethodmap.put(td,bn);
+    }
+
     public void addTask(TaskDescriptor td) {
        if (tasks.contains(td.getSymbol()))
            throw new Error("Task "+td.getSymbol()+" defined twice");