package synthesijer.scheduler;
import java.util.ArrayList;
import java.util.Hashtable;
import synthesijer.ast.Method;
import synthesijer.ast.Module;
import synthesijer.ast.Variable;
import synthesijer.hdl.HDLModule;
import synthesijer.hdl.HDLPort;
public enum GlobalSymbolTable {
INSTANCE;
Hashtable<String, ClassInfo> map = new Hashtable<>();
public void add(Module m){
ClassInfo i = new ClassInfo();
map.put(m.getName(), i);
for(Method method: m.getMethods()){
i.methods.put(method.getName(), new MethodInfo(method));
}
for(Variable v: m.getVariables()){
i.variables.put(v.getName(), new VariableInfo(v));
}
}
public void add(String name, HDLModule m){
ClassInfo i = new ClassInfo();
map.put(name, i);
for(HDLPort p: m.getPorts()){
i.variables.put(p.getName(), new VariableInfo(p));
}
}
public VariableInfo searchVariable(String klass, String name){
ClassInfo info = map.get(klass);
if(info == null) return null;
VariableInfo var = info.variables.get(name);
return var;
}
}
class ClassInfo{
Hashtable<String, MethodInfo> methods = new Hashtable<>();
Hashtable<String, VariableInfo> variables = new Hashtable<>();
}
class MethodInfo{
String name;
ArrayList<VariableOperand> params;
public MethodInfo(Method m){
}
}
class VariableInfo{
Variable var = null;
HDLPort port = null;
public VariableInfo(HDLPort p){
port = p;
}
public VariableInfo(Variable v){
var = v;
}
}