add ret void pour func void

This commit is contained in:
Vu Tuan Minh
2025-04-30 09:38:30 +02:00
parent 0e82527b4b
commit 20f6170168
11 changed files with 31 additions and 40 deletions

View File

@@ -78,8 +78,8 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImp>,
if(!(instrLLVM.getLast() instanceof ReturnLLVMImp || instrLLVM.getLast() instanceof BrLLVMImp)){
instrLLVM.add(new ReturnLLVMImp(type, new ValLLVMImp(type,0)));
}
}else {
//TODO
}else if(type instanceof VoidLLVMImp){
instrLLVM.add(new ReturnLLVMImp(type,null));
}
DefineLLVMImp define = new DefineLLVMImp(fun.nom(), type, paramsLLVM, instrLLVM);
return define;
@@ -138,14 +138,18 @@ public class toLLVM_Visitor implements ProgramVisitor<SymTable,ProgramLLVMImp>,
@Override
public ArrayList<InstructionLLVM> visitReturn(Return_instrImp instr, SymTable h) {
InstrAndVal res = instr.e().accept(this,h);
ValLLVM var = res.val;
InstructionLLVM r = new ReturnLLVMImp(var.getType(),var);
ArrayList<InstructionLLVM> result = new ArrayList<>();
result.addAll(res.instrs);
result.add(r);
//ret void
if (instr.e() == null) {
result.add(new ReturnLLVMImp(new VoidLLVMImp(), null));
}else{
InstrAndVal res = instr.e().accept(this,h);
ValLLVM var = res.val;
InstructionLLVM r = new ReturnLLVMImp(var.getType(),var);
result.addAll(res.instrs);
result.add(r);
}
return result;
}