diff --git a/src/fun/builtins.bend b/src/fun/builtins.bend index b259e561e..c6e830b8d 100644 --- a/src/fun/builtins.bend +++ b/src/fun/builtins.bend @@ -323,10 +323,14 @@ def IO/FS/read_line.read_chunks(fd, chunks): # Writes a list of bytes to a file given by a path. def IO/FS/write_file(path, bytes): with IO: - f <- IO/done_on_err(IO/FS/open(path, "w")) - * <- IO/done_on_err(IO/FS/write(f, bytes)) - * <- IO/done_on_err(IO/FS/close(f)) - return wrap(bytes) + f <- IO/FS/open(path, "w") + match f: + case Result/Err: + return wrap(Result/Err(f.val)) + case Result/Ok: + * <- IO/done_on_err(IO/FS/write(f.val, bytes)) + * <- IO/done_on_err(IO/FS/close(f.val)) + return wrap(Result/Ok(bytes)) ### Standard input and output utilities diff --git a/tests/golden_tests.rs b/tests/golden_tests.rs index a377c24ff..d4f7c8314 100644 --- a/tests/golden_tests.rs +++ b/tests/golden_tests.rs @@ -427,7 +427,6 @@ fn mutual_recursion() { } #[test] -#[ignore = "while IO is not implemented for hvm32"] fn io() { run_golden_test_dir_multiple( function_name!(), diff --git a/tests/snapshots/io__load.bend.snap b/tests/snapshots/io__load.bend.snap new file mode 100644 index 000000000..392c27c54 --- /dev/null +++ b/tests/snapshots/io__load.bend.snap @@ -0,0 +1,6 @@ +--- +source: tests/golden_tests.rs +input_file: tests/golden_tests/io/load.bend +--- +Strict mode: +"Contents\n" diff --git a/tests/snapshots/io__load_fail.bend.snap b/tests/snapshots/io__load_fail.bend.snap new file mode 100644 index 000000000..5106f7eaa --- /dev/null +++ b/tests/snapshots/io__load_fail.bend.snap @@ -0,0 +1,6 @@ +--- +source: tests/golden_tests.rs +input_file: tests/golden_tests/io/load_fail.bend +--- +Strict mode: +1 diff --git a/tests/snapshots/io__store.bend.snap b/tests/snapshots/io__store.bend.snap new file mode 100644 index 000000000..aeb5109a7 --- /dev/null +++ b/tests/snapshots/io__store.bend.snap @@ -0,0 +1,6 @@ +--- +source: tests/golden_tests.rs +input_file: tests/golden_tests/io/store.bend +--- +Strict mode: +λa (a Result/Ok/tag [40, 77, 97, 105, 110, 41, 32, 61, 32, 48]) diff --git a/tests/snapshots/io__store_fail.bend.snap b/tests/snapshots/io__store_fail.bend.snap new file mode 100644 index 000000000..80b262705 --- /dev/null +++ b/tests/snapshots/io__store_fail.bend.snap @@ -0,0 +1,6 @@ +--- +source: tests/golden_tests.rs +input_file: tests/golden_tests/io/store_fail.bend +--- +Strict mode: +λa (a Result/Err/tag λb (b 2 +2))