+++ /dev/null
-package core.io
-
-// Some thoughts about processes and the API.
-//
-// Should processes ever directly dump to standard output?
-// Or should their output always be buffered through a pipe to the user?
-//
-//
-
-
-#local runtime :: package runtime
-#if runtime.Runtime != runtime.Runtime_Onyx {
- #error "This file can only be included in the 'onyx' runtime, because Wasi has not defined how to spawn and manage processes.";
-}
-
-Process :: struct {
- Handle :: #distinct i64;
-
- use stream: Stream;
- process_handle: Handle;
-}
-
-process_spawn :: (path: str, args: [] str, non_blocking_io := false) -> Process {
- handle := runtime.__process_spawn(path, args, non_blocking_io);
-
- return .{
- .{ ^process_stream_vtable },
- handle,
- };
-}
-
-process_kill :: (use p: ^Process) -> bool {
- return runtime.__process_kill(process_handle);
-}
-
-process_wait :: (use p: ^Process) => {
- return runtime.__process_wait(process_handle);
-}
-
-process_destroy :: (use p: ^Process) => {
- runtime.__process_destroy(process_handle);
-}
-
-#local process_stream_vtable := Stream_Vtable.{
- read = (use p: ^Process, buffer: [] u8) -> (Error, u32) {
- // Read from the process stdout
- if cast(i64) process_handle == 0 do return .BadFile, 0;
-
- bytes_read := runtime.__process_read(process_handle, buffer);
- return .None, bytes_read;
- },
-
- write = (use p: ^Process, buffer: [] u8) -> (Error, u32) {
- // Write to the process stdin
- if cast(i64) process_handle == 0 do return .BadFile, 0;
-
- bytes_written := runtime.__process_write(process_handle, buffer);
- return .None, bytes_written;
- },
-
- close = (use p: ^Process) -> Error {
- process_kill(p);
- return .None;
- }
-}
--- /dev/null
+package core.os
+
+// Some thoughts about processes and the API.
+//
+// Should processes ever directly dump to standard output?
+// Or should their output always be buffered through a pipe to the user?
+//
+//
+
+
+#if runtime.Runtime != runtime.Runtime_Onyx {
+ #error "This file can only be included in the 'onyx' runtime, because Wasi has not defined how to spawn and manage processes.";
+}
+
+#local {
+ runtime :: package runtime
+ io :: package core.io
+}
+
+Process :: struct {
+ Handle :: #distinct i64;
+
+ use stream: io.Stream;
+ process_handle: Handle;
+}
+
+process_spawn :: (path: str, args: [] str, non_blocking_io := false) -> Process {
+ handle := runtime.__process_spawn(path, args, non_blocking_io);
+
+ return .{
+ .{ ^process_stream_vtable },
+ handle,
+ };
+}
+
+process_kill :: (use p: ^Process) -> bool {
+ return runtime.__process_kill(process_handle);
+}
+
+process_wait :: (use p: ^Process) => {
+ return runtime.__process_wait(process_handle);
+}
+
+process_destroy :: (use p: ^Process) => {
+ runtime.__process_destroy(process_handle);
+}
+
+#local process_stream_vtable := io.Stream_Vtable.{
+ read = (use p: ^Process, buffer: [] u8) -> (io.Error, u32) {
+ // Read from the process stdout
+ if cast(i64) process_handle == 0 do return .BadFile, 0;
+
+ bytes_read := runtime.__process_read(process_handle, buffer);
+ return .None, bytes_read;
+ },
+
+ write = (use p: ^Process, buffer: [] u8) -> (io.Error, u32) {
+ // Write to the process stdin
+ if cast(i64) process_handle == 0 do return .BadFile, 0;
+
+ bytes_written := runtime.__process_write(process_handle, buffer);
+ return .None, bytes_written;
+ },
+
+ close = (use p: ^Process) -> io.Error {
+ process_kill(p);
+ return .None;
+ }
+}
#export "_thread_exit" _thread_exit
}
-#load "core/io/process"
+#load "core/os/process"
#local ProcessResult :: enum {
Success :: 0x00;
InternalErr :: 0x03;
}
-__process_spawn :: (path: str, args: [] str, non_blocking_io: bool) -> io.Process.Handle #foreign "env" "process_spawn" ---
-__process_read :: (handle: io.Process.Handle, buffer: [] u8) -> i32 #foreign "env" "process_read" ---
-__process_write :: (handle: io.Process.Handle, buffer: [] u8) -> i32 #foreign "env" "process_write" ---
-__process_kill :: (handle: io.Process.Handle) -> bool #foreign "env" "process_kill" ---
-__process_wait :: (handle: io.Process.Handle) -> ProcessResult #foreign "env" "process_wait" ---
-__process_destroy :: (handle: io.Process.Handle) -> void #foreign "env" "process_destroy" ---
\ No newline at end of file
+__process_spawn :: (path: str, args: [] str, non_blocking_io: bool) -> os.Process.Handle #foreign "env" "process_spawn" ---
+__process_read :: (handle: os.Process.Handle, buffer: [] u8) -> i32 #foreign "env" "process_read" ---
+__process_write :: (handle: os.Process.Handle, buffer: [] u8) -> i32 #foreign "env" "process_write" ---
+__process_kill :: (handle: os.Process.Handle) -> bool #foreign "env" "process_kill" ---
+__process_wait :: (handle: os.Process.Handle) -> ProcessResult #foreign "env" "process_wait" ---
+__process_destroy :: (handle: os.Process.Handle) -> void #foreign "env" "process_destroy" ---
\ No newline at end of file
for #no_close *cases {
printf("[{}] Running test {}...\n", context.thread_id, it.source_file);
- proc := io.process_spawn(onyx_cmd, .["run", it.source_file]);
- defer io.process_destroy(^proc);
+ proc := os.process_spawn(onyx_cmd, .["run", it.source_file]);
+ defer os.process_destroy(^proc);
proc_reader := io.reader_make(^proc);
output := io.read_all(^proc_reader);
defer memory.free_slice(^output);
- if exit := io.process_wait(^proc); exit != .Success {
+ if exit := os.process_wait(^proc); exit != .Success {
// Error running the test case
print_color(.Red, "[{}] Error '{}' in test case {}.\n{}", context.thread_id, exit, it.source_file, output);
at_least_one_test_failed = true;