From 025cee42eaf5f8b1c409e1a3a8fe3df8dac8d262 Mon Sep 17 00:00:00 2001 From: Elias Haugsbakk Date: Mon, 21 Sep 2026 15:38:24 +0200 Subject: refactor exception handling to differentiate internal exceptions from compilation failer --- .../assembleAndLink/AssemblerAndLinker.java | 35 ++++++++-------------- 1 file changed, 13 insertions(+), 22 deletions(-) (limited to 'src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java') diff --git a/src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java b/src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java index 42fe1c3..a2375d1 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java @@ -6,6 +6,7 @@ import java.io.InputStreamReader; import no.eliashaugsbakk.kompilator.IO.File; import no.eliashaugsbakk.kompilator.IO.FileReaderWriter; import no.eliashaugsbakk.kompilator.IO.FileReaderWriterException; +import no.eliashaugsbakk.kompilator.CompilationException; import no.eliashaugsbakk.kompilator.Main; public class AssemblerAndLinker { @@ -15,24 +16,21 @@ public class AssemblerAndLinker { fileReaderWriter = new FileReaderWriter(); } - public void assembleAndLink(String programName, String assembly) { + public void assembleAndLink(String programName, String assembly) throws CompilationException { String assemblyFileName = programName + ".s"; String assembledFileName = programName + ".o"; - try { - fileReaderWriter.writeFile(new File(assemblyFileName, assembly)); - } catch (FileReaderWriterException e) { - IO.println("feil: Kunne ikke skrive filen: " + e.getMessage()); - } + fileReaderWriter.writeFile(new File(assemblyFileName, assembly)); try { // Assembling using: as -o program.o program.s ProcessBuilder asPB = new ProcessBuilder("as", "-o", assembledFileName, assemblyFileName); runProcess(asPB); } catch (IOException e) { - IO.println("feil: Kunne ikke starte GCC\n\n" + e); + throw new CompilationException("Kunne ikke starte assembleren", e); } catch (InterruptedException e) { - IO.println("feil: Kunne ikke vente på GCC-utdata\n\n" + e); + Thread.currentThread().interrupt(); + throw new CompilationException("Ventingen på assembleren ble avbrutt", e); } try { @@ -40,28 +38,21 @@ public class AssemblerAndLinker { ProcessBuilder ldPB = new ProcessBuilder("ld", "-o", programName, assembledFileName); runProcess(ldPB); } catch (IOException e) { - IO.println("feil: Kunne ikke starte GCC\n\n" + e); + throw new CompilationException("Kunne ikke starte lenkeren", e); } catch (InterruptedException e) { - IO.println("feil: Kunne ikke vente på GCC-utdata\n\n" + e); + Thread.currentThread().interrupt(); + throw new CompilationException("Ventingen på lenkeren ble avbrutt", e); } // Clean up if (!Main.VERBOSE) { - try { - fileReaderWriter.deleteFile(assemblyFileName); - } catch (FileReaderWriterException e) { - IO.println("feil: Kunne ikke slette assemblerfilen: " + e.getMessage()); - } - try { - fileReaderWriter.deleteFile(assembledFileName); - } catch (FileReaderWriterException e) { - IO.println("feil: Kunne ikke slette objektfilen: " + e.getMessage()); - } + fileReaderWriter.deleteFile(assemblyFileName); + fileReaderWriter.deleteFile(assembledFileName); } } private static void runProcess(ProcessBuilder processBuilder) - throws IOException, InterruptedException { + throws IOException, InterruptedException, CompilationException { Process process = processBuilder.start(); process.waitFor(); if (process.exitValue() != 0) { @@ -70,7 +61,7 @@ public class AssemblerAndLinker { String line; while ((line = bufferedReader.readLine()) != null) { - System.out.println(line); + throw new CompilationException("Prosessen mislyktes:\n" + line); } bufferedReader.close(); } -- cgit v1.2.3