diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index bc13772..93de4c2 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -205,7 +205,7 @@ public class toLLVM_Visitor implements ProgramVisitor, System.err.println("Fonction n'est pas un void"); } - l.add(new CallLLVMImp(fun.define,paramsLLVM,"")); + l.add(new CallVoidLLVMImp(fun.define,paramsLLVM,"")); return l; } @@ -356,6 +356,7 @@ public class toLLVM_Visitor implements ProgramVisitor, } public InstrAndVal visitAppeal(AppealImp instr,SymTable h){ + SymTable prevSymTable = h; ArrayList l = new ArrayList<>(); ArrayList paramsLLVM = new ArrayList<>(); for(Expression param : instr.params()){ @@ -374,7 +375,8 @@ public class toLLVM_Visitor implements ProgramVisitor, h = res.symTable; VarLLVMImp var = new VarLLVMImp(fLLVM.define.type(), res.var); - l.add(new CallLLVMImp(fLLVM.define,paramsLLVM,"")); + l.add(new AssignLLVMImp(var, new CallLLVMImp(fLLVM.define,paramsLLVM,""))); + prevSymTable.updateId(h); return new InstrAndVal(l, var); } diff --git a/src/main/java/TP2/llvm/Interface.java b/src/main/java/TP2/llvm/Interface.java index e00a7b5..830e3fc 100644 --- a/src/main/java/TP2/llvm/Interface.java +++ b/src/main/java/TP2/llvm/Interface.java @@ -34,7 +34,7 @@ public interface Interface { public S visitLabelLLVM(LabelLLVMImp instr, H h); public S visitBrLLVM(BrLLVMImp instr, H h); public S visitBrCondLLVM(BrCondLLVMImp instr, H h); - public S visitCallLLVM(CallLLVMImp instr, H h); + public S visitCallVoidLLVM(CallVoidLLVMImp instr, H h); } //////////ExpressionLLVM (expression) @@ -53,6 +53,7 @@ public interface Interface { public S visitValLLVM(ValLLVMImp e,H h); public S visitVarLLVM(VarLLVMImp e,H h); public S visitIcmpLLVM(IcmpLLVMImp e, H h); + public S visitCallLLVM(CallLLVMImp e, H h); } /*public interface IdentifierLLVM{ //globaux @ et local % diff --git a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java index a68cee0..646d671 100644 --- a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java +++ b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java @@ -69,6 +69,16 @@ TypeLLVMVisitor return INDENT+instr.var().accept(this, h) + " = " + instr.e().accept(this, h); } + @Override + public String visitCallVoidLLVM(CallVoidLLVMImp instr, String h) { + String str = INDENT+ "call " + instr.str() + instr.f().type().accept(this, h) + " @"+instr.f().name() + "("; + for(int i = 0; i return "i8*"; } + } diff --git a/src/main/java/TP2/llvm/ProgramLLVM.java b/src/main/java/TP2/llvm/ProgramLLVM.java index da8e26d..5ae6cb6 100644 --- a/src/main/java/TP2/llvm/ProgramLLVM.java +++ b/src/main/java/TP2/llvm/ProgramLLVM.java @@ -74,10 +74,10 @@ public class ProgramLLVM { } } - public static record CallLLVMImp(DefineLLVMImp f, ArrayList params, String str) implements InstructionLLVM{ //une expression ? + public static record CallVoidLLVMImp(DefineLLVMImp f, ArrayList params, String str) implements InstructionLLVM{ @Override public S accept(InstructionLLVMVisitor v, H h) { - return v.visitCallLLVM(this, h); + return v.visitCallVoidLLVM(this, h); } } @@ -148,6 +148,18 @@ public class ProgramLLVM { } + public static record CallLLVMImp(DefineLLVMImp f, ArrayList params, String str) implements ExpressionLLVM{ + @Override + public S accept(ExpressionLLVMVisitor v, H h) { + return v.visitCallLLVM(this, h); + } + + @Override + public TypeLLVM getType() { + return f.type(); + } + } + //Val public static record ValLLVMImp(TypeLLVM type, int val) implements ValLLVM{