From c035ccc16a86cdbb28e32e53ceaa1ddf26b444f0 Mon Sep 17 00:00:00 2001 From: Alex Snezhko Date: Tue, 25 Apr 2023 15:01:14 -0400 Subject: [PATCH] fixed wasi issue, removed internal runtime mode CLI flag --- compiler/src/compile.re | 2 +- compiler/src/typed/env.re | 6 +- compiler/src/typed/env.rei | 9 +- compiler/src/typed/typed_well_formedness.re | 3 +- compiler/src/typed/typemod.re | 13 +-- compiler/src/utils/config.re | 48 +++++----- compiler/src/utils/config.rei | 6 +- compiler/test/runner.re | 5 +- compiler/test/suites/arrays.re | 5 +- compiler/test/suites/basic_functionality.re | 5 +- compiler/test/suites/blocks.re | 5 +- compiler/test/suites/chars.re | 15 +-- compiler/test/suites/comments.re | 61 +++--------- compiler/test/suites/parsing.re | 70 +++----------- compiler/test/suites/strings.re | 60 +++--------- compiler/test/test_utils.re | 3 + stdlib/runtime/wasi.gr | 100 +++++++++++++++++++- 17 files changed, 187 insertions(+), 229 deletions(-) diff --git a/compiler/src/compile.re b/compiler/src/compile.re index 9fbf9d5967..72e4a55a4d 100644 --- a/compiler/src/compile.re +++ b/compiler/src/compile.re @@ -251,7 +251,7 @@ let compile_wasi_polyfill = () => { switch (Grain_utils.Config.wasi_polyfill^) { | Some(file) => Grain_utils.Config.preserve_config(() => { - Grain_utils.Config.runtime_mode := true; + Grain_utils.Config.compilation_mode := Grain_utils.Config.Runtime; let cstate = { cstate_desc: Initial(InputFile(file)), cstate_filename: Some(file), diff --git a/compiler/src/typed/env.re b/compiler/src/typed/env.re index a073de8c91..fddba0c83e 100644 --- a/compiler/src/typed/env.re +++ b/compiler/src/typed/env.re @@ -658,11 +658,7 @@ let get_components = c => | Some(c) => c }; -type compilation_mode = - | Normal /* Standard compilation with regular bells and whistles */ - | Runtime /* GC doesn't exist yet, allocations happen in runtime heap */; - -let current_unit = ref(("", "", Normal)); +let current_unit = ref(("", "", Grain_utils.Config.Normal)); let set_unit = unit => current_unit := unit; diff --git a/compiler/src/typed/env.rei b/compiler/src/typed/env.rei index bb4b2e9193..165c89a48a 100644 --- a/compiler/src/typed/env.rei +++ b/compiler/src/typed/env.rei @@ -161,13 +161,8 @@ let add_local_type: (Path.t, type_declaration, t) => t; let add_item: (signature_item, t) => t; let add_signature: (signature, t) => t; -/* Remember the current compilation unit: modname * filename * compilation mode. */ -type compilation_mode = - | Normal - | Runtime; - -let set_unit: ((string, string, compilation_mode)) => unit; -let get_unit: unit => (string, string, compilation_mode); +let set_unit: ((string, string, Grain_utils.Config.compilation_mode)) => unit; +let get_unit: unit => (string, string, Grain_utils.Config.compilation_mode); let is_runtime_mode: unit => bool; /* Insertion of a module */ diff --git a/compiler/src/typed/typed_well_formedness.re b/compiler/src/typed/typed_well_formedness.re index 94bb147e17..3db97163d9 100644 --- a/compiler/src/typed/typed_well_formedness.re +++ b/compiler/src/typed/typed_well_formedness.re @@ -299,7 +299,8 @@ module WellFormednessArg: TypedtreeIter.IteratorArgument = { if (exp_is_wasm_unsafe(exp) && !( Grain_utils.Config.no_gc^ - || Grain_utils.Config.runtime_mode^ + || Grain_utils.Config.compilation_mode^ + == Grain_utils.Config.Runtime || is_unsafe() )) { raise(Error(exp_loc, WasmOutsideDisableGc)); diff --git a/compiler/src/typed/typemod.re b/compiler/src/typed/typemod.re index e9fc676fb8..90dcc655a7 100644 --- a/compiler/src/typed/typemod.re +++ b/compiler/src/typed/typemod.re @@ -999,17 +999,14 @@ let initial_env = () => { ); }; -let get_compilation_mode = () => - if (Grain_utils.Config.runtime_mode^) { - Env.Runtime; - } else { - Env.Normal; - }; - let type_implementation = prog => { let sourcefile = prog.prog_loc.loc_start.pos_fname; let module_name = prog.module_name.txt; - Env.set_unit((module_name, sourcefile, get_compilation_mode())); + Env.set_unit(( + module_name, + sourcefile, + Grain_utils.Config.compilation_mode^, + )); let initenv = initial_env(); let (statements, sg, finalenv) = type_module(initenv, prog.statements); let simple_sg = simplify_signature(sg); diff --git a/compiler/src/utils/config.re b/compiler/src/utils/config.re index 7381f21dd2..b56358f62f 100644 --- a/compiler/src/utils/config.re +++ b/compiler/src/utils/config.re @@ -305,22 +305,6 @@ let preserve_config = thunk => { let preserve_all_configs = thunk => preserve_root_config(() => preserve_config(thunk)); -let with_cli_options = (term: 'a): Cmdliner.Term.t('a) => { - open Cmdliner; - open Term; - let process_option = acc => - fun - | Spec(arg, names, box) => - const((a, b) => { - box := a; - b; - }) - $ Arg.value(arg) - $ acc; - let folded = List.fold_left(process_option, const(term), specs^); - folded; -}; - let option_conv = ((prsr, prntr)) => ( x => switch (prsr(x)) { @@ -398,12 +382,11 @@ let import_memory = false, ); -let runtime_mode = - toggle_flag( - ~names=["compilation-mode"], - ~doc="Compilation mode (advanced use only)", - false, - ); +type compilation_mode = + | Normal /* Standard compilation with regular bells and whistles */ + | Runtime /* GC doesn't exist yet, allocations happen in runtime heap */; + +let compilation_mode = internal_opt(Normal, Digestable); let statically_link = toggle_flag(~names=["no-link"], ~doc="Disable static linking", true); @@ -502,6 +485,23 @@ let source_map = let print_warnings = internal_opt(true, NotDigestable); +let with_cli_options = (term: 'a): Cmdliner.Term.t('a) => { + open Cmdliner; + open Term; + let process_option = acc => + fun + | Spec(arg, names, box) => + const((a, b) => { + box := a; + b; + }) + $ Arg.value(arg) + $ acc; + let folded = List.fold_left(process_option, const(term), specs^); + compilation_mode := Normal; + folded; +}; + let stdlib_directory = (): option(string) => Option.map( path => Filepath.(to_string(String.derelativize(path))), @@ -529,7 +529,7 @@ let apply_attribute_flags = (~no_pervasives as np, ~runtime_mode as rm) => { no_pervasives := true; }; if (rm) { - runtime_mode := true; + compilation_mode := Runtime; }; }; @@ -551,7 +551,7 @@ let get_implicit_opens = () => { } else { [Pervasives_mod]; }; - if (runtime_mode^) { + if (compilation_mode^ == Runtime) { []; } else { // Pervasives goes first, just for good measure. diff --git a/compiler/src/utils/config.rei b/compiler/src/utils/config.rei index 7dc08caece..23ab59080e 100644 --- a/compiler/src/utils/config.rei +++ b/compiler/src/utils/config.rei @@ -1,6 +1,10 @@ type profile = | Release; +type compilation_mode = + | Normal /* Standard compilation with regular bells and whistles */ + | Runtime /* GC doesn't exist yet, allocations happen in runtime heap */; + /** The Grain stdlib directory, based on the current configuration */ let stdlib_directory: unit => option(string); @@ -80,7 +84,7 @@ let import_memory: ref(bool); /** Whether this module should be compiled in runtime mode */ -let runtime_mode: ref(bool); +let compilation_mode: ref(compilation_mode); /** Statically link modules after compilation */ diff --git a/compiler/test/runner.re b/compiler/test/runner.re index 3e20555719..f0e74426fa 100644 --- a/compiler/test/runner.re +++ b/compiler/test/runner.re @@ -302,10 +302,7 @@ let makeRunner = test, ~num_pages=?, ~config_fn=?, - ~compile_flags=Grain_parsing.Parsetree.{ - no_pervasives: false, - runtime_mode: false, - }, + ~compile_flags=Test_utils.default_compile_flags, name, prog, expected, diff --git a/compiler/test/suites/arrays.re b/compiler/test/suites/arrays.re index 249393ca00..0faf03bd63 100644 --- a/compiler/test/suites/arrays.re +++ b/compiler/test/suites/arrays.re @@ -123,10 +123,7 @@ describe("arrays", ({test, testSkip}) => { state[0] = 5", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [ Toplevel.expr( diff --git a/compiler/test/suites/basic_functionality.re b/compiler/test/suites/basic_functionality.re index f5415a4929..2cc81c3c7b 100644 --- a/compiler/test/suites/basic_functionality.re +++ b/compiler/test/suites/basic_functionality.re @@ -255,10 +255,7 @@ describe("basic functionality", ({test, testSkip}) => { type Über = Number |}, { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [ Toplevel.data([ diff --git a/compiler/test/suites/blocks.re b/compiler/test/suites/blocks.re index 23fc2318ac..5994c9a773 100644 --- a/compiler/test/suites/blocks.re +++ b/compiler/test/suites/blocks.re @@ -12,10 +12,7 @@ describe("blocks", ({test}) => { "block_parse_lone_no_args_enum", "module Test; { Foo }", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [ Toplevel.expr( diff --git a/compiler/test/suites/chars.re b/compiler/test/suites/chars.re index fe729ac721..bb48216531 100644 --- a/compiler/test/suites/chars.re +++ b/compiler/test/suites/chars.re @@ -102,10 +102,7 @@ Did you mean to create the string "\{\\"test\\": 1\}" instead?|}, "char_loc_simple", "module Test\n'a'", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mkloc( "Test", @@ -125,10 +122,7 @@ Did you mean to create the string "\{\\"test\\": 1\}" instead?|}, "char_loc_code", "module Test\n'\\u{1F3F4}'", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mkloc( "Test", @@ -148,10 +142,7 @@ Did you mean to create the string "\{\\"test\\": 1\}" instead?|}, "char_loc_emoji", "module Test\n'πŸ’―'", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mkloc( "Test", diff --git a/compiler/test/suites/comments.re b/compiler/test/suites/comments.re index 653b5036a4..bf0b1cb330 100644 --- a/compiler/test/suites/comments.re +++ b/compiler/test/suites/comments.re @@ -12,10 +12,7 @@ describe("comments", ({test}) => { "comment_parse_1", "// Test\nmodule Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -32,10 +29,7 @@ describe("comments", ({test}) => { "comment_parse_2", "/* Test */module Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -52,10 +46,7 @@ describe("comments", ({test}) => { "comment_parse_block_multiline_trim", "/* Test\n Weird indent\n Normal indent */module Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -72,10 +63,7 @@ describe("comments", ({test}) => { "comment_parse_block_multiline_trim2", "/* Test\r\n Weird indent\r\n Normal indent */module Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -92,10 +80,7 @@ describe("comments", ({test}) => { "comment_parse_3", "/** Test */module Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -112,10 +97,7 @@ describe("comments", ({test}) => { "comment_parse_doc_multiline_trim_all_same_indent", "/**\n Test\n Weird indent\n Normal indent */module Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -132,10 +114,7 @@ describe("comments", ({test}) => { "comment_parse_doc_multiline_trim_keeps_differnt_indent", "/** Test\n Weird indent\n Normal indent */module Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -153,10 +132,7 @@ describe("comments", ({test}) => { // Note: There are explicit tab characters in this string to test them "/**\n Test\r\n Weird indent\r\n Normal indent */module Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -173,10 +149,7 @@ describe("comments", ({test}) => { "comment_parse_4", "#!/bin/grain\nmodule Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -193,10 +166,7 @@ describe("comments", ({test}) => { "comment_parse_block_deasterisk", "/* Test\n* no space before\n * space before\n * tab before\n *no space after */module Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -213,10 +183,7 @@ describe("comments", ({test}) => { "comment_parse_doc_deasterisk", "/** Test\n* no space before\n * space before\n * tab before\n *no space after */module Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ @@ -233,11 +200,7 @@ describe("comments", ({test}) => { "comment_parse_doc_deasterisk2", "/** Test\n* no space before\n * space before\n * tab before\n * trailing space after */module Test", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, - + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [ diff --git a/compiler/test/suites/parsing.re b/compiler/test/suites/parsing.re index 171eb982d9..13d90afbb2 100644 --- a/compiler/test/suites/parsing.re +++ b/compiler/test/suites/parsing.re @@ -39,10 +39,7 @@ describe("parsing", ({test, testSkip}) => { op, "module Test; a " ++ op ++ " b", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [ Toplevel.expr( @@ -112,10 +109,7 @@ describe("parsing", ({test, testSkip}) => { "custom_op_precedence_1", "module Test; a +++ b *** c", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [ Toplevel.expr( @@ -149,10 +143,7 @@ describe("parsing", ({test, testSkip}) => { "custom_op_precedence_2", "module Test; a &&-- b &-- c", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [ Toplevel.expr( @@ -186,10 +177,7 @@ describe("parsing", ({test, testSkip}) => { "custom_op_precedence_3", "module Test; a ||-- b |-- c", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [ Toplevel.expr( @@ -223,10 +211,7 @@ describe("parsing", ({test, testSkip}) => { "regression_issue_1473", "module Test; a << b >> c", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [ Toplevel.expr( @@ -260,10 +245,7 @@ describe("parsing", ({test, testSkip}) => { "regression_issue_1609", "module Test; return -1", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [ Toplevel.expr( @@ -311,10 +293,7 @@ describe("parsing", ({test, testSkip}) => { \xe2\x80\xa9 ", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [], comments: [], @@ -347,10 +326,7 @@ describe("parsing", ({test, testSkip}) => { "end_of_statement_linefeed", "module Test; a\x0ab", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [Toplevel.expr(a), Toplevel.expr(b)], comments: [], @@ -361,10 +337,7 @@ describe("parsing", ({test, testSkip}) => { "end_of_statement_formfeed", "module Test; a\x0cb", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [Toplevel.expr(a), Toplevel.expr(b)], comments: [], @@ -375,10 +348,7 @@ describe("parsing", ({test, testSkip}) => { "end_of_statement_carriagereturn", "module Test; a\x0db", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [Toplevel.expr(a), Toplevel.expr(b)], comments: [], @@ -389,10 +359,7 @@ describe("parsing", ({test, testSkip}) => { "end_of_statement_crlf", "module Test; a\x0d\x0ab", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [Toplevel.expr(a), Toplevel.expr(b)], comments: [], @@ -403,10 +370,7 @@ describe("parsing", ({test, testSkip}) => { "end_of_statement_nextline", "module Test; a\xc2\x85b", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [Toplevel.expr(a), Toplevel.expr(b)], comments: [], @@ -417,10 +381,7 @@ describe("parsing", ({test, testSkip}) => { "end_of_statement_lineseparator", "module Test; a\xe2\x80\xa8b", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [Toplevel.expr(a), Toplevel.expr(b)], comments: [], @@ -431,10 +392,7 @@ describe("parsing", ({test, testSkip}) => { "end_of_statement_paragraphseparator", "module Test; a\xe2\x80\xa9b", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [Toplevel.expr(a), Toplevel.expr(b)], comments: [], diff --git a/compiler/test/suites/strings.re b/compiler/test/suites/strings.re index 6ca7f43708..db5398eead 100644 --- a/compiler/test/suites/strings.re +++ b/compiler/test/suites/strings.re @@ -41,10 +41,7 @@ describe("strings", ({test, testSkip}) => { "string_parse_dqs1", "module Test; \"foo\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [str("foo")], comments: [], @@ -55,10 +52,7 @@ describe("strings", ({test, testSkip}) => { "string_parse_dqs2", "module Test; \"bar\\nbaz\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [str("bar\nbaz")], comments: [], @@ -69,10 +63,7 @@ describe("strings", ({test, testSkip}) => { "string_parse_sqs1", "module Test; \"foobar\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [str("foobar")], comments: [], @@ -83,10 +74,7 @@ describe("strings", ({test, testSkip}) => { "string_parse_sqs2", "module Test; \"bar\\u{41}\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [str("barA")], comments: [], @@ -97,10 +85,7 @@ describe("strings", ({test, testSkip}) => { "string_parse_sqs3", "module Test; \"bar\\x41\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [str("barA")], comments: [], @@ -111,10 +96,7 @@ describe("strings", ({test, testSkip}) => { "string_parse_sqs4", "module Test; \"bar\\101\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [str("barA")], comments: [], @@ -125,10 +107,7 @@ describe("strings", ({test, testSkip}) => { "string_parse_sqs5", "module Test; \"bar\\u0041\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [str("barA")], comments: [], @@ -139,10 +118,7 @@ describe("strings", ({test, testSkip}) => { "string_parse_emoji_escape", "module Test; \"πŸ˜‚\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [str("πŸ˜‚")], comments: [], @@ -153,10 +129,7 @@ describe("strings", ({test, testSkip}) => { "string_parse_emoji_literal", "module Test; \"πŸ’―\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mknoloc("Test"), statements: [str("πŸ’―")], comments: [], @@ -168,10 +141,7 @@ describe("strings", ({test, testSkip}) => { "string_loc_single_line", "module Test\n\"foo\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mkloc( "Test", @@ -191,10 +161,7 @@ describe("strings", ({test, testSkip}) => { "string_loc_multi_line", "module Test\n\"foo\nbar\nbaz\nqux\nquux\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mkloc( "Test", @@ -214,10 +181,7 @@ describe("strings", ({test, testSkip}) => { "string_loc_single_line_emoji", "module Test\n\"πŸ’―\"", { - compile_flags: { - no_pervasives: false, - runtime_mode: false, - }, + compile_flags: Grain_tests.Test_utils.default_compile_flags, module_name: Location.mkloc( "Test", diff --git a/compiler/test/test_utils.re b/compiler/test/test_utils.re index f2d0a51cbc..45942da0db 100644 --- a/compiler/test/test_utils.re +++ b/compiler/test/test_utils.re @@ -20,3 +20,6 @@ let waitpid_timeout = (timeout: float, ~wait=0.1, pid: int) => { }; (retpid^, status^); }; + +let default_compile_flags = + Grain_parsing.Parsetree.{no_pervasives: false, runtime_mode: false}; diff --git a/stdlib/runtime/wasi.gr b/stdlib/runtime/wasi.gr index acc15c5f4b..c355359111 100644 --- a/stdlib/runtime/wasi.gr +++ b/stdlib/runtime/wasi.gr @@ -1,4 +1,3 @@ -@runtimeMode module Wasi include "runtime/unsafe/wasmi32" @@ -219,120 +218,219 @@ provide foreign wasm path_rename: ( ) -> WasmI32 from "wasi_snapshot_preview1" // clocks +@unsafe provide let _CLOCK_REALTIME = 0n +@unsafe provide let _CLOCK_MONOTONIC = 1n +@unsafe provide let _CLOCK_PROCESS_CPUTIME = 2n +@unsafe provide let _CLOCK_THREAD_CPUTIME = 3n // time +@unsafe provide let _TIME_SET_ATIM = 1n +@unsafe provide let _TIME_SET_ATIM_NOW = 2n +@unsafe provide let _TIME_SET_MTIM = 4n +@unsafe provide let _TIME_SET_MTIM_NOW = 8n // lookup flags +@unsafe provide let _LOOKUP_FLAG_SYMLINK_FOLLOW = 1n // open flags +@unsafe provide let _OPEN_FLAG_CREAT = 1n +@unsafe provide let _OPEN_FLAG_DIRECTORY = 2n +@unsafe provide let _OPEN_FLAG_EXCL = 4n +@unsafe provide let _OPEN_FLAG_TRUNC = 8n // fdflags +@unsafe provide let _FDFLAG_APPEND = 1n +@unsafe provide let _FDFLAG_DSYNC = 2n +@unsafe provide let _FDFLAG_NONBLOCK = 4n +@unsafe provide let _FDFLAG_RSYNC = 8n +@unsafe provide let _FDFLAG_SYNC = 16n // whence +@unsafe provide let _WHENCE_SET = 0n +@unsafe provide let _WHENCE_CUR = 1n +@unsafe provide let _WHENCE_END = 2n // error codes +@unsafe provide let _ESUCCESS = 0n +@unsafe provide let _ETOOBIG = 1n +@unsafe provide let _EACCES = 2n +@unsafe provide let _EADDRINUSE = 3n +@unsafe provide let _EADDRNOTAVAIL = 4n +@unsafe provide let _EAFNOSUPPORT = 5n +@unsafe provide let _EAGAIN = 6n +@unsafe provide let _EALREADY = 7n +@unsafe provide let _EBADF = 8n +@unsafe provide let _EBADMSG = 9n +@unsafe provide let _EBUSY = 10n +@unsafe provide let _ECANCELED = 11n +@unsafe provide let _ECHILD = 12n +@unsafe provide let _ECONNABORTED = 13n +@unsafe provide let _ECONNREFUSED = 14n +@unsafe provide let _ECONNRESET = 15n +@unsafe provide let _EDEADLK = 16n +@unsafe provide let _EDESTADDRREQ = 17n +@unsafe provide let _EDOM = 18n +@unsafe provide let _EDQUOT = 19n +@unsafe provide let _EEXIST = 20n +@unsafe provide let _EFAULT = 21n +@unsafe provide let _EFBIG = 22n +@unsafe provide let _EHOSTUNREACH = 23n +@unsafe provide let _EIDRM = 24n +@unsafe provide let _EILSEQ = 25n +@unsafe provide let _EINPROGRESS = 26n +@unsafe provide let _EINTR = 27n +@unsafe provide let _EINVAL = 28n +@unsafe provide let _EIO = 29n +@unsafe provide let _EISCONN = 30n +@unsafe provide let _EISDIR = 31n +@unsafe provide let _ELOOP = 32n +@unsafe provide let _EMFILE = 33n +@unsafe provide let _EMLINK = 34n +@unsafe provide let _EMSGSIZE = 35n +@unsafe provide let _EMULTIHOP = 36n +@unsafe provide let _ENAMETOOLONG = 37n +@unsafe provide let _ENETDOWN = 38n +@unsafe provide let _ENETRESET = 39n +@unsafe provide let _ENETUNREACH = 40n +@unsafe provide let _ENFILE = 41n +@unsafe provide let _ENOBUFS = 42n +@unsafe provide let _ENODEV = 43n +@unsafe provide let _ENOENT = 44n +@unsafe provide let _ENOEXEC = 45n +@unsafe provide let _ENOLCK = 46n +@unsafe provide let _ENOLINK = 47n +@unsafe provide let _ENOMEM = 48n +@unsafe provide let _ENOMSG = 49n +@unsafe provide let _ENOPROTOOPT = 50n +@unsafe provide let _ENOSPC = 51n +@unsafe provide let _ENOSYS = 52n +@unsafe provide let _ENOTCONN = 53n +@unsafe provide let _ENOTDIR = 54n +@unsafe provide let _ENOTEMPTY = 55n +@unsafe provide let _ENOTRECOVERABLE = 56n +@unsafe provide let _ENOTSOCK = 57n +@unsafe provide let _ENOTSUP = 58n +@unsafe provide let _ENOTTY = 59n +@unsafe provide let _ENXIO = 60n +@unsafe provide let _EOVERFLOW = 61n +@unsafe provide let _EOWNERDEAD = 62n +@unsafe provide let _EPERM = 63n +@unsafe provide let _EPIPE = 64n +@unsafe provide let _EPROTO = 65n +@unsafe provide let _EPROTONOSUPPORT = 66n +@unsafe provide let _EPROTOTYPE = 67n +@unsafe provide let _ERANGE = 68n +@unsafe provide let _EROFS = 69n +@unsafe provide let _ESPIPE = 70n +@unsafe provide let _ESRCH = 71n +@unsafe provide let _ESTALE = 72n +@unsafe provide let _ETIMEDOUT = 73n +@unsafe provide let _ETXTBSY = 74n +@unsafe provide let _EXDEV = 75n +@unsafe provide let _ENOTCAPABLE = 76n provide exception SystemError(Number) +@disableGC provide let stringOfSystemError = code => { let n = WasmI32.shrS(WasmI32.fromGrain(code), 1n) from WasmI32 use { eq as (==) }