aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-16 15:02:13 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-16 15:03:50 +0100
commitd2d6019cabed6e04a04bef402442697f9c32df11 (patch)
tree17c8361fd66d9150466533b9b7db079ad16a0c8c /src/main/java
parentdbc6a12eb0d5c746f44698d5d9fd6d88d4e0bd14 (diff)
Create separate error when processes fail
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/ProcessRunner.java26
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java2
-rw-r--r--src/main/java/org/shedlang/compiler/util/processes/ProcessError.java13
-rw-r--r--src/main/java/org/shedlang/compiler/util/processes/ProcessExitError.java7
-rw-r--r--src/main/java/org/shedlang/compiler/util/processes/ProcessRunner.java33
-rw-r--r--src/main/java/org/shedlang/compiler/util/processes/ProcessStartError.java7
8 files changed, 63 insertions, 29 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/ProcessRunner.java b/src/main/java/org/shedlang/compiler/backends/ProcessRunner.java
deleted file mode 100644
index d71bd25b..00000000
--- a/src/main/java/org/shedlang/compiler/backends/ProcessRunner.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.shedlang.compiler.backends;
-
-import java.io.IOException;
-import java.util.List;
-
-public class ProcessRunner {
- private ProcessRunner() {
- }
-
- /**
- * Run a process until it exits, inheriting standard IO from its parent
- * process.
- */
- public static void runInheritIo(List<String> args) throws IOException, InterruptedException {
- var process = new ProcessBuilder(args)
- .inheritIO()
- .start();
-
- var exitCode = process.waitFor();
- if (exitCode != 0) {
- // TODO: better error code
- throw new RuntimeException("exit code: " + exitCode);
- }
- }
-
-}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
index 69f6a710..a3d2af91 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
@@ -25,7 +25,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
-import static org.shedlang.compiler.backends.ProcessRunner.runInheritIo;
+import static org.shedlang.compiler.util.processes.ProcessRunner.runInheritIo;
public class LlvmBackend implements Backend {
public static final LlvmBackend DIRECT = new LlvmBackend("llvm", new CodeGen() {
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java
index 04e13b39..b9d82386 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java
@@ -11,7 +11,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
-import static org.shedlang.compiler.backends.ProcessRunner.runInheritIo;
+import static org.shedlang.compiler.util.processes.ProcessRunner.runInheritIo;
public class LlvmCompiler {
private final Path workingDirectory;
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java
index 10102a0a..584d8832 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java
@@ -21,7 +21,7 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
-import static org.shedlang.compiler.backends.ProcessRunner.runInheritIo;
+import static org.shedlang.compiler.util.processes.ProcessRunner.runInheritIo;
public class WasmBackend implements Backend {
public static final WasmBackend DIRECT = new WasmBackend("wasm", new CodeGen() {
diff --git a/src/main/java/org/shedlang/compiler/util/processes/ProcessError.java b/src/main/java/org/shedlang/compiler/util/processes/ProcessError.java
new file mode 100644
index 00000000..04d9bc47
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/util/processes/ProcessError.java
@@ -0,0 +1,13 @@
+package org.shedlang.compiler.util.processes;
+
+import java.io.IOException;
+
+public class ProcessError extends IOException {
+ public ProcessError(String message) {
+ super(message);
+ }
+
+ public ProcessError(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/util/processes/ProcessExitError.java b/src/main/java/org/shedlang/compiler/util/processes/ProcessExitError.java
new file mode 100644
index 00000000..078ed051
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/util/processes/ProcessExitError.java
@@ -0,0 +1,7 @@
+package org.shedlang.compiler.util.processes;
+
+public class ProcessExitError extends ProcessError {
+ public ProcessExitError(int exitCode) {
+ super("Process exited with exit code: " + exitCode);
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/util/processes/ProcessRunner.java b/src/main/java/org/shedlang/compiler/util/processes/ProcessRunner.java
new file mode 100644
index 00000000..e7d76715
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/util/processes/ProcessRunner.java
@@ -0,0 +1,33 @@
+package org.shedlang.compiler.util.processes;
+
+import java.io.IOException;
+import java.util.List;
+
+public class ProcessRunner {
+ private ProcessRunner() {
+ }
+
+ /**
+ * Run a process until it exits, inheriting standard IO from its parent
+ * process.
+ */
+ public static void runInheritIo(List<String> args) throws InterruptedException, ProcessError {
+ var process = startProcessInheritIo(args);
+
+ var exitCode = process.waitFor();
+ if (exitCode != 0) {
+ throw new ProcessExitError(exitCode);
+ }
+ }
+
+ private static Process startProcessInheritIo(List<String> args) throws ProcessError {
+ try {
+ return new ProcessBuilder(args)
+ .inheritIO()
+ .start();
+ } catch (IOException error) {
+ throw new ProcessStartError(error);
+ }
+ }
+
+}
diff --git a/src/main/java/org/shedlang/compiler/util/processes/ProcessStartError.java b/src/main/java/org/shedlang/compiler/util/processes/ProcessStartError.java
new file mode 100644
index 00000000..0222565b
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/util/processes/ProcessStartError.java
@@ -0,0 +1,7 @@
+package org.shedlang.compiler.util.processes;
+
+public class ProcessStartError extends ProcessError {
+ public ProcessStartError(Throwable cause) {
+ super("Could not start process", cause);
+ }
+}