diff --git a/crates/compiler/build/Cargo.toml b/crates/compiler/build/Cargo.toml index 97320d5462..1ef780ec5b 100644 --- a/crates/compiler/build/Cargo.toml +++ b/crates/compiler/build/Cargo.toml @@ -25,7 +25,7 @@ roc_gen_wasm = { path = "../gen_wasm" } roc_gen_dev = { path = "../gen_dev", default-features = false } roc_reporting = { path = "../../reporting" } roc_error_macros = { path = "../../error_macros" } -roc_std = { path = "../../roc_std", default-features = false } +roc_std = { path = "../../roc_std" } roc_utils = { path = "../../utils" } bumpalo = { version = "3.8.0", features = ["collections"] } libloading = "0.7.1" diff --git a/crates/compiler/build/src/link.rs b/crates/compiler/build/src/link.rs index 9e0cc84a67..14654c503a 100644 --- a/crates/compiler/build/src/link.rs +++ b/crates/compiler/build/src/link.rs @@ -102,7 +102,7 @@ fn find_wasi_libc_path() -> PathBuf { panic!("cannot find `wasi-libc.a`") } -#[cfg(not(target_os = "macos"))] +#[cfg(all(unix, not(target_os = "macos")))] #[allow(clippy::too_many_arguments)] pub fn build_zig_host_native( env_path: &str, @@ -166,6 +166,62 @@ pub fn build_zig_host_native( command.output().unwrap() } +#[cfg(windows)] +#[allow(clippy::too_many_arguments)] +pub fn build_zig_host_native( + env_path: &str, + env_home: &str, + emit_bin: &str, + zig_host_src: &str, + zig_str_path: &str, + target: &str, + opt_level: OptLevel, + shared_lib_path: Option<&Path>, + _target_valgrind: bool, +) -> Output { + let mut command = Command::new(&zig_executable()); + command + .env_clear() + .env("PATH", env_path) + .env("HOME", env_home); + + if let Some(shared_lib_path) = shared_lib_path { + command.args(&[ + "build-exe", + "-fPIE", + shared_lib_path.to_str().unwrap(), + &bitcode::get_builtins_host_obj_path(), + ]); + } else { + command.args(&["build-obj", "-fPIC"]); + } + + command.args(&[ + zig_host_src, + emit_bin, + "--pkg-begin", + "str", + zig_str_path, + "--pkg-end", + // include the zig runtime + // "-fcompiler-rt", compiler-rt causes segfaults on windows; investigate why + // include libc + "--library", + "c", + // cross-compile? + "-target", + target, + ]); + + if matches!(opt_level, OptLevel::Optimize) { + command.args(&["-O", "ReleaseSafe"]); + } else if matches!(opt_level, OptLevel::Size) { + command.args(&["-O", "ReleaseSmall"]); + } + + command.output().unwrap() +} + #[cfg(target_os = "macos")] #[allow(clippy::too_many_arguments)] pub fn build_zig_host_native( diff --git a/crates/compiler/gen_dev/Cargo.toml b/crates/compiler/gen_dev/Cargo.toml index 17e652c01b..ec6f8264c4 100644 --- a/crates/compiler/gen_dev/Cargo.toml +++ b/crates/compiler/gen_dev/Cargo.toml @@ -30,7 +30,7 @@ packed_struct = "0.10.0" [dev-dependencies] roc_can = { path = "../can" } roc_parse = { path = "../parse" } -roc_std = { path = "../../roc_std", default-features = false } +roc_std = { path = "../../roc_std" } bumpalo = { version = "3.8.0", features = ["collections"] } capstone = "0.11.0" diff --git a/crates/compiler/gen_llvm/Cargo.toml b/crates/compiler/gen_llvm/Cargo.toml index a5da18532d..c7a33cb5bb 100644 --- a/crates/compiler/gen_llvm/Cargo.toml +++ b/crates/compiler/gen_llvm/Cargo.toml @@ -14,7 +14,7 @@ roc_builtins = { path = "../builtins" } roc_error_macros = { path = "../../error_macros" } roc_mono = { path = "../mono" } roc_target = { path = "../roc_target" } -roc_std = { path = "../../roc_std", default-features = false } +roc_std = { path = "../../roc_std" } roc_debug_flags = { path = "../debug_flags" } roc_region = { path = "../region" } morphic_lib = { path = "../../vendor/morphic_lib" } diff --git a/crates/compiler/gen_llvm/src/llvm/build.rs b/crates/compiler/gen_llvm/src/llvm/build.rs index 383157a103..f16061e1fe 100644 --- a/crates/compiler/gen_llvm/src/llvm/build.rs +++ b/crates/compiler/gen_llvm/src/llvm/build.rs @@ -4243,7 +4243,7 @@ pub fn build_wasm_test_wrapper<'a, 'ctx, 'env>( opt_level, procedures, Some(entry_point), - Some(Path::new("/tmp/test.ll")), + Some(&std::env::temp_dir().join("test.ll")), ); promote_to_wasm_test_wrapper(env, mod_solutions, entry_point.symbol, entry_point.layout) @@ -4260,7 +4260,7 @@ pub fn build_procedures_return_main<'a, 'ctx, 'env>( opt_level, procedures, Some(entry_point), - Some(Path::new("/tmp/test.ll")), + Some(&std::env::temp_dir().join("test.ll")), ); promote_to_main_function(env, mod_solutions, entry_point.symbol, entry_point.layout) @@ -4278,7 +4278,7 @@ pub fn build_procedures_expose_expects<'a, 'ctx, 'env>( opt_level, procedures, opt_entry_point, - Some(Path::new("/tmp/test.ll")), + Some(&std::env::temp_dir().join("test.ll")), ); let captures_niche = CapturesNiche::no_niche(); diff --git a/crates/compiler/gen_wasm/Cargo.toml b/crates/compiler/gen_wasm/Cargo.toml index 4350739601..5415f50f97 100644 --- a/crates/compiler/gen_wasm/Cargo.toml +++ b/crates/compiler/gen_wasm/Cargo.toml @@ -13,5 +13,5 @@ roc_collections = { path = "../collections" } roc_module = { path = "../module" } roc_mono = { path = "../mono" } roc_target = { path = "../roc_target" } -roc_std = { path = "../../roc_std", default-features = false } +roc_std = { path = "../../roc_std" } roc_error_macros = { path = "../../error_macros" } diff --git a/crates/compiler/gen_wasm/src/lib.rs b/crates/compiler/gen_wasm/src/lib.rs index 4fa721a08a..4d2236831c 100644 --- a/crates/compiler/gen_wasm/src/lib.rs +++ b/crates/compiler/gen_wasm/src/lib.rs @@ -264,3 +264,51 @@ pub const DEBUG_SETTINGS: WasmDebugSettings = WasmDebugSettings { keep_test_binary: false && cfg!(debug_assertions), skip_dead_code_elim: false && cfg!(debug_assertions), }; + +#[cfg(test)] +mod dummy_platform_functions { + // `cargo test` produces an executable. At least on Windows, this means that extern symbols must be defined. This crate imports roc_std which + // defines a bunch of externs, and uses the three below. We provide dummy implementations because these functions are not called. + use core::ffi::c_void; + + /// # Safety + /// This is only marked unsafe to typecheck without warnings in the rest of the code here. + #[no_mangle] + pub unsafe extern "C" fn roc_alloc(_size: usize, _alignment: u32) -> *mut c_void { + unimplemented!("It is not valid to call roc alloc from within the compiler. Please use the \"platform\" feature if this is a platform.") + } + + /// # Safety + /// This is only marked unsafe to typecheck without warnings in the rest of the code here. + #[no_mangle] + pub unsafe extern "C" fn roc_realloc( + _ptr: *mut c_void, + _new_size: usize, + _old_size: usize, + _alignment: u32, + ) -> *mut c_void { + unimplemented!("It is not valid to call roc realloc from within the compiler. Please use the \"platform\" feature if this is a platform.") + } + + /// # Safety + /// This is only marked unsafe to typecheck without warnings in the rest of the code here. + #[no_mangle] + pub unsafe extern "C" fn roc_dealloc(_ptr: *mut c_void, _alignment: u32) { + unimplemented!("It is not valid to call roc dealloc from within the compiler. Please use the \"platform\" feature if this is a platform.") + } + + #[no_mangle] + pub unsafe extern "C" fn roc_panic(_c_ptr: *mut c_void, _tag_id: u32) { + unimplemented!("It is not valid to call roc panic from within the compiler. Please use the \"platform\" feature if this is a platform.") + } + + #[no_mangle] + pub fn roc_memcpy(_dst: *mut c_void, _src: *mut c_void, _n: usize) -> *mut c_void { + unimplemented!("It is not valid to call roc memcpy from within the compiler. Please use the \"platform\" feature if this is a platform.") + } + + #[no_mangle] + pub fn roc_memset(_dst: *mut c_void, _c: i32, _n: usize) -> *mut c_void { + unimplemented!("It is not valid to call roc memset from within the compiler. Please use the \"platform\" feature if this is a platform.") + } +} diff --git a/crates/compiler/mono/Cargo.toml b/crates/compiler/mono/Cargo.toml index f2ee5c0ba3..83650ee24f 100644 --- a/crates/compiler/mono/Cargo.toml +++ b/crates/compiler/mono/Cargo.toml @@ -15,7 +15,7 @@ roc_can = { path = "../can" } roc_derive_key = { path = "../derive_key" } roc_derive = { path = "../derive" } roc_late_solve = { path = "../late_solve" } -roc_std = { path = "../../roc_std", default-features = false } +roc_std = { path = "../../roc_std" } roc_problem = { path = "../problem" } roc_builtins = { path = "../builtins" } roc_target = { path = "../roc_target" } diff --git a/crates/compiler/test_gen/Cargo.toml b/crates/compiler/test_gen/Cargo.toml index fd3d97d1c0..c3931dbda8 100644 --- a/crates/compiler/test_gen/Cargo.toml +++ b/crates/compiler/test_gen/Cargo.toml @@ -34,7 +34,7 @@ roc_parse = { path = "../parse" } roc_build = { path = "../build", features = ["target-aarch64", "target-x86_64", "target-wasm32"] } roc_target = { path = "../roc_target" } roc_error_macros = { path = "../../error_macros" } -roc_std = { path = "../../roc_std" } +roc_std = { path = "../../roc_std" } roc_debug_flags = {path="../debug_flags"} bumpalo = { version = "3.8.0", features = ["collections"] } either = "1.6.1" diff --git a/crates/compiler/test_gen/build.rs b/crates/compiler/test_gen/build.rs index 66879ab115..94e1577d15 100644 --- a/crates/compiler/test_gen/build.rs +++ b/crates/compiler/test_gen/build.rs @@ -17,6 +17,14 @@ fn main() { } } +const fn object_file_extension() -> &'static str { + if cfg!(windows) { + "obj" + } else { + "o" + } +} + fn build_wasm_linking_test_host() { let host_source_path = PathBuf::from("src") .join("helpers") @@ -53,15 +61,8 @@ fn build_wasm_linking_test_host() { &format!("-femit-bin={}", host_wasm), ]); - let host_obj_path = PathBuf::from("build").join("wasm_linking_test_host.o"); - let host_obj = host_obj_path.to_str().unwrap(); - run_zig(&[ - "build-obj", - host_source, - &format!("-femit-bin={}", &host_obj), - ]); - - let import_obj_path = PathBuf::from("build").join("wasm_linking_host_imports.o"); + let mut import_obj_path = PathBuf::from("build").join("wasm_linking_host_imports"); + import_obj_path.set_extension(object_file_extension()); let import_obj = import_obj_path.to_str().unwrap(); run_zig(&[ "build-obj", @@ -71,9 +72,15 @@ fn build_wasm_linking_test_host() { run_zig(&[ "build-exe", - host_obj, + host_source, import_obj, &format!("-femit-bin={}", host_native), + #[cfg(windows)] + "--subsystem", + #[cfg(windows)] + "console", + #[cfg(windows)] + "-lc", ]); } @@ -143,7 +150,12 @@ fn run_zig(args: &[&str]) { println!("{} {}", zig, args.join(" ")); let output = Command::new(&zig).args(args).output().unwrap(); - assert!(output.status.success(), "{:#?}", output); + if !output.status.success() { + eprintln!("stdout:\n{}", String::from_utf8_lossy(&output.stdout)); + eprintln!("stderr:\n{}", String::from_utf8_lossy(&output.stderr)); + panic!("zig call failed with status {:?}", output.status); + } + assert!(output.stdout.is_empty(), "{:#?}", output); assert!(output.stderr.is_empty(), "{:#?}", output); } diff --git a/crates/compiler/test_gen/src/helpers/llvm.rs b/crates/compiler/test_gen/src/helpers/llvm.rs index ea37fd6507..eab7f79c7b 100644 --- a/crates/compiler/test_gen/src/helpers/llvm.rs +++ b/crates/compiler/test_gen/src/helpers/llvm.rs @@ -273,11 +273,12 @@ fn create_llvm_module<'a>( // Verify the module if let Err(errors) = env.module.verify() { - let path = "/tmp/test.ll"; - env.module.print_to_file(path).unwrap(); + let path = std::env::temp_dir().join("test.ll"); + env.module.print_to_file(&path).unwrap(); panic!( - "Errors defining module:\n\n{}\n\nI have written the full module to `{path}`", - errors.to_string() + "Errors defining module:\n\n{}\n\nI have written the full module to `{:?}`", + errors.to_string(), + path ); } diff --git a/crates/compiler/test_mono/generated/encode_derived_nested_record_string.txt b/crates/compiler/test_mono/generated/encode_derived_nested_record_string.txt index 995f6b5fe6..98e270cb45 100644 --- a/crates/compiler/test_mono/generated/encode_derived_nested_record_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_nested_record_string.txt @@ -11,7 +11,7 @@ procedure #Derived.2 (#Derived.3, #Derived.4, #Attr.12): let #Derived_gen.8 : {Str} = CallByName #Derived.5 #Derived.1; let #Derived_gen.6 : {Str, {Str}} = Struct {#Derived_gen.7, #Derived_gen.8}; let #Derived_gen.5 : List {Str, {Str}} = Array [#Derived_gen.6]; - let #Derived_gen.4 : {List {Str, {Str}}} = CallByName Json.19 #Derived_gen.5; + let #Derived_gen.4 : {List {Str, {Str}}} = CallByName Json.20 #Derived_gen.5; let #Derived_gen.3 : List U8 = CallByName Encode.23 #Derived.3 #Derived_gen.4 #Derived.4; ret #Derived_gen.3; @@ -25,10 +25,10 @@ procedure #Derived.7 (#Derived.8, #Derived.9, #Attr.12): inc #Derived.6; dec #Attr.12; let #Derived_gen.21 : Str = "b"; - let #Derived_gen.22 : {Str} = CallByName Json.17 #Derived.6; + let #Derived_gen.22 : {Str} = CallByName Json.18 #Derived.6; let #Derived_gen.20 : {Str, {Str}} = Struct {#Derived_gen.21, #Derived_gen.22}; let #Derived_gen.19 : List {Str, {Str}} = Array [#Derived_gen.20]; - let #Derived_gen.18 : {List {Str, {Str}}} = CallByName Json.19 #Derived_gen.19; + let #Derived_gen.18 : {List {Str, {Str}}} = CallByName Json.20 #Derived_gen.19; let #Derived_gen.17 : List U8 = CallByName Encode.23 #Derived.8 #Derived_gen.18 #Derived.9; ret #Derived_gen.17; @@ -52,7 +52,7 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96): ret Encode.106; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.113 : List U8 = CallByName Json.81 Encode.94 Encode.96 Encode.102; + let Encode.113 : List U8 = CallByName Json.103 Encode.94 Encode.96 Encode.102; ret Encode.113; procedure Encode.23 (Encode.94, Encode.102, Encode.96): @@ -60,11 +60,11 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96): ret Encode.115; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.125 : List U8 = CallByName Json.81 Encode.94 Encode.96 Encode.102; + let Encode.125 : List U8 = CallByName Json.103 Encode.94 Encode.96 Encode.102; ret Encode.125; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.128 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102; + let Encode.128 : List U8 = CallByName Json.87 Encode.94 Encode.96 Encode.102; ret Encode.128; procedure Encode.25 (Encode.100, Encode.101): @@ -74,165 +74,165 @@ procedure Encode.25 (Encode.100, Encode.101): ret Encode.103; procedure Json.1 (): - let Json.106 : {} = Struct {}; - ret Json.106; + let Json.318 : {} = Struct {}; + ret Json.318; -procedure Json.17 (Json.64): - let Json.153 : {Str} = Struct {Json.64}; - let Json.152 : {Str} = CallByName Encode.22 Json.153; - ret Json.152; - -procedure Json.19 (Json.80): - let Json.108 : {List {Str, {Str}}} = Struct {Json.80}; - let Json.107 : {List {Str, {Str}}} = CallByName Encode.22 Json.108; - ret Json.107; - -procedure Json.19 (Json.80): - let Json.150 : {List {Str, {Str}}} = Struct {Json.80}; - let Json.149 : {List {Str, {Str}}} = CallByName Encode.22 Json.150; - ret Json.149; - -procedure Json.65 (Json.66, Json.154, #Attr.12): - let Json.64 : Str = StructAtIndex 0 #Attr.12; - inc Json.64; +procedure Json.103 (Json.104, Json.321, #Attr.12): + let Json.102 : List {Str, {Str}} = StructAtIndex 0 #Attr.12; + inc Json.102; dec #Attr.12; - let Json.194 : I32 = 34i64; - let Json.193 : U8 = CallByName Num.123 Json.194; - let Json.191 : List U8 = CallByName List.4 Json.66 Json.193; - let Json.192 : List U8 = CallByName Str.12 Json.64; - let Json.188 : List U8 = CallByName List.8 Json.191 Json.192; - let Json.190 : I32 = 34i64; - let Json.189 : U8 = CallByName Num.123 Json.190; - let Json.187 : List U8 = CallByName List.4 Json.188 Json.189; - ret Json.187; + let Json.354 : I32 = 123i64; + let Json.353 : U8 = CallByName Num.123 Json.354; + let Json.106 : List U8 = CallByName List.4 Json.104 Json.353; + let Json.352 : U64 = CallByName List.6 Json.102; + let Json.329 : {List U8, U64} = Struct {Json.106, Json.352}; + let Json.330 : {} = Struct {}; + let Json.328 : {List U8, U64} = CallByName List.18 Json.102 Json.329 Json.330; + dec Json.102; + let Json.108 : List U8 = StructAtIndex 0 Json.328; + inc Json.108; + dec Json.328; + let Json.327 : I32 = 125i64; + let Json.326 : U8 = CallByName Num.123 Json.327; + let Json.325 : List U8 = CallByName List.4 Json.108 Json.326; + ret Json.325; -procedure Json.81 (Json.82, Json.109, #Attr.12): - let Json.80 : List {Str, {Str}} = StructAtIndex 0 #Attr.12; - inc Json.80; +procedure Json.103 (Json.104, Json.321, #Attr.12): + let Json.102 : List {Str, {Str}} = StructAtIndex 0 #Attr.12; + inc Json.102; dec #Attr.12; - let Json.142 : I32 = 123i64; - let Json.141 : U8 = CallByName Num.123 Json.142; - let Json.84 : List U8 = CallByName List.4 Json.82 Json.141; - let Json.140 : U64 = CallByName List.6 Json.80; - let Json.117 : {List U8, U64} = Struct {Json.84, Json.140}; - let Json.118 : {} = Struct {}; - let Json.116 : {List U8, U64} = CallByName List.18 Json.80 Json.117 Json.118; - dec Json.80; - let Json.86 : List U8 = StructAtIndex 0 Json.116; - inc Json.86; - dec Json.116; - let Json.115 : I32 = 125i64; - let Json.114 : U8 = CallByName Num.123 Json.115; - let Json.113 : List U8 = CallByName List.4 Json.86 Json.114; - ret Json.113; + let Json.397 : I32 = 123i64; + let Json.396 : U8 = CallByName Num.123 Json.397; + let Json.106 : List U8 = CallByName List.4 Json.104 Json.396; + let Json.395 : U64 = CallByName List.6 Json.102; + let Json.372 : {List U8, U64} = Struct {Json.106, Json.395}; + let Json.373 : {} = Struct {}; + let Json.371 : {List U8, U64} = CallByName List.18 Json.102 Json.372 Json.373; + dec Json.102; + let Json.108 : List U8 = StructAtIndex 0 Json.371; + inc Json.108; + dec Json.371; + let Json.370 : I32 = 125i64; + let Json.369 : U8 = CallByName Num.123 Json.370; + let Json.368 : List U8 = CallByName List.4 Json.108 Json.369; + ret Json.368; -procedure Json.81 (Json.82, Json.109, #Attr.12): - let Json.80 : List {Str, {Str}} = StructAtIndex 0 #Attr.12; - inc Json.80; - dec #Attr.12; - let Json.185 : I32 = 123i64; - let Json.184 : U8 = CallByName Num.123 Json.185; - let Json.84 : List U8 = CallByName List.4 Json.82 Json.184; - let Json.183 : U64 = CallByName List.6 Json.80; - let Json.160 : {List U8, U64} = Struct {Json.84, Json.183}; - let Json.161 : {} = Struct {}; - let Json.159 : {List U8, U64} = CallByName List.18 Json.80 Json.160 Json.161; - dec Json.80; - let Json.86 : List U8 = StructAtIndex 0 Json.159; - inc Json.86; - dec Json.159; - let Json.158 : I32 = 125i64; - let Json.157 : U8 = CallByName Num.123 Json.158; - let Json.156 : List U8 = CallByName List.4 Json.86 Json.157; - ret Json.156; - -procedure Json.83 (Json.111, Json.112): - let Json.89 : Str = StructAtIndex 0 Json.112; - inc Json.89; - let Json.90 : {Str} = StructAtIndex 1 Json.112; - inc Json.90; - dec Json.112; - let Json.87 : List U8 = StructAtIndex 0 Json.111; - inc Json.87; - let Json.88 : U64 = StructAtIndex 1 Json.111; - dec Json.111; - let Json.139 : I32 = 34i64; - let Json.138 : U8 = CallByName Num.123 Json.139; - let Json.136 : List U8 = CallByName List.4 Json.87 Json.138; - let Json.137 : List U8 = CallByName Str.12 Json.89; - let Json.133 : List U8 = CallByName List.8 Json.136 Json.137; - let Json.135 : I32 = 34i64; - let Json.134 : U8 = CallByName Num.123 Json.135; - let Json.130 : List U8 = CallByName List.4 Json.133 Json.134; - let Json.132 : I32 = 58i64; - let Json.131 : U8 = CallByName Num.123 Json.132; - let Json.128 : List U8 = CallByName List.4 Json.130 Json.131; - let Json.129 : {} = Struct {}; - let Json.91 : List U8 = CallByName Encode.23 Json.128 Json.90 Json.129; - joinpoint Json.123 Json.92: - let Json.121 : U64 = 1i64; - let Json.120 : U64 = CallByName Num.20 Json.88 Json.121; - let Json.119 : {List U8, U64} = Struct {Json.92, Json.120}; - ret Json.119; +procedure Json.105 (Json.323, Json.324): + let Json.111 : Str = StructAtIndex 0 Json.324; + inc Json.111; + let Json.112 : {Str} = StructAtIndex 1 Json.324; + inc Json.112; + dec Json.324; + let Json.109 : List U8 = StructAtIndex 0 Json.323; + inc Json.109; + let Json.110 : U64 = StructAtIndex 1 Json.323; + dec Json.323; + let Json.351 : I32 = 34i64; + let Json.350 : U8 = CallByName Num.123 Json.351; + let Json.348 : List U8 = CallByName List.4 Json.109 Json.350; + let Json.349 : List U8 = CallByName Str.12 Json.111; + let Json.345 : List U8 = CallByName List.8 Json.348 Json.349; + let Json.347 : I32 = 34i64; + let Json.346 : U8 = CallByName Num.123 Json.347; + let Json.342 : List U8 = CallByName List.4 Json.345 Json.346; + let Json.344 : I32 = 58i64; + let Json.343 : U8 = CallByName Num.123 Json.344; + let Json.340 : List U8 = CallByName List.4 Json.342 Json.343; + let Json.341 : {} = Struct {}; + let Json.113 : List U8 = CallByName Encode.23 Json.340 Json.112 Json.341; + joinpoint Json.335 Json.114: + let Json.333 : U64 = 1i64; + let Json.332 : U64 = CallByName Num.20 Json.110 Json.333; + let Json.331 : {List U8, U64} = Struct {Json.114, Json.332}; + ret Json.331; in - let Json.127 : U64 = 1i64; - let Json.124 : Int1 = CallByName Num.24 Json.88 Json.127; - if Json.124 then - let Json.126 : I32 = 44i64; - let Json.125 : U8 = CallByName Num.123 Json.126; - let Json.122 : List U8 = CallByName List.4 Json.91 Json.125; - jump Json.123 Json.122; + let Json.339 : U64 = 1i64; + let Json.336 : Int1 = CallByName Num.24 Json.110 Json.339; + if Json.336 then + let Json.338 : I32 = 44i64; + let Json.337 : U8 = CallByName Num.123 Json.338; + let Json.334 : List U8 = CallByName List.4 Json.113 Json.337; + jump Json.335 Json.334; else - jump Json.123 Json.91; + jump Json.335 Json.113; -procedure Json.83 (Json.111, Json.112): - let Json.89 : Str = StructAtIndex 0 Json.112; - inc Json.89; - let Json.90 : {Str} = StructAtIndex 1 Json.112; - inc Json.90; - dec Json.112; - let Json.87 : List U8 = StructAtIndex 0 Json.111; - inc Json.87; - let Json.88 : U64 = StructAtIndex 1 Json.111; - dec Json.111; - let Json.182 : I32 = 34i64; - let Json.181 : U8 = CallByName Num.123 Json.182; - let Json.179 : List U8 = CallByName List.4 Json.87 Json.181; - let Json.180 : List U8 = CallByName Str.12 Json.89; - let Json.176 : List U8 = CallByName List.8 Json.179 Json.180; - let Json.178 : I32 = 34i64; - let Json.177 : U8 = CallByName Num.123 Json.178; - let Json.173 : List U8 = CallByName List.4 Json.176 Json.177; - let Json.175 : I32 = 58i64; - let Json.174 : U8 = CallByName Num.123 Json.175; - let Json.171 : List U8 = CallByName List.4 Json.173 Json.174; - let Json.172 : {} = Struct {}; - let Json.91 : List U8 = CallByName Encode.23 Json.171 Json.90 Json.172; - joinpoint Json.166 Json.92: - let Json.164 : U64 = 1i64; - let Json.163 : U64 = CallByName Num.20 Json.88 Json.164; - let Json.162 : {List U8, U64} = Struct {Json.92, Json.163}; - ret Json.162; +procedure Json.105 (Json.323, Json.324): + let Json.111 : Str = StructAtIndex 0 Json.324; + inc Json.111; + let Json.112 : {Str} = StructAtIndex 1 Json.324; + inc Json.112; + dec Json.324; + let Json.109 : List U8 = StructAtIndex 0 Json.323; + inc Json.109; + let Json.110 : U64 = StructAtIndex 1 Json.323; + dec Json.323; + let Json.394 : I32 = 34i64; + let Json.393 : U8 = CallByName Num.123 Json.394; + let Json.391 : List U8 = CallByName List.4 Json.109 Json.393; + let Json.392 : List U8 = CallByName Str.12 Json.111; + let Json.388 : List U8 = CallByName List.8 Json.391 Json.392; + let Json.390 : I32 = 34i64; + let Json.389 : U8 = CallByName Num.123 Json.390; + let Json.385 : List U8 = CallByName List.4 Json.388 Json.389; + let Json.387 : I32 = 58i64; + let Json.386 : U8 = CallByName Num.123 Json.387; + let Json.383 : List U8 = CallByName List.4 Json.385 Json.386; + let Json.384 : {} = Struct {}; + let Json.113 : List U8 = CallByName Encode.23 Json.383 Json.112 Json.384; + joinpoint Json.378 Json.114: + let Json.376 : U64 = 1i64; + let Json.375 : U64 = CallByName Num.20 Json.110 Json.376; + let Json.374 : {List U8, U64} = Struct {Json.114, Json.375}; + ret Json.374; in - let Json.170 : U64 = 1i64; - let Json.167 : Int1 = CallByName Num.24 Json.88 Json.170; - if Json.167 then - let Json.169 : I32 = 44i64; - let Json.168 : U8 = CallByName Num.123 Json.169; - let Json.165 : List U8 = CallByName List.4 Json.91 Json.168; - jump Json.166 Json.165; + let Json.382 : U64 = 1i64; + let Json.379 : Int1 = CallByName Num.24 Json.110 Json.382; + if Json.379 then + let Json.381 : I32 = 44i64; + let Json.380 : U8 = CallByName Num.123 Json.381; + let Json.377 : List U8 = CallByName List.4 Json.113 Json.380; + jump Json.378 Json.377; else - jump Json.166 Json.91; + jump Json.378 Json.113; + +procedure Json.18 (Json.86): + let Json.365 : {Str} = Struct {Json.86}; + let Json.364 : {Str} = CallByName Encode.22 Json.365; + ret Json.364; + +procedure Json.20 (Json.102): + let Json.320 : {List {Str, {Str}}} = Struct {Json.102}; + let Json.319 : {List {Str, {Str}}} = CallByName Encode.22 Json.320; + ret Json.319; + +procedure Json.20 (Json.102): + let Json.362 : {List {Str, {Str}}} = Struct {Json.102}; + let Json.361 : {List {Str, {Str}}} = CallByName Encode.22 Json.362; + ret Json.361; + +procedure Json.87 (Json.88, Json.366, #Attr.12): + let Json.86 : Str = StructAtIndex 0 #Attr.12; + inc Json.86; + dec #Attr.12; + let Json.406 : I32 = 34i64; + let Json.405 : U8 = CallByName Num.123 Json.406; + let Json.403 : List U8 = CallByName List.4 Json.88 Json.405; + let Json.404 : List U8 = CallByName Str.12 Json.86; + let Json.400 : List U8 = CallByName List.8 Json.403 Json.404; + let Json.402 : I32 = 34i64; + let Json.401 : U8 = CallByName Num.123 Json.402; + let Json.399 : List U8 = CallByName List.4 Json.400 Json.401; + ret Json.399; procedure List.133 (List.134, List.135, #Attr.12): let List.132 : {} = StructAtIndex 0 #Attr.12; - let List.434 : {List U8, U64} = CallByName Json.83 List.134 List.135; + let List.434 : {List U8, U64} = CallByName Json.105 List.134 List.135; let List.433 : [C [], C {List U8, U64}] = TagId(1) List.434; ret List.433; procedure List.133 (List.134, List.135, #Attr.12): let List.132 : {} = StructAtIndex 0 #Attr.12; - let List.515 : {List U8, U64} = CallByName Json.83 List.134 List.135; + let List.515 : {List U8, U64} = CallByName Json.105 List.134 List.135; let List.514 : [C [], C {List U8, U64}] = TagId(1) List.515; ret List.514; diff --git a/crates/compiler/test_mono/generated/encode_derived_record_one_field_string.txt b/crates/compiler/test_mono/generated/encode_derived_record_one_field_string.txt index 8563241976..fda4fb2049 100644 --- a/crates/compiler/test_mono/generated/encode_derived_record_one_field_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_record_one_field_string.txt @@ -8,10 +8,10 @@ procedure #Derived.2 (#Derived.3, #Derived.4, #Attr.12): inc #Derived.1; dec #Attr.12; let #Derived_gen.7 : Str = "a"; - let #Derived_gen.8 : {Str} = CallByName Json.17 #Derived.1; + let #Derived_gen.8 : {Str} = CallByName Json.18 #Derived.1; let #Derived_gen.6 : {Str, {Str}} = Struct {#Derived_gen.7, #Derived_gen.8}; let #Derived_gen.5 : List {Str, {Str}} = Array [#Derived_gen.6]; - let #Derived_gen.4 : {List {Str, {Str}}} = CallByName Json.19 #Derived_gen.5; + let #Derived_gen.4 : {List {Str, {Str}}} = CallByName Json.20 #Derived_gen.5; let #Derived_gen.3 : List U8 = CallByName Encode.23 #Derived.3 #Derived_gen.4 #Derived.4; ret #Derived_gen.3; @@ -29,11 +29,11 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96): ret Encode.106; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.113 : List U8 = CallByName Json.81 Encode.94 Encode.96 Encode.102; + let Encode.113 : List U8 = CallByName Json.103 Encode.94 Encode.96 Encode.102; ret Encode.113; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.116 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102; + let Encode.116 : List U8 = CallByName Json.87 Encode.94 Encode.96 Encode.102; ret Encode.116; procedure Encode.25 (Encode.100, Encode.101): @@ -43,95 +43,95 @@ procedure Encode.25 (Encode.100, Encode.101): ret Encode.103; procedure Json.1 (): - let Json.106 : {} = Struct {}; - ret Json.106; + let Json.318 : {} = Struct {}; + ret Json.318; -procedure Json.17 (Json.64): - let Json.111 : {Str} = Struct {Json.64}; - let Json.110 : {Str} = CallByName Encode.22 Json.111; - ret Json.110; - -procedure Json.19 (Json.80): - let Json.108 : {List {Str, {Str}}} = Struct {Json.80}; - let Json.107 : {List {Str, {Str}}} = CallByName Encode.22 Json.108; - ret Json.107; - -procedure Json.65 (Json.66, Json.112, #Attr.12): - let Json.64 : Str = StructAtIndex 0 #Attr.12; - inc Json.64; +procedure Json.103 (Json.104, Json.321, #Attr.12): + let Json.102 : List {Str, {Str}} = StructAtIndex 0 #Attr.12; + inc Json.102; dec #Attr.12; - let Json.154 : I32 = 34i64; - let Json.153 : U8 = CallByName Num.123 Json.154; - let Json.151 : List U8 = CallByName List.4 Json.66 Json.153; - let Json.152 : List U8 = CallByName Str.12 Json.64; - let Json.148 : List U8 = CallByName List.8 Json.151 Json.152; - let Json.150 : I32 = 34i64; - let Json.149 : U8 = CallByName Num.123 Json.150; - let Json.147 : List U8 = CallByName List.4 Json.148 Json.149; - ret Json.147; + let Json.357 : I32 = 123i64; + let Json.356 : U8 = CallByName Num.123 Json.357; + let Json.106 : List U8 = CallByName List.4 Json.104 Json.356; + let Json.355 : U64 = CallByName List.6 Json.102; + let Json.332 : {List U8, U64} = Struct {Json.106, Json.355}; + let Json.333 : {} = Struct {}; + let Json.331 : {List U8, U64} = CallByName List.18 Json.102 Json.332 Json.333; + dec Json.102; + let Json.108 : List U8 = StructAtIndex 0 Json.331; + inc Json.108; + dec Json.331; + let Json.330 : I32 = 125i64; + let Json.329 : U8 = CallByName Num.123 Json.330; + let Json.328 : List U8 = CallByName List.4 Json.108 Json.329; + ret Json.328; -procedure Json.81 (Json.82, Json.109, #Attr.12): - let Json.80 : List {Str, {Str}} = StructAtIndex 0 #Attr.12; - inc Json.80; - dec #Attr.12; - let Json.145 : I32 = 123i64; - let Json.144 : U8 = CallByName Num.123 Json.145; - let Json.84 : List U8 = CallByName List.4 Json.82 Json.144; - let Json.143 : U64 = CallByName List.6 Json.80; - let Json.120 : {List U8, U64} = Struct {Json.84, Json.143}; - let Json.121 : {} = Struct {}; - let Json.119 : {List U8, U64} = CallByName List.18 Json.80 Json.120 Json.121; - dec Json.80; - let Json.86 : List U8 = StructAtIndex 0 Json.119; - inc Json.86; - dec Json.119; - let Json.118 : I32 = 125i64; - let Json.117 : U8 = CallByName Num.123 Json.118; - let Json.116 : List U8 = CallByName List.4 Json.86 Json.117; - ret Json.116; - -procedure Json.83 (Json.114, Json.115): - let Json.89 : Str = StructAtIndex 0 Json.115; - inc Json.89; - let Json.90 : {Str} = StructAtIndex 1 Json.115; - inc Json.90; - dec Json.115; - let Json.87 : List U8 = StructAtIndex 0 Json.114; - inc Json.87; - let Json.88 : U64 = StructAtIndex 1 Json.114; - dec Json.114; - let Json.142 : I32 = 34i64; - let Json.141 : U8 = CallByName Num.123 Json.142; - let Json.139 : List U8 = CallByName List.4 Json.87 Json.141; - let Json.140 : List U8 = CallByName Str.12 Json.89; - let Json.136 : List U8 = CallByName List.8 Json.139 Json.140; - let Json.138 : I32 = 34i64; - let Json.137 : U8 = CallByName Num.123 Json.138; - let Json.133 : List U8 = CallByName List.4 Json.136 Json.137; - let Json.135 : I32 = 58i64; - let Json.134 : U8 = CallByName Num.123 Json.135; - let Json.131 : List U8 = CallByName List.4 Json.133 Json.134; - let Json.132 : {} = Struct {}; - let Json.91 : List U8 = CallByName Encode.23 Json.131 Json.90 Json.132; - joinpoint Json.126 Json.92: - let Json.124 : U64 = 1i64; - let Json.123 : U64 = CallByName Num.20 Json.88 Json.124; - let Json.122 : {List U8, U64} = Struct {Json.92, Json.123}; - ret Json.122; +procedure Json.105 (Json.326, Json.327): + let Json.111 : Str = StructAtIndex 0 Json.327; + inc Json.111; + let Json.112 : {Str} = StructAtIndex 1 Json.327; + inc Json.112; + dec Json.327; + let Json.109 : List U8 = StructAtIndex 0 Json.326; + inc Json.109; + let Json.110 : U64 = StructAtIndex 1 Json.326; + dec Json.326; + let Json.354 : I32 = 34i64; + let Json.353 : U8 = CallByName Num.123 Json.354; + let Json.351 : List U8 = CallByName List.4 Json.109 Json.353; + let Json.352 : List U8 = CallByName Str.12 Json.111; + let Json.348 : List U8 = CallByName List.8 Json.351 Json.352; + let Json.350 : I32 = 34i64; + let Json.349 : U8 = CallByName Num.123 Json.350; + let Json.345 : List U8 = CallByName List.4 Json.348 Json.349; + let Json.347 : I32 = 58i64; + let Json.346 : U8 = CallByName Num.123 Json.347; + let Json.343 : List U8 = CallByName List.4 Json.345 Json.346; + let Json.344 : {} = Struct {}; + let Json.113 : List U8 = CallByName Encode.23 Json.343 Json.112 Json.344; + joinpoint Json.338 Json.114: + let Json.336 : U64 = 1i64; + let Json.335 : U64 = CallByName Num.20 Json.110 Json.336; + let Json.334 : {List U8, U64} = Struct {Json.114, Json.335}; + ret Json.334; in - let Json.130 : U64 = 1i64; - let Json.127 : Int1 = CallByName Num.24 Json.88 Json.130; - if Json.127 then - let Json.129 : I32 = 44i64; - let Json.128 : U8 = CallByName Num.123 Json.129; - let Json.125 : List U8 = CallByName List.4 Json.91 Json.128; - jump Json.126 Json.125; + let Json.342 : U64 = 1i64; + let Json.339 : Int1 = CallByName Num.24 Json.110 Json.342; + if Json.339 then + let Json.341 : I32 = 44i64; + let Json.340 : U8 = CallByName Num.123 Json.341; + let Json.337 : List U8 = CallByName List.4 Json.113 Json.340; + jump Json.338 Json.337; else - jump Json.126 Json.91; + jump Json.338 Json.113; + +procedure Json.18 (Json.86): + let Json.323 : {Str} = Struct {Json.86}; + let Json.322 : {Str} = CallByName Encode.22 Json.323; + ret Json.322; + +procedure Json.20 (Json.102): + let Json.320 : {List {Str, {Str}}} = Struct {Json.102}; + let Json.319 : {List {Str, {Str}}} = CallByName Encode.22 Json.320; + ret Json.319; + +procedure Json.87 (Json.88, Json.324, #Attr.12): + let Json.86 : Str = StructAtIndex 0 #Attr.12; + inc Json.86; + dec #Attr.12; + let Json.366 : I32 = 34i64; + let Json.365 : U8 = CallByName Num.123 Json.366; + let Json.363 : List U8 = CallByName List.4 Json.88 Json.365; + let Json.364 : List U8 = CallByName Str.12 Json.86; + let Json.360 : List U8 = CallByName List.8 Json.363 Json.364; + let Json.362 : I32 = 34i64; + let Json.361 : U8 = CallByName Num.123 Json.362; + let Json.359 : List U8 = CallByName List.4 Json.360 Json.361; + ret Json.359; procedure List.133 (List.134, List.135, #Attr.12): let List.132 : {} = StructAtIndex 0 #Attr.12; - let List.441 : {List U8, U64} = CallByName Json.83 List.134 List.135; + let List.441 : {List U8, U64} = CallByName Json.105 List.134 List.135; let List.440 : [C [], C {List U8, U64}] = TagId(1) List.441; ret List.440; diff --git a/crates/compiler/test_mono/generated/encode_derived_record_two_field_strings.txt b/crates/compiler/test_mono/generated/encode_derived_record_two_field_strings.txt index 2d895e110b..e2211c6e60 100644 --- a/crates/compiler/test_mono/generated/encode_derived_record_two_field_strings.txt +++ b/crates/compiler/test_mono/generated/encode_derived_record_two_field_strings.txt @@ -10,16 +10,16 @@ procedure #Derived.2 (#Derived.3, #Derived.4, #Attr.12): let #Derived_gen.11 : Str = "a"; let #Derived_gen.13 : Str = StructAtIndex 0 #Derived.1; inc #Derived_gen.13; - let #Derived_gen.12 : {Str} = CallByName Json.17 #Derived_gen.13; + let #Derived_gen.12 : {Str} = CallByName Json.18 #Derived_gen.13; let #Derived_gen.6 : {Str, {Str}} = Struct {#Derived_gen.11, #Derived_gen.12}; let #Derived_gen.8 : Str = "b"; let #Derived_gen.10 : Str = StructAtIndex 1 #Derived.1; inc #Derived_gen.10; dec #Derived.1; - let #Derived_gen.9 : {Str} = CallByName Json.17 #Derived_gen.10; + let #Derived_gen.9 : {Str} = CallByName Json.18 #Derived_gen.10; let #Derived_gen.7 : {Str, {Str}} = Struct {#Derived_gen.8, #Derived_gen.9}; let #Derived_gen.5 : List {Str, {Str}} = Array [#Derived_gen.6, #Derived_gen.7]; - let #Derived_gen.4 : {List {Str, {Str}}} = CallByName Json.19 #Derived_gen.5; + let #Derived_gen.4 : {List {Str, {Str}}} = CallByName Json.20 #Derived_gen.5; let #Derived_gen.3 : List U8 = CallByName Encode.23 #Derived.3 #Derived_gen.4 #Derived.4; ret #Derived_gen.3; @@ -37,11 +37,11 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96): ret Encode.106; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.113 : List U8 = CallByName Json.81 Encode.94 Encode.96 Encode.102; + let Encode.113 : List U8 = CallByName Json.103 Encode.94 Encode.96 Encode.102; ret Encode.113; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.117 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102; + let Encode.117 : List U8 = CallByName Json.87 Encode.94 Encode.96 Encode.102; ret Encode.117; procedure Encode.25 (Encode.100, Encode.101): @@ -51,95 +51,95 @@ procedure Encode.25 (Encode.100, Encode.101): ret Encode.103; procedure Json.1 (): - let Json.106 : {} = Struct {}; - ret Json.106; + let Json.318 : {} = Struct {}; + ret Json.318; -procedure Json.17 (Json.64): - let Json.114 : {Str} = Struct {Json.64}; - let Json.113 : {Str} = CallByName Encode.22 Json.114; - ret Json.113; - -procedure Json.19 (Json.80): - let Json.108 : {List {Str, {Str}}} = Struct {Json.80}; - let Json.107 : {List {Str, {Str}}} = CallByName Encode.22 Json.108; - ret Json.107; - -procedure Json.65 (Json.66, Json.112, #Attr.12): - let Json.64 : Str = StructAtIndex 0 #Attr.12; - inc Json.64; +procedure Json.103 (Json.104, Json.321, #Attr.12): + let Json.102 : List {Str, {Str}} = StructAtIndex 0 #Attr.12; + inc Json.102; dec #Attr.12; - let Json.157 : I32 = 34i64; - let Json.156 : U8 = CallByName Num.123 Json.157; - let Json.154 : List U8 = CallByName List.4 Json.66 Json.156; - let Json.155 : List U8 = CallByName Str.12 Json.64; - let Json.151 : List U8 = CallByName List.8 Json.154 Json.155; - let Json.153 : I32 = 34i64; - let Json.152 : U8 = CallByName Num.123 Json.153; - let Json.150 : List U8 = CallByName List.4 Json.151 Json.152; - ret Json.150; + let Json.360 : I32 = 123i64; + let Json.359 : U8 = CallByName Num.123 Json.360; + let Json.106 : List U8 = CallByName List.4 Json.104 Json.359; + let Json.358 : U64 = CallByName List.6 Json.102; + let Json.335 : {List U8, U64} = Struct {Json.106, Json.358}; + let Json.336 : {} = Struct {}; + let Json.334 : {List U8, U64} = CallByName List.18 Json.102 Json.335 Json.336; + dec Json.102; + let Json.108 : List U8 = StructAtIndex 0 Json.334; + inc Json.108; + dec Json.334; + let Json.333 : I32 = 125i64; + let Json.332 : U8 = CallByName Num.123 Json.333; + let Json.331 : List U8 = CallByName List.4 Json.108 Json.332; + ret Json.331; -procedure Json.81 (Json.82, Json.109, #Attr.12): - let Json.80 : List {Str, {Str}} = StructAtIndex 0 #Attr.12; - inc Json.80; - dec #Attr.12; - let Json.148 : I32 = 123i64; - let Json.147 : U8 = CallByName Num.123 Json.148; - let Json.84 : List U8 = CallByName List.4 Json.82 Json.147; - let Json.146 : U64 = CallByName List.6 Json.80; - let Json.123 : {List U8, U64} = Struct {Json.84, Json.146}; - let Json.124 : {} = Struct {}; - let Json.122 : {List U8, U64} = CallByName List.18 Json.80 Json.123 Json.124; - dec Json.80; - let Json.86 : List U8 = StructAtIndex 0 Json.122; - inc Json.86; - dec Json.122; - let Json.121 : I32 = 125i64; - let Json.120 : U8 = CallByName Num.123 Json.121; - let Json.119 : List U8 = CallByName List.4 Json.86 Json.120; - ret Json.119; - -procedure Json.83 (Json.117, Json.118): - let Json.89 : Str = StructAtIndex 0 Json.118; - inc Json.89; - let Json.90 : {Str} = StructAtIndex 1 Json.118; - inc Json.90; - dec Json.118; - let Json.87 : List U8 = StructAtIndex 0 Json.117; - inc Json.87; - let Json.88 : U64 = StructAtIndex 1 Json.117; - dec Json.117; - let Json.145 : I32 = 34i64; - let Json.144 : U8 = CallByName Num.123 Json.145; - let Json.142 : List U8 = CallByName List.4 Json.87 Json.144; - let Json.143 : List U8 = CallByName Str.12 Json.89; - let Json.139 : List U8 = CallByName List.8 Json.142 Json.143; - let Json.141 : I32 = 34i64; - let Json.140 : U8 = CallByName Num.123 Json.141; - let Json.136 : List U8 = CallByName List.4 Json.139 Json.140; - let Json.138 : I32 = 58i64; - let Json.137 : U8 = CallByName Num.123 Json.138; - let Json.134 : List U8 = CallByName List.4 Json.136 Json.137; - let Json.135 : {} = Struct {}; - let Json.91 : List U8 = CallByName Encode.23 Json.134 Json.90 Json.135; - joinpoint Json.129 Json.92: - let Json.127 : U64 = 1i64; - let Json.126 : U64 = CallByName Num.20 Json.88 Json.127; - let Json.125 : {List U8, U64} = Struct {Json.92, Json.126}; - ret Json.125; +procedure Json.105 (Json.329, Json.330): + let Json.111 : Str = StructAtIndex 0 Json.330; + inc Json.111; + let Json.112 : {Str} = StructAtIndex 1 Json.330; + inc Json.112; + dec Json.330; + let Json.109 : List U8 = StructAtIndex 0 Json.329; + inc Json.109; + let Json.110 : U64 = StructAtIndex 1 Json.329; + dec Json.329; + let Json.357 : I32 = 34i64; + let Json.356 : U8 = CallByName Num.123 Json.357; + let Json.354 : List U8 = CallByName List.4 Json.109 Json.356; + let Json.355 : List U8 = CallByName Str.12 Json.111; + let Json.351 : List U8 = CallByName List.8 Json.354 Json.355; + let Json.353 : I32 = 34i64; + let Json.352 : U8 = CallByName Num.123 Json.353; + let Json.348 : List U8 = CallByName List.4 Json.351 Json.352; + let Json.350 : I32 = 58i64; + let Json.349 : U8 = CallByName Num.123 Json.350; + let Json.346 : List U8 = CallByName List.4 Json.348 Json.349; + let Json.347 : {} = Struct {}; + let Json.113 : List U8 = CallByName Encode.23 Json.346 Json.112 Json.347; + joinpoint Json.341 Json.114: + let Json.339 : U64 = 1i64; + let Json.338 : U64 = CallByName Num.20 Json.110 Json.339; + let Json.337 : {List U8, U64} = Struct {Json.114, Json.338}; + ret Json.337; in - let Json.133 : U64 = 1i64; - let Json.130 : Int1 = CallByName Num.24 Json.88 Json.133; - if Json.130 then - let Json.132 : I32 = 44i64; - let Json.131 : U8 = CallByName Num.123 Json.132; - let Json.128 : List U8 = CallByName List.4 Json.91 Json.131; - jump Json.129 Json.128; + let Json.345 : U64 = 1i64; + let Json.342 : Int1 = CallByName Num.24 Json.110 Json.345; + if Json.342 then + let Json.344 : I32 = 44i64; + let Json.343 : U8 = CallByName Num.123 Json.344; + let Json.340 : List U8 = CallByName List.4 Json.113 Json.343; + jump Json.341 Json.340; else - jump Json.129 Json.91; + jump Json.341 Json.113; + +procedure Json.18 (Json.86): + let Json.326 : {Str} = Struct {Json.86}; + let Json.325 : {Str} = CallByName Encode.22 Json.326; + ret Json.325; + +procedure Json.20 (Json.102): + let Json.320 : {List {Str, {Str}}} = Struct {Json.102}; + let Json.319 : {List {Str, {Str}}} = CallByName Encode.22 Json.320; + ret Json.319; + +procedure Json.87 (Json.88, Json.324, #Attr.12): + let Json.86 : Str = StructAtIndex 0 #Attr.12; + inc Json.86; + dec #Attr.12; + let Json.369 : I32 = 34i64; + let Json.368 : U8 = CallByName Num.123 Json.369; + let Json.366 : List U8 = CallByName List.4 Json.88 Json.368; + let Json.367 : List U8 = CallByName Str.12 Json.86; + let Json.363 : List U8 = CallByName List.8 Json.366 Json.367; + let Json.365 : I32 = 34i64; + let Json.364 : U8 = CallByName Num.123 Json.365; + let Json.362 : List U8 = CallByName List.4 Json.363 Json.364; + ret Json.362; procedure List.133 (List.134, List.135, #Attr.12): let List.132 : {} = StructAtIndex 0 #Attr.12; - let List.441 : {List U8, U64} = CallByName Json.83 List.134 List.135; + let List.441 : {List U8, U64} = CallByName Json.105 List.134 List.135; let List.440 : [C [], C {List U8, U64}] = TagId(1) List.441; ret List.440; diff --git a/crates/compiler/test_mono/generated/encode_derived_string.txt b/crates/compiler/test_mono/generated/encode_derived_string.txt index 0348ec3e3f..ee3bd4f34a 100644 --- a/crates/compiler/test_mono/generated/encode_derived_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_string.txt @@ -2,37 +2,37 @@ procedure Encode.22 (Encode.93): ret Encode.93; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.106 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102; + let Encode.106 : List U8 = CallByName Json.87 Encode.94 Encode.96 Encode.102; ret Encode.106; procedure Encode.25 (Encode.100, Encode.101): let Encode.104 : List U8 = Array []; - let Encode.105 : {Str} = CallByName Json.17 Encode.100; + let Encode.105 : {Str} = CallByName Json.18 Encode.100; let Encode.103 : List U8 = CallByName Encode.23 Encode.104 Encode.105 Encode.101; ret Encode.103; procedure Json.1 (): - let Json.106 : {} = Struct {}; - ret Json.106; + let Json.318 : {} = Struct {}; + ret Json.318; -procedure Json.17 (Json.64): - let Json.108 : {Str} = Struct {Json.64}; - let Json.107 : {Str} = CallByName Encode.22 Json.108; - ret Json.107; +procedure Json.18 (Json.86): + let Json.320 : {Str} = Struct {Json.86}; + let Json.319 : {Str} = CallByName Encode.22 Json.320; + ret Json.319; -procedure Json.65 (Json.66, Json.109, #Attr.12): - let Json.64 : Str = StructAtIndex 0 #Attr.12; - inc Json.64; +procedure Json.87 (Json.88, Json.321, #Attr.12): + let Json.86 : Str = StructAtIndex 0 #Attr.12; + inc Json.86; dec #Attr.12; - let Json.118 : I32 = 34i64; - let Json.117 : U8 = CallByName Num.123 Json.118; - let Json.115 : List U8 = CallByName List.4 Json.66 Json.117; - let Json.116 : List U8 = CallByName Str.12 Json.64; - let Json.112 : List U8 = CallByName List.8 Json.115 Json.116; - let Json.114 : I32 = 34i64; - let Json.113 : U8 = CallByName Num.123 Json.114; - let Json.111 : List U8 = CallByName List.4 Json.112 Json.113; - ret Json.111; + let Json.330 : I32 = 34i64; + let Json.329 : U8 = CallByName Num.123 Json.330; + let Json.327 : List U8 = CallByName List.4 Json.88 Json.329; + let Json.328 : List U8 = CallByName Str.12 Json.86; + let Json.324 : List U8 = CallByName List.8 Json.327 Json.328; + let Json.326 : I32 = 34i64; + let Json.325 : U8 = CallByName Num.123 Json.326; + let Json.323 : List U8 = CallByName List.4 Json.324 Json.325; + ret Json.323; procedure List.4 (List.101, List.102): let List.392 : U64 = 1i64; diff --git a/crates/compiler/test_mono/generated/encode_derived_tag_one_field_string.txt b/crates/compiler/test_mono/generated/encode_derived_tag_one_field_string.txt index 4aaea1d783..781e31459e 100644 --- a/crates/compiler/test_mono/generated/encode_derived_tag_one_field_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_tag_one_field_string.txt @@ -12,9 +12,9 @@ procedure #Derived.3 (#Derived.4, #Derived.5, #Attr.12): ret #Derived_gen.3; in let #Derived_gen.7 : Str = "A"; - let #Derived_gen.9 : {Str} = CallByName Json.17 #Derived.1; + let #Derived_gen.9 : {Str} = CallByName Json.18 #Derived.1; let #Derived_gen.8 : List {Str} = Array [#Derived_gen.9]; - let #Derived_gen.6 : {Str, List {Str}} = CallByName Json.20 #Derived_gen.7 #Derived_gen.8; + let #Derived_gen.6 : {Str, List {Str}} = CallByName Json.21 #Derived_gen.7 #Derived_gen.8; jump #Derived_gen.5 #Derived_gen.6; procedure Encode.22 (Encode.93): @@ -31,11 +31,11 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96): ret Encode.106; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.113 : List U8 = CallByName Json.95 Encode.94 Encode.96 Encode.102; + let Encode.113 : List U8 = CallByName Json.117 Encode.94 Encode.96 Encode.102; ret Encode.113; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.116 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102; + let Encode.116 : List U8 = CallByName Json.87 Encode.94 Encode.96 Encode.102; ret Encode.116; procedure Encode.25 (Encode.100, Encode.101): @@ -45,98 +45,98 @@ procedure Encode.25 (Encode.100, Encode.101): ret Encode.103; procedure Json.1 (): - let Json.106 : {} = Struct {}; - ret Json.106; + let Json.318 : {} = Struct {}; + ret Json.318; -procedure Json.17 (Json.64): - let Json.111 : {Str} = Struct {Json.64}; - let Json.110 : {Str} = CallByName Encode.22 Json.111; - ret Json.110; - -procedure Json.20 (Json.93, Json.94): - let Json.108 : {Str, List {Str}} = Struct {Json.93, Json.94}; - let Json.107 : {Str, List {Str}} = CallByName Encode.22 Json.108; - ret Json.107; - -procedure Json.65 (Json.66, Json.112, #Attr.12): - let Json.64 : Str = StructAtIndex 0 #Attr.12; - inc Json.64; +procedure Json.117 (Json.118, Json.321, #Attr.12): + let Json.116 : List {Str} = StructAtIndex 1 #Attr.12; + inc Json.116; + let Json.115 : Str = StructAtIndex 0 #Attr.12; + inc Json.115; dec #Attr.12; - let Json.159 : I32 = 34i64; - let Json.158 : U8 = CallByName Num.123 Json.159; - let Json.156 : List U8 = CallByName List.4 Json.66 Json.158; - let Json.157 : List U8 = CallByName Str.12 Json.64; - let Json.153 : List U8 = CallByName List.8 Json.156 Json.157; - let Json.155 : I32 = 34i64; - let Json.154 : U8 = CallByName Num.123 Json.155; - let Json.152 : List U8 = CallByName List.4 Json.153 Json.154; - ret Json.152; + let Json.362 : I32 = 123i64; + let Json.361 : U8 = CallByName Num.123 Json.362; + let Json.358 : List U8 = CallByName List.4 Json.118 Json.361; + let Json.360 : I32 = 34i64; + let Json.359 : U8 = CallByName Num.123 Json.360; + let Json.356 : List U8 = CallByName List.4 Json.358 Json.359; + let Json.357 : List U8 = CallByName Str.12 Json.115; + let Json.353 : List U8 = CallByName List.8 Json.356 Json.357; + let Json.355 : I32 = 34i64; + let Json.354 : U8 = CallByName Num.123 Json.355; + let Json.350 : List U8 = CallByName List.4 Json.353 Json.354; + let Json.352 : I32 = 58i64; + let Json.351 : U8 = CallByName Num.123 Json.352; + let Json.347 : List U8 = CallByName List.4 Json.350 Json.351; + let Json.349 : I32 = 91i64; + let Json.348 : U8 = CallByName Num.123 Json.349; + let Json.120 : List U8 = CallByName List.4 Json.347 Json.348; + let Json.346 : U64 = CallByName List.6 Json.116; + let Json.334 : {List U8, U64} = Struct {Json.120, Json.346}; + let Json.335 : {} = Struct {}; + let Json.333 : {List U8, U64} = CallByName List.18 Json.116 Json.334 Json.335; + dec Json.116; + let Json.122 : List U8 = StructAtIndex 0 Json.333; + inc Json.122; + dec Json.333; + let Json.332 : I32 = 93i64; + let Json.331 : U8 = CallByName Num.123 Json.332; + let Json.328 : List U8 = CallByName List.4 Json.122 Json.331; + let Json.330 : I32 = 125i64; + let Json.329 : U8 = CallByName Num.123 Json.330; + let Json.327 : List U8 = CallByName List.4 Json.328 Json.329; + ret Json.327; -procedure Json.95 (Json.96, Json.109, #Attr.12): - let Json.94 : List {Str} = StructAtIndex 1 #Attr.12; - inc Json.94; - let Json.93 : Str = StructAtIndex 0 #Attr.12; - inc Json.93; - dec #Attr.12; - let Json.150 : I32 = 123i64; - let Json.149 : U8 = CallByName Num.123 Json.150; - let Json.146 : List U8 = CallByName List.4 Json.96 Json.149; - let Json.148 : I32 = 34i64; - let Json.147 : U8 = CallByName Num.123 Json.148; - let Json.144 : List U8 = CallByName List.4 Json.146 Json.147; - let Json.145 : List U8 = CallByName Str.12 Json.93; - let Json.141 : List U8 = CallByName List.8 Json.144 Json.145; - let Json.143 : I32 = 34i64; - let Json.142 : U8 = CallByName Num.123 Json.143; - let Json.138 : List U8 = CallByName List.4 Json.141 Json.142; - let Json.140 : I32 = 58i64; - let Json.139 : U8 = CallByName Num.123 Json.140; - let Json.135 : List U8 = CallByName List.4 Json.138 Json.139; - let Json.137 : I32 = 91i64; - let Json.136 : U8 = CallByName Num.123 Json.137; - let Json.98 : List U8 = CallByName List.4 Json.135 Json.136; - let Json.134 : U64 = CallByName List.6 Json.94; - let Json.122 : {List U8, U64} = Struct {Json.98, Json.134}; - let Json.123 : {} = Struct {}; - let Json.121 : {List U8, U64} = CallByName List.18 Json.94 Json.122 Json.123; - dec Json.94; - let Json.100 : List U8 = StructAtIndex 0 Json.121; - inc Json.100; - dec Json.121; - let Json.120 : I32 = 93i64; - let Json.119 : U8 = CallByName Num.123 Json.120; - let Json.116 : List U8 = CallByName List.4 Json.100 Json.119; - let Json.118 : I32 = 125i64; - let Json.117 : U8 = CallByName Num.123 Json.118; - let Json.115 : List U8 = CallByName List.4 Json.116 Json.117; - ret Json.115; - -procedure Json.97 (Json.114, Json.103): - let Json.101 : List U8 = StructAtIndex 0 Json.114; - inc Json.101; - let Json.102 : U64 = StructAtIndex 1 Json.114; - dec Json.114; - let Json.133 : {} = Struct {}; - let Json.104 : List U8 = CallByName Encode.23 Json.101 Json.103 Json.133; - joinpoint Json.128 Json.105: - let Json.126 : U64 = 1i64; - let Json.125 : U64 = CallByName Num.20 Json.102 Json.126; - let Json.124 : {List U8, U64} = Struct {Json.105, Json.125}; - ret Json.124; +procedure Json.119 (Json.326, Json.125): + let Json.123 : List U8 = StructAtIndex 0 Json.326; + inc Json.123; + let Json.124 : U64 = StructAtIndex 1 Json.326; + dec Json.326; + let Json.345 : {} = Struct {}; + let Json.126 : List U8 = CallByName Encode.23 Json.123 Json.125 Json.345; + joinpoint Json.340 Json.127: + let Json.338 : U64 = 1i64; + let Json.337 : U64 = CallByName Num.20 Json.124 Json.338; + let Json.336 : {List U8, U64} = Struct {Json.127, Json.337}; + ret Json.336; in - let Json.132 : U64 = 1i64; - let Json.129 : Int1 = CallByName Num.24 Json.102 Json.132; - if Json.129 then - let Json.131 : I32 = 44i64; - let Json.130 : U8 = CallByName Num.123 Json.131; - let Json.127 : List U8 = CallByName List.4 Json.104 Json.130; - jump Json.128 Json.127; + let Json.344 : U64 = 1i64; + let Json.341 : Int1 = CallByName Num.24 Json.124 Json.344; + if Json.341 then + let Json.343 : I32 = 44i64; + let Json.342 : U8 = CallByName Num.123 Json.343; + let Json.339 : List U8 = CallByName List.4 Json.126 Json.342; + jump Json.340 Json.339; else - jump Json.128 Json.104; + jump Json.340 Json.126; + +procedure Json.18 (Json.86): + let Json.323 : {Str} = Struct {Json.86}; + let Json.322 : {Str} = CallByName Encode.22 Json.323; + ret Json.322; + +procedure Json.21 (Json.115, Json.116): + let Json.320 : {Str, List {Str}} = Struct {Json.115, Json.116}; + let Json.319 : {Str, List {Str}} = CallByName Encode.22 Json.320; + ret Json.319; + +procedure Json.87 (Json.88, Json.324, #Attr.12): + let Json.86 : Str = StructAtIndex 0 #Attr.12; + inc Json.86; + dec #Attr.12; + let Json.371 : I32 = 34i64; + let Json.370 : U8 = CallByName Num.123 Json.371; + let Json.368 : List U8 = CallByName List.4 Json.88 Json.370; + let Json.369 : List U8 = CallByName Str.12 Json.86; + let Json.365 : List U8 = CallByName List.8 Json.368 Json.369; + let Json.367 : I32 = 34i64; + let Json.366 : U8 = CallByName Num.123 Json.367; + let Json.364 : List U8 = CallByName List.4 Json.365 Json.366; + ret Json.364; procedure List.133 (List.134, List.135, #Attr.12): let List.132 : {} = StructAtIndex 0 #Attr.12; - let List.447 : {List U8, U64} = CallByName Json.97 List.134 List.135; + let List.447 : {List U8, U64} = CallByName Json.119 List.134 List.135; let List.446 : [C [], C {List U8, U64}] = TagId(1) List.447; ret List.446; diff --git a/crates/compiler/test_mono/generated/encode_derived_tag_two_payloads_string.txt b/crates/compiler/test_mono/generated/encode_derived_tag_two_payloads_string.txt index 1329435b75..2379877e3b 100644 --- a/crates/compiler/test_mono/generated/encode_derived_tag_two_payloads_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_tag_two_payloads_string.txt @@ -17,10 +17,10 @@ procedure #Derived.4 (#Derived.5, #Derived.6, #Attr.12): inc #Derived.3; dec #Derived.1; let #Derived_gen.7 : Str = "A"; - let #Derived_gen.9 : {Str} = CallByName Json.17 #Derived.2; - let #Derived_gen.10 : {Str} = CallByName Json.17 #Derived.3; + let #Derived_gen.9 : {Str} = CallByName Json.18 #Derived.2; + let #Derived_gen.10 : {Str} = CallByName Json.18 #Derived.3; let #Derived_gen.8 : List {Str} = Array [#Derived_gen.9, #Derived_gen.10]; - let #Derived_gen.6 : {Str, List {Str}} = CallByName Json.20 #Derived_gen.7 #Derived_gen.8; + let #Derived_gen.6 : {Str, List {Str}} = CallByName Json.21 #Derived_gen.7 #Derived_gen.8; jump #Derived_gen.5 #Derived_gen.6; procedure Encode.22 (Encode.93): @@ -37,11 +37,11 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96): ret Encode.106; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.113 : List U8 = CallByName Json.95 Encode.94 Encode.96 Encode.102; + let Encode.113 : List U8 = CallByName Json.117 Encode.94 Encode.96 Encode.102; ret Encode.113; procedure Encode.23 (Encode.94, Encode.102, Encode.96): - let Encode.117 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102; + let Encode.117 : List U8 = CallByName Json.87 Encode.94 Encode.96 Encode.102; ret Encode.117; procedure Encode.25 (Encode.100, Encode.101): @@ -51,98 +51,98 @@ procedure Encode.25 (Encode.100, Encode.101): ret Encode.103; procedure Json.1 (): - let Json.106 : {} = Struct {}; - ret Json.106; + let Json.318 : {} = Struct {}; + ret Json.318; -procedure Json.17 (Json.64): - let Json.114 : {Str} = Struct {Json.64}; - let Json.113 : {Str} = CallByName Encode.22 Json.114; - ret Json.113; - -procedure Json.20 (Json.93, Json.94): - let Json.108 : {Str, List {Str}} = Struct {Json.93, Json.94}; - let Json.107 : {Str, List {Str}} = CallByName Encode.22 Json.108; - ret Json.107; - -procedure Json.65 (Json.66, Json.112, #Attr.12): - let Json.64 : Str = StructAtIndex 0 #Attr.12; - inc Json.64; +procedure Json.117 (Json.118, Json.321, #Attr.12): + let Json.116 : List {Str} = StructAtIndex 1 #Attr.12; + inc Json.116; + let Json.115 : Str = StructAtIndex 0 #Attr.12; + inc Json.115; dec #Attr.12; - let Json.162 : I32 = 34i64; - let Json.161 : U8 = CallByName Num.123 Json.162; - let Json.159 : List U8 = CallByName List.4 Json.66 Json.161; - let Json.160 : List U8 = CallByName Str.12 Json.64; - let Json.156 : List U8 = CallByName List.8 Json.159 Json.160; - let Json.158 : I32 = 34i64; - let Json.157 : U8 = CallByName Num.123 Json.158; - let Json.155 : List U8 = CallByName List.4 Json.156 Json.157; - ret Json.155; + let Json.365 : I32 = 123i64; + let Json.364 : U8 = CallByName Num.123 Json.365; + let Json.361 : List U8 = CallByName List.4 Json.118 Json.364; + let Json.363 : I32 = 34i64; + let Json.362 : U8 = CallByName Num.123 Json.363; + let Json.359 : List U8 = CallByName List.4 Json.361 Json.362; + let Json.360 : List U8 = CallByName Str.12 Json.115; + let Json.356 : List U8 = CallByName List.8 Json.359 Json.360; + let Json.358 : I32 = 34i64; + let Json.357 : U8 = CallByName Num.123 Json.358; + let Json.353 : List U8 = CallByName List.4 Json.356 Json.357; + let Json.355 : I32 = 58i64; + let Json.354 : U8 = CallByName Num.123 Json.355; + let Json.350 : List U8 = CallByName List.4 Json.353 Json.354; + let Json.352 : I32 = 91i64; + let Json.351 : U8 = CallByName Num.123 Json.352; + let Json.120 : List U8 = CallByName List.4 Json.350 Json.351; + let Json.349 : U64 = CallByName List.6 Json.116; + let Json.337 : {List U8, U64} = Struct {Json.120, Json.349}; + let Json.338 : {} = Struct {}; + let Json.336 : {List U8, U64} = CallByName List.18 Json.116 Json.337 Json.338; + dec Json.116; + let Json.122 : List U8 = StructAtIndex 0 Json.336; + inc Json.122; + dec Json.336; + let Json.335 : I32 = 93i64; + let Json.334 : U8 = CallByName Num.123 Json.335; + let Json.331 : List U8 = CallByName List.4 Json.122 Json.334; + let Json.333 : I32 = 125i64; + let Json.332 : U8 = CallByName Num.123 Json.333; + let Json.330 : List U8 = CallByName List.4 Json.331 Json.332; + ret Json.330; -procedure Json.95 (Json.96, Json.109, #Attr.12): - let Json.94 : List {Str} = StructAtIndex 1 #Attr.12; - inc Json.94; - let Json.93 : Str = StructAtIndex 0 #Attr.12; - inc Json.93; - dec #Attr.12; - let Json.153 : I32 = 123i64; - let Json.152 : U8 = CallByName Num.123 Json.153; - let Json.149 : List U8 = CallByName List.4 Json.96 Json.152; - let Json.151 : I32 = 34i64; - let Json.150 : U8 = CallByName Num.123 Json.151; - let Json.147 : List U8 = CallByName List.4 Json.149 Json.150; - let Json.148 : List U8 = CallByName Str.12 Json.93; - let Json.144 : List U8 = CallByName List.8 Json.147 Json.148; - let Json.146 : I32 = 34i64; - let Json.145 : U8 = CallByName Num.123 Json.146; - let Json.141 : List U8 = CallByName List.4 Json.144 Json.145; - let Json.143 : I32 = 58i64; - let Json.142 : U8 = CallByName Num.123 Json.143; - let Json.138 : List U8 = CallByName List.4 Json.141 Json.142; - let Json.140 : I32 = 91i64; - let Json.139 : U8 = CallByName Num.123 Json.140; - let Json.98 : List U8 = CallByName List.4 Json.138 Json.139; - let Json.137 : U64 = CallByName List.6 Json.94; - let Json.125 : {List U8, U64} = Struct {Json.98, Json.137}; - let Json.126 : {} = Struct {}; - let Json.124 : {List U8, U64} = CallByName List.18 Json.94 Json.125 Json.126; - dec Json.94; - let Json.100 : List U8 = StructAtIndex 0 Json.124; - inc Json.100; - dec Json.124; - let Json.123 : I32 = 93i64; - let Json.122 : U8 = CallByName Num.123 Json.123; - let Json.119 : List U8 = CallByName List.4 Json.100 Json.122; - let Json.121 : I32 = 125i64; - let Json.120 : U8 = CallByName Num.123 Json.121; - let Json.118 : List U8 = CallByName List.4 Json.119 Json.120; - ret Json.118; - -procedure Json.97 (Json.117, Json.103): - let Json.101 : List U8 = StructAtIndex 0 Json.117; - inc Json.101; - let Json.102 : U64 = StructAtIndex 1 Json.117; - dec Json.117; - let Json.136 : {} = Struct {}; - let Json.104 : List U8 = CallByName Encode.23 Json.101 Json.103 Json.136; - joinpoint Json.131 Json.105: - let Json.129 : U64 = 1i64; - let Json.128 : U64 = CallByName Num.20 Json.102 Json.129; - let Json.127 : {List U8, U64} = Struct {Json.105, Json.128}; - ret Json.127; +procedure Json.119 (Json.329, Json.125): + let Json.123 : List U8 = StructAtIndex 0 Json.329; + inc Json.123; + let Json.124 : U64 = StructAtIndex 1 Json.329; + dec Json.329; + let Json.348 : {} = Struct {}; + let Json.126 : List U8 = CallByName Encode.23 Json.123 Json.125 Json.348; + joinpoint Json.343 Json.127: + let Json.341 : U64 = 1i64; + let Json.340 : U64 = CallByName Num.20 Json.124 Json.341; + let Json.339 : {List U8, U64} = Struct {Json.127, Json.340}; + ret Json.339; in - let Json.135 : U64 = 1i64; - let Json.132 : Int1 = CallByName Num.24 Json.102 Json.135; - if Json.132 then - let Json.134 : I32 = 44i64; - let Json.133 : U8 = CallByName Num.123 Json.134; - let Json.130 : List U8 = CallByName List.4 Json.104 Json.133; - jump Json.131 Json.130; + let Json.347 : U64 = 1i64; + let Json.344 : Int1 = CallByName Num.24 Json.124 Json.347; + if Json.344 then + let Json.346 : I32 = 44i64; + let Json.345 : U8 = CallByName Num.123 Json.346; + let Json.342 : List U8 = CallByName List.4 Json.126 Json.345; + jump Json.343 Json.342; else - jump Json.131 Json.104; + jump Json.343 Json.126; + +procedure Json.18 (Json.86): + let Json.326 : {Str} = Struct {Json.86}; + let Json.325 : {Str} = CallByName Encode.22 Json.326; + ret Json.325; + +procedure Json.21 (Json.115, Json.116): + let Json.320 : {Str, List {Str}} = Struct {Json.115, Json.116}; + let Json.319 : {Str, List {Str}} = CallByName Encode.22 Json.320; + ret Json.319; + +procedure Json.87 (Json.88, Json.324, #Attr.12): + let Json.86 : Str = StructAtIndex 0 #Attr.12; + inc Json.86; + dec #Attr.12; + let Json.374 : I32 = 34i64; + let Json.373 : U8 = CallByName Num.123 Json.374; + let Json.371 : List U8 = CallByName List.4 Json.88 Json.373; + let Json.372 : List U8 = CallByName Str.12 Json.86; + let Json.368 : List U8 = CallByName List.8 Json.371 Json.372; + let Json.370 : I32 = 34i64; + let Json.369 : U8 = CallByName Num.123 Json.370; + let Json.367 : List U8 = CallByName List.4 Json.368 Json.369; + ret Json.367; procedure List.133 (List.134, List.135, #Attr.12): let List.132 : {} = StructAtIndex 0 #Attr.12; - let List.447 : {List U8, U64} = CallByName Json.97 List.134 List.135; + let List.447 : {List U8, U64} = CallByName Json.119 List.134 List.135; let List.446 : [C [], C {List U8, U64}] = TagId(1) List.447; ret List.446; diff --git a/crates/glue/Cargo.toml b/crates/glue/Cargo.toml index 83edbdf567..7f544dd57d 100644 --- a/crates/glue/Cargo.toml +++ b/crates/glue/Cargo.toml @@ -6,7 +6,7 @@ license = "UPL-1.0" edition = "2021" [dependencies] -roc_std = { path = "../roc_std" } +roc_std = { path = "../roc_std"} roc_can = { path = "../compiler/can" } roc_mono = { path = "../compiler/mono" } roc_load = { path = "../compiler/load" } diff --git a/crates/repl_cli/Cargo.toml b/crates/repl_cli/Cargo.toml index a3fb73fc02..5e4c0310d8 100644 --- a/crates/repl_cli/Cargo.toml +++ b/crates/repl_cli/Cargo.toml @@ -32,7 +32,7 @@ roc_mono = {path = "../compiler/mono"} roc_parse = {path = "../compiler/parse"} roc_repl_eval = {path = "../repl_eval"} roc_reporting = {path = "../reporting"} -roc_std = {path = "../roc_std", default-features = false} +roc_std = {path = "../roc_std"} roc_target = {path = "../compiler/roc_target"} roc_types = {path = "../compiler/types"} roc_region = { path = "../compiler/region" } diff --git a/crates/repl_eval/Cargo.toml b/crates/repl_eval/Cargo.toml index 3f21f92a0f..1d8a38b5d6 100644 --- a/crates/repl_eval/Cargo.toml +++ b/crates/repl_eval/Cargo.toml @@ -20,6 +20,6 @@ roc_mono = {path = "../compiler/mono"} roc_parse = {path = "../compiler/parse"} roc_region = {path = "../compiler/region"} roc_reporting = {path = "../reporting"} -roc_std = {path = "../roc_std", default-features = false} +roc_std = {path = "../roc_std"} roc_target = {path = "../compiler/roc_target"} roc_types = {path = "../compiler/types"} diff --git a/crates/repl_expect/Cargo.toml b/crates/repl_expect/Cargo.toml index 922f2a30e4..7113bfa135 100644 --- a/crates/repl_expect/Cargo.toml +++ b/crates/repl_expect/Cargo.toml @@ -17,7 +17,7 @@ roc_parse = {path = "../compiler/parse"} roc_module = {path = "../compiler/module"} roc_repl_eval = {path = "../repl_eval"} roc_reporting = {path = "../reporting"} -roc_std = {path = "../roc_std", default-features = false} +roc_std = {path = "../roc_std"} roc_target = {path = "../compiler/roc_target"} roc_types = {path = "../compiler/types"} roc_gen_llvm = {path = "../compiler/gen_llvm"} diff --git a/crates/repl_expect/src/run.rs b/crates/repl_expect/src/run.rs index fef58f5117..86af7f5757 100644 --- a/crates/repl_expect/src/run.rs +++ b/crates/repl_expect/src/run.rs @@ -341,10 +341,11 @@ pub fn expect_mono_module_to_dylib<'a>( // Verify the module if let Err(errors) = env.module.verify() { - env.module.print_to_file("/tmp/test.ll").unwrap(); + let path = std::env::temp_dir().join("test.ll"); + env.module.print_to_file(&path).unwrap(); panic!( - "Errors defining module:\n{}\n\nUncomment things nearby to see more details. IR written to `/tmp/test.ll`", - errors.to_string() + "Errors defining module:\n{}\n\nUncomment things nearby to see more details. IR written to `{:?}`", + errors.to_string(), path, ); } diff --git a/crates/repl_test/src/wasm.rs b/crates/repl_test/src/wasm.rs index b7d862afd9..57d722bcd0 100644 --- a/crates/repl_test/src/wasm.rs +++ b/crates/repl_test/src/wasm.rs @@ -96,9 +96,9 @@ fn wasmer_create_app(app_bytes_ptr: u32, app_bytes_len: u32) -> u32 { Err(e) => { println!("Failed to create Wasm module\n{:?}", e); if false { - let path = "/tmp/roc_repl_test_invalid_app.wasm"; - fs::write(path, app_module_bytes).unwrap(); - println!("Wrote invalid wasm to {}", path); + let path = std::env::temp_dir().join("roc_repl_test_invalid_app.wasm"); + fs::write(&path, app_module_bytes).unwrap(); + println!("Wrote invalid wasm to {:?}", path); } return false.into(); } diff --git a/crates/roc_std/Cargo.toml b/crates/roc_std/Cargo.toml index 37a35c6672..b8d8ec4538 100644 --- a/crates/roc_std/Cargo.toml +++ b/crates/roc_std/Cargo.toml @@ -20,6 +20,4 @@ quickcheck_macros = "1.0.0" libc = "0.2.106" [features] -default = ["platform"] -platform = [] -no_std = [] +std = [] diff --git a/crates/roc_std/src/lib.rs b/crates/roc_std/src/lib.rs index b385c575d9..7a0a10d988 100644 --- a/crates/roc_std/src/lib.rs +++ b/crates/roc_std/src/lib.rs @@ -1,6 +1,7 @@ +#![no_std] #![crate_type = "lib"] -#![cfg_attr(feature = "no_std", no_std)] +use arrayvec::ArrayString; use core::cmp::Ordering; use core::ffi::c_void; use core::fmt::{self, Debug}; @@ -9,8 +10,6 @@ use core::mem::{ManuallyDrop, MaybeUninit}; use core::ops::Drop; use core::str; -use arrayvec::ArrayString; - mod roc_box; mod roc_list; mod roc_str; @@ -22,7 +21,6 @@ pub use roc_str::{InteriorNulError, RocStr}; pub use storage::Storage; // A list of C functions that are being imported -#[cfg(feature = "platform")] extern "C" { pub fn roc_alloc(size: usize, alignment: u32) -> *mut c_void; pub fn roc_realloc( @@ -37,57 +35,6 @@ extern "C" { pub fn roc_memset(dst: *mut c_void, c: i32, n: usize) -> *mut c_void; } -/// # Safety -/// This is only marked unsafe to typecheck without warnings in the rest of the code here. -#[cfg(not(feature = "platform"))] -#[no_mangle] -pub unsafe extern "C" fn roc_alloc(_size: usize, _alignment: u32) -> *mut c_void { - unimplemented!("It is not valid to call roc alloc from within the compiler. Please use the \"platform\" feature if this is a platform.") -} - -/// # Safety -/// This is only marked unsafe to typecheck without warnings in the rest of the code here. -#[cfg(not(feature = "platform"))] -#[no_mangle] -pub unsafe extern "C" fn roc_realloc( - _ptr: *mut c_void, - _new_size: usize, - _old_size: usize, - _alignment: u32, -) -> *mut c_void { - unimplemented!("It is not valid to call roc realloc from within the compiler. Please use the \"platform\" feature if this is a platform.") -} - -/// # Safety -/// This is only marked unsafe to typecheck without warnings in the rest of the code here. -#[cfg(not(feature = "platform"))] -#[no_mangle] -pub unsafe extern "C" fn roc_dealloc(_ptr: *mut c_void, _alignment: u32) { - unimplemented!("It is not valid to call roc dealloc from within the compiler. Please use the \"platform\" feature if this is a platform.") -} - -#[cfg(not(feature = "platform"))] -#[no_mangle] -pub unsafe extern "C" fn roc_panic(c_ptr: *mut c_void, tag_id: u32) { - unimplemented!("It is not valid to call roc panic from within the compiler. Please use the \"platform\" feature if this is a platform.") -} - -/// # Safety -/// This is only marked unsafe to typecheck without warnings in the rest of the code here. -#[cfg(not(feature = "platform"))] -#[no_mangle] -pub fn roc_memcpy(_dst: *mut c_void, _src: *mut c_void, _n: usize) -> *mut c_void { - unimplemented!("It is not valid to call roc memcpy from within the compiler. Please use the \"platform\" feature if this is a platform.") -} - -/// # Safety -/// This is only marked unsafe to typecheck without warnings in the rest of the code here. -#[cfg(not(feature = "platform"))] -#[no_mangle] -pub fn roc_memset(_dst: *mut c_void, _c: i32, _n: usize) -> *mut c_void { - unimplemented!("It is not valid to call roc memset from within the compiler. Please use the \"platform\" feature if this is a platform.") -} - pub fn roc_alloc_refcounted() -> *mut T { let size = core::mem::size_of::(); let align = core::mem::align_of::(); @@ -373,7 +320,7 @@ impl RocDec { } fn to_str_helper(self, string: &mut ArrayString<{ Self::MAX_STR_LENGTH }>) -> &str { - use std::fmt::Write; + use core::fmt::Write; if self.as_i128() == 0 { return "0"; diff --git a/crates/roc_std/src/roc_list.rs b/crates/roc_std/src/roc_list.rs index 319de04c7c..e0ae78ed0f 100644 --- a/crates/roc_std/src/roc_list.rs +++ b/crates/roc_std/src/roc_list.rs @@ -7,11 +7,11 @@ use core::{ fmt::Debug, hash::Hash, intrinsics::copy_nonoverlapping, + iter::FromIterator, mem::{self, ManuallyDrop}, ops::Deref, ptr::{self, NonNull}, }; -use std::iter::FromIterator; use crate::{roc_alloc, roc_dealloc, roc_realloc, storage::Storage}; @@ -474,7 +474,7 @@ where impl<'a, T> IntoIterator for &'a RocList { type Item = &'a T; - type IntoIter = std::slice::Iter<'a, T>; + type IntoIter = core::slice::Iter<'a, T>; fn into_iter(self) -> Self::IntoIter { self.as_slice().iter() @@ -529,7 +529,7 @@ impl Drop for IntoIter { } impl Hash for RocList { - fn hash(&self, state: &mut H) { + fn hash(&self, state: &mut H) { // This is the same as Rust's Vec implementation, which // just delegates to the slice implementation. It's a bit surprising // that Hash::hash_slice doesn't automatically incorporate the length, @@ -551,7 +551,7 @@ impl FromIterator for RocList { { let iter = into.into_iter(); - if std::mem::size_of::() == 0 { + if core::mem::size_of::() == 0 { let count = iter.count(); return Self { elements: Some(Self::elems_with_capacity(count)), diff --git a/crates/roc_std/src/roc_str.rs b/crates/roc_std/src/roc_str.rs index 863d33f5b0..71ace3bacd 100644 --- a/crates/roc_std/src/roc_str.rs +++ b/crates/roc_std/src/roc_str.rs @@ -10,8 +10,8 @@ use core::{ ptr, }; -#[cfg(not(feature = "no_std"))] -use std::ffi::{CStr, CString}; +#[cfg(feature = "std")] +use core::ffi::{CStr, CString}; use crate::RocList; @@ -527,7 +527,7 @@ impl Deref for RocStr { } /// This can fail because a CStr may contain invalid UTF-8 characters -#[cfg(not(feature = "no_std"))] +#[cfg(feature = "std")] impl TryFrom<&CStr> for RocStr { type Error = core::str::Utf8Error; @@ -537,7 +537,7 @@ impl TryFrom<&CStr> for RocStr { } /// This can fail because a CString may contain invalid UTF-8 characters -#[cfg(not(feature = "no_std"))] +#[cfg(feature = "std")] impl TryFrom for RocStr { type Error = core::str::Utf8Error; diff --git a/crates/roc_std/src/storage.rs b/crates/roc_std/src/storage.rs index c261a50b62..6bbb6d18de 100644 --- a/crates/roc_std/src/storage.rs +++ b/crates/roc_std/src/storage.rs @@ -8,7 +8,7 @@ use core::num::NonZeroIsize; const REFCOUNT_1: NonZeroIsize = unsafe { NonZeroIsize::new_unchecked(isize::MIN) }; const _ASSERT_STORAGE_SIZE: () = - assert!(std::mem::size_of::() == std::mem::size_of::()); + assert!(core::mem::size_of::() == core::mem::size_of::()); #[derive(Clone, Copy, Debug)] pub enum Storage { diff --git a/examples/platform-switching/zig-platform/host.zig b/examples/platform-switching/zig-platform/host.zig index 18a1427207..d03e803047 100644 --- a/examples/platform-switching/zig-platform/host.zig +++ b/examples/platform-switching/zig-platform/host.zig @@ -86,30 +86,21 @@ pub fn main() u8 { const stdout = std.io.getStdOut().writer(); const stderr = std.io.getStdErr().writer(); - // start time - var ts1: std.os.timespec = undefined; - std.os.clock_gettime(std.os.CLOCK.REALTIME, &ts1) catch unreachable; + var timer = std.time.Timer.start() catch unreachable; // actually call roc to populate the callresult var callresult = RocStr.empty(); roc__mainForHost_1_exposed_generic(&callresult); - // end time - var ts2: std.os.timespec = undefined; - std.os.clock_gettime(std.os.CLOCK.REALTIME, &ts2) catch unreachable; + const nanos = timer.read(); + const seconds = (@intToFloat(f64, nanos) / 1_000_000_000.0); // stdout the result stdout.print("{s}", .{callresult.asSlice()}) catch unreachable; callresult.deinit(); - const delta = to_seconds(ts2) - to_seconds(ts1); - - stderr.print("runtime: {d:.3}ms\n", .{delta * 1000}) catch unreachable; + stderr.print("runtime: {d:.3}ms\n", .{seconds * 1000}) catch unreachable; return 0; -} - -fn to_seconds(tms: std.os.timespec) f64 { - return @intToFloat(f64, tms.tv_sec) + (@intToFloat(f64, tms.tv_nsec) / 1_000_000_000.0); -} +} \ No newline at end of file