From 92c52eaadce1659baf6b5692b48c5a1e3cd2ce16 Mon Sep 17 00:00:00 2001 From: trochas Date: Tue, 8 Apr 2025 11:56:06 +0200 Subject: [PATCH] correction toLLVM --- src/main/java/TP2/asd/Program.java | 1 + src/main/java/TP2/asd/toLLVM_Visitor.java | 28 +++++++++++------------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/main/java/TP2/asd/Program.java b/src/main/java/TP2/asd/Program.java index ee0e14d..8036b60 100644 --- a/src/main/java/TP2/asd/Program.java +++ b/src/main/java/TP2/asd/Program.java @@ -5,6 +5,7 @@ import TP2.asd.Interface.*; import TP2.llvm.ProgramLLVM.*; public class Program{ + //Prog public static record ProgramImp(ArrayList fonctions) implements ProgramI{ public S accept(ProgramVisitor v, H h) { diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index bcafaa8..70e7ccf 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -11,7 +11,7 @@ import TP2.llvm.ProgramLLVM.*; public class toLLVM_Visitor implements ProgramVisitor, FunctionVisitor, InstrVisitor>, - ExprVisitor, + ExprVisitor, TypeVisitor { @@ -21,13 +21,13 @@ public class toLLVM_Visitor implements ProgramVisitor toLLVM ne renvoit pas la même chose si l'expression est une simplement un val (var ou const) ou un binop */ - public static class InstrOrVal{ + public static class InstrAndVal{ public ArrayList instr = null; public ValLLVM val = null; - public InstrOrVal(ArrayList instr, ValLLVM val){ + public InstrAndVal(ArrayList instr, ValLLVM val){ this.instr = instr; - this.val = instr.getLast().var(); + this.val = val; } } @@ -57,7 +57,7 @@ public class toLLVM_Visitor implements ProgramVisitor @Override public ArrayList visitReturn(Return_instrImp instr, SymTable h) { - InstrOrVal res = instr.e().accept(this,h); + InstrAndVal res = instr.e().accept(this,h); ValLLVM var = res.val; InstructionLLVM r = new ReturnLLVMImp(var.getType(),var); @@ -70,7 +70,7 @@ public class toLLVM_Visitor implements ProgramVisitor @Override public ArrayList visitAssign(AssignImp instr, SymTable h) { - InstrOrVal res = instr.e().accept(this,h); + InstrAndVal res = instr.e().accept(this,h); ValLLVM var = res.val; ArrayList result = new ArrayList<>(); result.addAll(res.instr); @@ -98,23 +98,23 @@ public class toLLVM_Visitor implements ProgramVisitor } @Override - public InstrOrVal visitConst(ConstImp e, SymTable h) { + public InstrAndVal visitConst(ConstImp e, SymTable h) { ValLLVM val = new ValLLVMImpl(new IntLLVMImpl(),e.c()); - return new InstrOrVal(new ArrayList<>(), val); + return new InstrAndVal(new ArrayList<>(), val); } @Override - public InstrOrVal visitVar(VarImp e, SymTable h) { + public InstrAndVal visitVar(VarImp e, SymTable h) { ValLLVM val = new VarLLVMImpl(new IntLLVMImpl(), e.name()); - return new InstrOrVal(new ArrayList<>(), val); + return new InstrAndVal(new ArrayList<>(), val); } @Override - public InstrOrVal visitBinOp(BinopExpressionImp e, SymTable h) { + public InstrAndVal visitBinOp(BinopExpressionImp e, SymTable h) { ArrayList list = new ArrayList<>(); - InstrOrVal res1 = e.e1().accept(this, h); - InstrOrVal res2 = e.e2().accept(this, h); + InstrAndVal res1 = e.e1().accept(this, h); + InstrAndVal res2 = e.e2().accept(this, h); ValLLVM val1 = res1.val; ValLLVM val2 = res2.val; @@ -131,7 +131,7 @@ public class toLLVM_Visitor implements ProgramVisitor VarLLVMImpl var = new VarLLVMImpl(type,temp); list.add(new AssignLVMImp(var, new BinOpLLVMImp(type,e.op(),val1,val2))); - return new InstrOrVal(list, var); + return new InstrAndVal(list, var); } @Override