This commit was manufactured by cvs2svn to create tag 'buildscript'.
[IRC.git] /
1 package IR;
2 import IR.Tree.*;
3 import IR.Flat.*;
4 import IR.*;
5 import java.util.*;
6
7 public class State {
8     public State() {
9         this.classes=new SymbolTable();
10         this.tasks=new SymbolTable();
11         this.treemethodmap=new Hashtable();
12         this.flatmethodmap=new Hashtable();
13         this.parsetrees=new HashSet();
14         this.arraytypes=new HashSet();
15         this.arraytonumber=new Hashtable();
16         this.tagmap=new Hashtable();
17         this.analysisresult=new Hashtable();
18         this.optionaltaskdescriptors=new Hashtable();
19     }
20
21     public void addParseNode(ParseNode parsetree) {
22         parsetrees.add(parsetree);
23     }
24
25     public void storeAnalysisResult(Hashtable result){
26         analysisresult = result;
27     }
28     
29     public void storeOptionalTaskDescriptors(Hashtable optionaltaskdescriptors){
30         this.optionaltaskdescriptors=optionaltaskdescriptors;
31     }
32
33     public Hashtable getAnalysisResult(){
34         return analysisresult;
35     }
36     
37     public Hashtable getOptionalTaskDescriptors(){
38         return optionaltaskdescriptors;
39     }
40
41     /** Boolean flag which indicates whether compiler is compiling a task-based
42      * program. */
43     public boolean WEBINTERFACE=false;
44     public boolean TASK=false;
45     public boolean DSM=false;
46     public boolean TASKSTATE=false;
47     public boolean OPTIONAL=false;
48     public boolean THREAD=false;
49     public boolean CONSCHECK=false;
50     public boolean INSTRUCTIONFAILURE=false;
51     public String structfile;
52     public String main;
53
54     public SymbolTable classes;
55     public SymbolTable tasks;
56     public Set parsetrees;
57     public Hashtable treemethodmap;
58     public Hashtable flatmethodmap;
59     private HashSet arraytypes;
60     public Hashtable arraytonumber;
61     private int numclasses=0;
62     private int numtasks=0;
63     private int arraycount=0;
64
65
66     private Hashtable analysisresult;
67     private Hashtable optionaltaskdescriptors;
68
69     private Hashtable tagmap;
70     private int numtags=0;
71
72     public void addArrayType(TypeDescriptor td) {
73         if (!arraytypes.contains(td)) {
74             arraytypes.add(td);
75             arraytonumber.put(td,new Integer(arraycount++));
76         }
77     }
78
79     public Iterator getArrayIterator() {
80         return arraytypes.iterator();
81     }
82
83     public int getTagId(TagDescriptor tag) {
84         if (tagmap.containsKey(tag)) {
85             return ((Integer) tagmap.get(tag)).intValue();
86         } else {
87             tagmap.put(tag, new Integer(numtags));
88             return numtags++;
89         }
90     }
91
92     public int getArrayNumber(TypeDescriptor td) {
93         return ((Integer)arraytonumber.get(td)).intValue();
94     }
95
96     public int numArrays() {
97         return arraytypes.size();
98     }
99
100     public static TypeDescriptor getTypeDescriptor(int t) {
101         TypeDescriptor td=new TypeDescriptor(t);
102         return td;
103     }
104
105     public static TypeDescriptor getTypeDescriptor(NameDescriptor n) {
106         TypeDescriptor td=new TypeDescriptor(n);
107         return td;
108     }
109
110     public void addClass(ClassDescriptor tdn) {
111         if (classes.contains(tdn.getSymbol()))
112             throw new Error("Class "+tdn.getSymbol()+" defined twice");
113         classes.add(tdn);
114         numclasses++;
115     }
116
117     public int numClasses() {
118         return numclasses;
119     }
120
121     public BlockNode getMethodBody(MethodDescriptor md) {
122         return (BlockNode)treemethodmap.get(md);
123     }
124
125     public BlockNode getMethodBody(TaskDescriptor td) {
126         return (BlockNode)treemethodmap.get(td);
127     }
128
129     public SymbolTable getClassSymbolTable() {
130         return classes;
131     }
132
133     public SymbolTable getTaskSymbolTable() {
134         return tasks;
135     }
136
137     /** Returns Flat IR representation of MethodDescriptor md. */
138
139     public FlatMethod getMethodFlat(MethodDescriptor md) {
140         return (FlatMethod)flatmethodmap.get(md);
141     }
142
143     /** Returns Flat IR representation of TaskDescriptor td. */
144
145     public FlatMethod getMethodFlat(TaskDescriptor td) {
146         return (FlatMethod)flatmethodmap.get(td);
147     }
148
149     public void addTreeCode(MethodDescriptor md, BlockNode bn) {
150         treemethodmap.put(md,bn);
151     }
152
153     public void addTreeCode(TaskDescriptor td, BlockNode bn) {
154         treemethodmap.put(td,bn);
155     }
156
157     public void addFlatCode(MethodDescriptor md, FlatMethod bn) {
158         flatmethodmap.put(md,bn);
159     }
160
161     public void addFlatCode(TaskDescriptor td, FlatMethod bn) {
162         flatmethodmap.put(td,bn);
163     }
164
165     public void addTask(TaskDescriptor td) {
166         if (tasks.contains(td.getSymbol()))
167             throw new Error("Task "+td.getSymbol()+" defined twice");
168         tasks.add(td);
169         numtasks++;
170     }
171 }