correction bug addLLVM avec des val
This commit is contained in:
@@ -67,7 +67,7 @@ public class Program{
|
||||
}
|
||||
|
||||
|
||||
public static record ConstImp(int c) implements Expression{
|
||||
public static record ConstImp(int c) implements Val{
|
||||
public <H, S> S accept(ExprVisitor<H, S> v, H h) {
|
||||
return v.visitConst(this, h);
|
||||
}
|
||||
@@ -76,12 +76,17 @@ public class Program{
|
||||
return c+"";
|
||||
}
|
||||
|
||||
public ValLLVM getValLLVM(){
|
||||
ValLLVM val = new ValLLVMImpl(new IntLLVMImpl(),c);
|
||||
return val;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<AssignLVMImp> toLLVM() { //TODO
|
||||
// TODO Auto-generated method stub
|
||||
ArrayList<AssignLVMImp> list = new ArrayList<>();
|
||||
ConstLLVMImp cLLVM = new ConstLLVMImp(new IntLLVMImpl(),c);
|
||||
list.add(new AssignLVMImp(new VarLLVMImpl("todo"), cLLVM));
|
||||
ValLLVM cLLVM = new ValLLVMImpl(new IntLLVMImpl(),c);
|
||||
list.add(new AssignLVMImp(new VarLLVMImpl(new IntLLVMImpl(),"todo"), cLLVM));
|
||||
return list;
|
||||
}
|
||||
}
|
||||
@@ -108,13 +113,26 @@ public class Program{
|
||||
@Override
|
||||
public ArrayList<AssignLVMImp> toLLVM() { //TODO si e1 ou e2 est une constante, elle doit pouvoir être mise directement dans l'expression
|
||||
ArrayList<AssignLVMImp> list = new ArrayList<>();
|
||||
ArrayList<AssignLVMImp> eLLVM1 = e1.toLLVM();
|
||||
ArrayList<AssignLVMImp> eLLVM2 = e2.toLLVM();
|
||||
list.addAll(eLLVM1);
|
||||
list.addAll(eLLVM2);
|
||||
VarLLVMImpl var1 = eLLVM1.getLast().getVar();
|
||||
VarLLVMImpl var2 = eLLVM2.getLast().getVar();
|
||||
list.add(new AssignLVMImp(new VarLLVMImpl("todo"), new BinOpLLVMImp(new IntLLVMImpl(),op,var1,var2)));
|
||||
ValLLVM val1 = null;
|
||||
ValLLVM val2 = null;
|
||||
if(e1 instanceof Val){
|
||||
val1 = ((Val) e1).getValLLVM();
|
||||
}
|
||||
else {
|
||||
ArrayList<AssignLVMImp> eLLVM1 = e1.toLLVM();
|
||||
list.addAll(eLLVM1);
|
||||
val1 = eLLVM1.getLast().getVar();
|
||||
}
|
||||
if(e2 instanceof Val){
|
||||
val2 = ((Val) e2).getValLLVM();
|
||||
}
|
||||
else {
|
||||
ArrayList<AssignLVMImp> eLLVM2 = e2.toLLVM();
|
||||
list.addAll(eLLVM2);
|
||||
val2 = eLLVM2.getLast().getVar();
|
||||
}
|
||||
|
||||
list.add(new AssignLVMImp(new VarLLVMImpl(new IntLLVMImpl()/*TODO*/,"todo"), new BinOpLLVMImp(new IntLLVMImpl()/*TODO*/,op,val1,val2)));
|
||||
|
||||
return list;
|
||||
}
|
||||
@@ -134,7 +152,7 @@ public class Program{
|
||||
@Override
|
||||
public ArrayList<InstructionLLVM> toLLVM() {
|
||||
ArrayList<AssignLVMImp> list = e.toLLVM();
|
||||
InstructionLLVM r = new ReturnLLVMImp(new IntLLVMImpl(),list.getLast().getVar());
|
||||
InstructionLLVM r = new ReturnLLVMImp(new IntLLVMImpl()/*TODO*/,list.getLast().getVar());
|
||||
ArrayList<InstructionLLVM> result = new ArrayList<>();
|
||||
result.addAll(list);
|
||||
result.add(r);
|
||||
@@ -158,7 +176,7 @@ public class Program{
|
||||
@Override
|
||||
public ArrayList<InstructionLLVM> toLLVM() {
|
||||
ArrayList<AssignLVMImp> list = e.toLLVM();
|
||||
InstructionLLVM r = new AssignLVMImp(new VarLLVMImpl(t),list.getLast().getVar());
|
||||
InstructionLLVM r = new AssignLVMImp(new VarLLVMImpl(new IntLLVMImpl()/*TODO*/,t),list.getLast().getVar());
|
||||
ArrayList<InstructionLLVM> result = new ArrayList<>();
|
||||
result.addAll(list);
|
||||
result.add(r);
|
||||
|
||||
Reference in New Issue
Block a user