diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index d2d2912..3e1cbf2 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -115,7 +115,7 @@ public class toLLVM_Visitor implements ProgramVisitor, h = r.symTable; list.add(new AssignLLVMImp(new VarLLVMImp(t2, r.var,false),new allocaLLVMImp(t2))); }else { - TypeLLVM arrayType = new ArrayLLVMImp(t2, size); + TypeLLVM arrayType = new PointerLLVMImp(t2); //Alloca Result r_size= h.addNewTempVar(); diff --git a/src/main/java/TP2/llvm/Interface.java b/src/main/java/TP2/llvm/Interface.java index ebed265..f37fade 100644 --- a/src/main/java/TP2/llvm/Interface.java +++ b/src/main/java/TP2/llvm/Interface.java @@ -55,6 +55,7 @@ public interface Interface { public S visitVarLLVM(VarLLVMImp e,H h); public S visitIcmpLLVM(IcmpLLVMImp e, H h); public S visitCallLLVM(CallLLVMImp e, H h); + public S visitGetElementPtrLLVM(GetElementPtr getElementPtr, 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 286321b..ac8e989 100644 --- a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java +++ b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java @@ -120,6 +120,13 @@ TypeLLVMVisitor return str + e.type().accept(this,h) + " " + e.val1().accept(this,h) + ", " + e.val2().accept(this,h); } + @Override + public String visitGetElementPtrLLVM(GetElementPtr exp, String h) { + PointerLLVMImp type = (PointerLLVMImp)exp.getType(); + //getelementptr , , + return "getelementptr " + type.type().accept(this, h)+ ", " + exp.ptrVar().type().accept(this, h) + " " + exp.ptrVar().accept(this, h) + ", " + exp.i().getType().accept(this, h) + exp.i().accept(this, h); + } + @Override public String visitIcmpLLVM(IcmpLLVMImp e, String h) { return "icmp ne " + e.val1().getType().accept(this, h) +" "+ e.val1().accept(this, h) + ", " + e.val2().accept(this, h); diff --git a/src/main/java/TP2/llvm/ProgramLLVM.java b/src/main/java/TP2/llvm/ProgramLLVM.java index 7d00882..380926e 100644 --- a/src/main/java/TP2/llvm/ProgramLLVM.java +++ b/src/main/java/TP2/llvm/ProgramLLVM.java @@ -168,6 +168,20 @@ public class ProgramLLVM { } } + public static record GetElementPtr(VarLLVMImp ptrVar, ExpressionLLVM i) implements ExpressionLLVM{ + + @Override + public S accept(ExpressionLLVMVisitor v, H h) { + return v.visitGetElementPtrLLVM(this, h); + } + + @Override + public TypeLLVM getType() { + return ptrVar.type(); + } + + } + //Val public static record ValLLVMImp(TypeLLVM type, int val) implements ValLLVM{ diff --git a/tests/aLaMain.vsl b/tests/aLaMain.vsl index aa49412..bd41780 100644 --- a/tests/aLaMain.vsl +++ b/tests/aLaMain.vsl @@ -2,4 +2,5 @@ FUNC INT main() { INT a,b[10],c,d[11] a:=1 c:=2 + b[1] := 2 } \ No newline at end of file