From 35c2c23985054b1ba1eee60c7de592f7848f1000 Mon Sep 17 00:00:00 2001 From: trochas Date: Fri, 11 Apr 2025 14:52:38 +0200 Subject: [PATCH] Load Var --- src/main/java/TP2/asd/SymTable.java | 4 ++-- src/main/java/TP2/asd/toLLVM_Visitor.java | 8 ++++++-- src/main/java/TP2/llvm/Interface.java | 2 +- src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java | 4 ++-- src/main/java/TP2/llvm/ProgramLLVM.java | 4 ++-- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/TP2/asd/SymTable.java b/src/main/java/TP2/asd/SymTable.java index 4475192..5830d6d 100644 --- a/src/main/java/TP2/asd/SymTable.java +++ b/src/main/java/TP2/asd/SymTable.java @@ -109,10 +109,10 @@ public class SymTable { return this.stackmap(); } - public ValueTable getvar_Type(String s){ + public Type getvar_Type(String s){ for(int i= stackMap.size()-1; i>=0; i--){ if(stackMap.get(i).containsKey(s)){ - return stackMap.get(i).get(s); + return stackMap.get(i).get(s).type; } } return null; diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index 5094d83..5932221 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -192,8 +192,12 @@ public class toLLVM_Visitor implements ProgramVisitor @Override public InstrAndVal visitVar(VarImp e, SymTable h) { - ValLLVM val = new VarLLVMImpl(new IntLLVMImpl(), e.name()); - return new InstrAndVal(new ArrayList<>(), val); + ArrayList l =new ArrayList<>(); + ValLLVM val = new VarLLVMImpl(h.getvar_Type(e.name()).accept(this,h),h.getVar(e.name())); + + VarLLVMImpl varTemp = new VarLLVMImpl(h.getvar_Type(e.name()).accept(this,h),h.addNewTempVar().var); + l.add(new AssignLVMImpl(varTemp,((ExpressionLLVM)(new LoadLLVMImpl(val))))); + return new InstrAndVal(l, varTemp); } @Override diff --git a/src/main/java/TP2/llvm/Interface.java b/src/main/java/TP2/llvm/Interface.java index 672c00d..106b41b 100644 --- a/src/main/java/TP2/llvm/Interface.java +++ b/src/main/java/TP2/llvm/Interface.java @@ -52,7 +52,7 @@ public interface Interface { public interface ExpressionLLVMVisitor { public S visitBinOpLLVM(BinOpLLVMImpl e, H h); public S visitAllocaLLVM(allocaLLVMImpl e,H h); - public S visitLoadLLVM(loadLLVMImpl e,H h); + public S visitLoadLLVM(LoadLLVMImpl e,H h); public S visitValLLVM(ValLLVMImpl e,H h); public S visitVarLLVM(VarLLVMImpl e,H h); public S visitIcmpLLVM(IcmpLLVMImp e, H h); diff --git a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java index 158bb79..8c829cc 100644 --- a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java +++ b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java @@ -103,8 +103,8 @@ TypeLLVMVisitor @Override - public String visitLoadLLVM(loadLLVMImpl e, String h) { - return "load" + " i" + e.nbBits() + ", i"+ e.nbBits2() + "* %" + e.val().accept(this, h); + public String visitLoadLLVM(LoadLLVMImpl e, String h) { + return "load" + " " + e.getType().accept(this, h) + ", "+ e.getType().accept(this, h) + "* " + e.val().accept(this, h); } diff --git a/src/main/java/TP2/llvm/ProgramLLVM.java b/src/main/java/TP2/llvm/ProgramLLVM.java index 488c31a..c2522db 100644 --- a/src/main/java/TP2/llvm/ProgramLLVM.java +++ b/src/main/java/TP2/llvm/ProgramLLVM.java @@ -153,7 +153,7 @@ public class ProgramLLVM { } - public static record loadLLVMImpl(TypeLLVM type, int nbBits,int nbBits2, ValLLVM val) implements ExpressionLLVM{ + public static record LoadLLVMImpl(ValLLVM val) implements ExpressionLLVM{ @Override public S accept(ExpressionLLVMVisitor v, H h) { return v.visitLoadLLVM(this, h); @@ -161,7 +161,7 @@ public class ProgramLLVM { @Override public TypeLLVM getType() { - return type; + return val().getType(); } }