diff --git a/src/main/java/TP2/Main.java b/src/main/java/TP2/Main.java index f8263fe..fe77088 100644 --- a/src/main/java/TP2/Main.java +++ b/src/main/java/TP2/Main.java @@ -56,12 +56,12 @@ public class Main { //System.err.println("todo " + ast); //System.out.println("\n\n PRETTYPRINTER VSL : \n--------------\n"); - System.out.println(ast.prettyprinter()); + //System.out.println(ast.prettyprinter()); //System.out.println("\n\n PRETTYPRINTER VSL : \n--------------\n"); // Verify the program semantic // Generate the intermediate representation - System.out.println("\n\n"); + //System.out.println("\n\n"); ProgramLLVMImp astLLVM = ast.toLLVM(); //System.out.println("\n\n PRETTYPRINTER LLVM : \n--------------\n"); diff --git a/src/main/java/TP2/asd/SymTable.java b/src/main/java/TP2/asd/SymTable.java index 4afbb34..5f980b2 100644 --- a/src/main/java/TP2/asd/SymTable.java +++ b/src/main/java/TP2/asd/SymTable.java @@ -132,7 +132,7 @@ public class SymTable { } public String getGlobalDeclName(){; - return "fmt"+id[2]; + return ".fmt"+id[2]; } public void addGlobalDecl(DeclarGlobalLLVMImp decl){ diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index bf7ae92..2db14ab 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -78,6 +78,8 @@ public class toLLVM_Visitor implements ProgramVisitor, if(!(instrLLVM.getLast() instanceof ReturnLLVMImp || instrLLVM.getLast() instanceof BrLLVMImp)){ instrLLVM.add(new ReturnLLVMImp(type, new ValLLVMImp(type,0))); } + }else { + //TODO } DefineLLVMImp define = new DefineLLVMImp(fun.nom(), type, paramsLLVM, instrLLVM); return define; @@ -225,7 +227,6 @@ public class toLLVM_Visitor implements ProgramVisitor, h.addGlobalDecl(globalDecl); l.add(new ScanLLVMImp(globalDecl,params)); - return l; } @@ -257,9 +258,9 @@ public class toLLVM_Visitor implements ProgramVisitor, @Override public ArrayList visitIfThen(IfThenImp instr, SymTable h) { ArrayList l = new ArrayList<>(); - String labelIf= "if"+h.getNewIdLabel()+":"; - String labelThen= "then"+h.getNewIdLabel()+":"; - String labelFin= "fin"+h.getNewIdLabel(); + String labelIf= "if"+h.getNewIdLabel(); + String labelThen= "then"+h.getNewIdLabel(); + String labelFin= "fi"+h.getNewIdLabel(); l.add(new LabelLLVMImp(labelIf)); InstrAndVal temp = instr.e().accept(this,h); @@ -406,12 +407,17 @@ public class toLLVM_Visitor implements ProgramVisitor, //} //Pour c=func(x,y) - Result res = h.addNewTempVar(); - h = res.symTable; - VarLLVMImp var = new VarLLVMImp(fLLVM.define.type(), res.var,false); - - l.add(new AssignLLVMImp(var, new CallLLVMImp(fLLVM.define,paramsLLVM,""))); - return new InstrAndVal(l, var); + if (fLLVM.define.type() instanceof VoidLLVMImp) { + l.add(new CallVoidLLVMImp(fLLVM.define, paramsLLVM, "")); + return new InstrAndVal(l, null); + } else { + Result res = h.addNewTempVar(); + h = res.symTable; + VarLLVMImp var = new VarLLVMImp(fLLVM.define.type(), res.var, false); + + l.add(new AssignLLVMImp(var, new CallLLVMImp(fLLVM.define, paramsLLVM, ""))); + return new InstrAndVal(l, var); + } } @Override diff --git a/tests/fragment1/if1 b/tests/fragment1/if1 new file mode 100755 index 0000000..2966266 Binary files /dev/null and b/tests/fragment1/if1 differ diff --git a/tests/fragment1/if2 b/tests/fragment1/if2 new file mode 100755 index 0000000..03a3d5e Binary files /dev/null and b/tests/fragment1/if2 differ diff --git a/tests/fragment1/while1 b/tests/fragment1/while1 new file mode 100755 index 0000000..3b5dc3f Binary files /dev/null and b/tests/fragment1/while1 differ