symTable Var
This commit is contained in:
@@ -51,6 +51,17 @@ public class SymTable {
|
||||
return new Result(newSymTab,newVar);
|
||||
}
|
||||
|
||||
public Result addVar(String nomVar){
|
||||
String newVar = nomVar+id;
|
||||
SymTable newSymTab = this.addVar(nomVar,new Type_intImp()); //TODO
|
||||
return new Result(newSymTab,newVar);
|
||||
}
|
||||
|
||||
public String getVar(String nomVar){
|
||||
System.out.println("getVar(" + nomVar +") -------------------------------------------");
|
||||
return nomVar + this.stackMap.getLast().get(nomVar).id;
|
||||
}
|
||||
|
||||
public PStack<PMap<String,ValueTable>> next_layer(){
|
||||
return stackMap.plus(HashTreePMap.empty());
|
||||
}
|
||||
@@ -65,7 +76,6 @@ public class SymTable {
|
||||
|
||||
public PMap<String,ValueTable> peppapeek(){
|
||||
if(stackMap.isEmpty()){
|
||||
System.out.println("TEST...............................");
|
||||
return this.next_layer().getLast();
|
||||
}
|
||||
return stackMap.getLast();
|
||||
|
||||
@@ -85,7 +85,10 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImpl>
|
||||
ArrayList<InstructionLLVM> list = new ArrayList<>();
|
||||
for(int i = 0; i<instr.s().size();i++){
|
||||
TypeLLVM t2 = instr.t().accept(this,h);
|
||||
String name = instr.s().get(i);//h.addVarLLVM(instr.s().get(i));
|
||||
//String name = instr.s().get(i);//h.addVarLLVM(instr.s().get(i));
|
||||
Result r = h.addVar(instr.s().get(i));
|
||||
String name = r.var;
|
||||
h = r.symTable;
|
||||
list.add(new AssignLVMImpl(new VarLLVMImpl(t2, name),new allocaLLVMImpl(t2)));
|
||||
}
|
||||
return list;
|
||||
@@ -115,7 +118,7 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImpl>
|
||||
|
||||
@Override
|
||||
public InstrAndVal visitVar(VarImp e, SymTable h) {
|
||||
ValLLVM val = new VarLLVMImpl(new IntLLVMImpl(), e.name());
|
||||
ValLLVM val = new VarLLVMImpl(new IntLLVMImpl(), h.getVar(e.name()));
|
||||
return new InstrAndVal(new ArrayList<>(), val);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user