summaryrefslogtreecommitdiff
path: root/src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink')
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/assembleAndLink/AssemblerAndLinker.java35
1 files changed, 13 insertions, 22 deletions
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();
}