diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index 908b939..30cd982 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -173,7 +173,7 @@ public class toLLVM_Visitor implements ProgramVisitor, ArrayList params = new ArrayList<>(); String name = h.getGlobalDeclName(); - VarLLVMImp varGlobal = new VarLLVMImp(new CharLLVMImp(true),name,true); + VarLLVMImp varGlobal = new VarLLVMImp(new PointerLLVMImp(new CharLLVMImp()),name,true); params.add(varGlobal); String strGlobal = ""; @@ -183,7 +183,7 @@ public class toLLVM_Visitor implements ProgramVisitor, if(obj instanceof String){ String str = (String)obj; size+=str.length(); //on compte avant car \0A compte pour 1 en LLVM, mais 3 pour java - str = str.replace("\n", "\\0A"); + str = str.replace("\\n", "\\0A"); strGlobal+=str; } else if(obj instanceof Expression){ @@ -198,7 +198,7 @@ public class toLLVM_Visitor implements ProgramVisitor, } strGlobal+="\\00"; - DeclarGlobalLLVMImp globalDecl = new DeclarGlobalLLVMImp(varGlobal,new CharLLVMImp(false),strGlobal,size); //TODO + DeclarGlobalLLVMImp globalDecl = new DeclarGlobalLLVMImp(varGlobal,new CharLLVMImp(),strGlobal,size); //TODO h.addGlobalDecl(globalDecl); l.add(new PrintLLVMImp(globalDecl,params)); @@ -211,7 +211,7 @@ public class toLLVM_Visitor implements ProgramVisitor, ArrayList params = new ArrayList<>(); String name = h.getGlobalDeclName(); - VarLLVMImp varGlobal = new VarLLVMImp(new CharLLVMImp(true),name,true); + VarLLVMImp varGlobal = new VarLLVMImp(new PointerLLVMImp(new CharLLVMImp()),name,true); params.add(varGlobal); @@ -232,7 +232,7 @@ public class toLLVM_Visitor implements ProgramVisitor, } strGlobal+="\\00"; - DeclarGlobalLLVMImp globalDecl = new DeclarGlobalLLVMImp(varGlobal,new CharLLVMImp(false),strGlobal,size);//TODO + DeclarGlobalLLVMImp globalDecl = new DeclarGlobalLLVMImp(varGlobal,new CharLLVMImp(),strGlobal,size);//TODO h.addGlobalDecl(globalDecl); l.add(new ScanLLVMImp(globalDecl,params)); diff --git a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java index 698a5ed..57ddd61 100644 --- a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java +++ b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java @@ -76,7 +76,7 @@ TypeLLVMVisitor @Override public String visitCallVoidLLVM(CallVoidLLVMImp instr, String h) { - String str = INDENT+ "call " + instr.str() + instr.f().type().accept(this, h) + " @"+instr.f().name() + "("; + String str = INDENT+ "call " + instr.f().type().accept(this, h) + " " + instr.str() + " @"+instr.f().name() + "("; for(int i = 0; i return str + ")"; } + @Override + public String visitCallLLVM(CallLLVMImp instr, String h) { + String str = "call " + instr.f().type().accept(this, h) + " " + instr.str() + " @" + instr.f().name() + "("; + + for (int i = 0; i < instr.params().size(); i++) { + str += instr.params().get(i).getType().accept(this, h) + " " + instr.params().get(i).accept(this, h); + if (i < instr.params().size() - 1) str += ", "; + } + return str + ")"; + } + @Override public String visitBinOpLLVM(BinOpLLVMImp e, String h) { String str = ""; @@ -130,28 +141,18 @@ TypeLLVMVisitor return "load" + " " + e.getType().accept(this, h) + ", "+ e.getType().accept(this, h) + "* " + e.val().accept(this, h); } - @Override - public String visitCallLLVM(CallLLVMImp instr, String h) { - String str = "call " + instr.f().type().accept(this, h) + " (" + instr.str() + ") @" + instr.f().name() + "("; - - for (int i = 0; i < instr.params().size(); i++) { - str += instr.params().get(i).getType().accept(this, h) + " " + instr.params().get(i).accept(this, h); - if (i < instr.params().size() - 1) str += ", "; - } - return str + ")"; - } @Override public String visitPrintLLVM(PrintLLVMImp instr, String h) { //TODO DefineLLVMImp printLLVM = new DefineLLVMImp("printf", new IntLLVMImp(), new ArrayList<>(), new ArrayList<>()); - CallLLVMImp callPrint = new CallLLVMImp(printLLVM, instr.l(),"i8*, ..."); + CallVoidLLVMImp callPrint = new CallVoidLLVMImp(printLLVM, instr.l(),"(i8*, ...)"); return callPrint.accept(this, h); } @Override public String visitScanLLVM(ScanLLVMImp instr, String h) { //TODO DefineLLVMImp readLLVM = new DefineLLVMImp("scanf", new IntLLVMImp(), new ArrayList<>(), new ArrayList<>()); - CallLLVMImp callRead = new CallLLVMImp(readLLVM, instr.l(),"i8*, ..."); + CallVoidLLVMImp callRead = new CallVoidLLVMImp(readLLVM, instr.l(),"(i8*, ...)"); return callRead.accept(this, h); } @@ -211,8 +212,7 @@ TypeLLVMVisitor @Override public String visitCharLLVM(CharLLVMImp e, String h) { - if(e.isString()) return "i8*"; - else return "i8"; + return "i8"; } @Override diff --git a/src/main/java/TP2/llvm/ProgramLLVM.java b/src/main/java/TP2/llvm/ProgramLLVM.java index 4616fb1..f5374fd 100644 --- a/src/main/java/TP2/llvm/ProgramLLVM.java +++ b/src/main/java/TP2/llvm/ProgramLLVM.java @@ -218,7 +218,7 @@ public class ProgramLLVM { } } - public static record CharLLVMImp(Boolean isString) implements TypeLLVM{ + public static record CharLLVMImp() implements TypeLLVM{ @Override public S accept(TypeLLVMVisitor v, H h) { return v.visitCharLLVM(this, h);