From 886b855594175b2c2e78d4e20d62f0bd3f901dce Mon Sep 17 00:00:00 2001 From: Isaac Van Doren <69181572+isaacvando@users.noreply.github.com> Date: Sat, 14 Oct 2023 14:56:51 -0500 Subject: [PATCH 1/2] add Str.contains to builtins --- crates/compiler/builtins/roc/Str.roc | 13 ++++++ crates/compiler/module/src/symbol.rs | 1 + crates/compiler/test_gen/src/gen_str.rs | 60 +++++++++++++++++++++++++ 3 files changed, 74 insertions(+) diff --git a/crates/compiler/builtins/roc/Str.roc b/crates/compiler/builtins/roc/Str.roc index f2a0da3f34a..400ef1c4589 100644 --- a/crates/compiler/builtins/roc/Str.roc +++ b/crates/compiler/builtins/roc/Str.roc @@ -135,6 +135,7 @@ interface Str withCapacity, withPrefix, graphemes, + contains, ] imports [ Bool.{ Bool, Eq }, @@ -995,3 +996,15 @@ strToNumHelp = \string -> ## ``` withPrefix : Str, Str -> Str withPrefix = \str, prefix -> Str.concat prefix str + +## Determines whether or not the first Str contains the second. +## ``` +## expect Str.contains "foobarbaz" "bar" +## expect !(Str.contains "apple" "orange") +## expect Str.contains "anything" "" +## ``` +contains : Str, Str -> Bool +contains = \haystack, needle -> + when firstMatch haystack needle is + Some _index -> Bool.true + None -> Bool.false diff --git a/crates/compiler/module/src/symbol.rs b/crates/compiler/module/src/symbol.rs index 7eada4c4996..ced9509038c 100644 --- a/crates/compiler/module/src/symbol.rs +++ b/crates/compiler/module/src/symbol.rs @@ -1346,6 +1346,7 @@ define_builtins! { 56 STR_IS_VALID_SCALAR: "isValidScalar" 57 STR_RELEASE_EXCESS_CAPACITY: "releaseExcessCapacity" 58 STR_WALK_UTF8: "walkUtf8" + 59 STR_CONTAINS: "contains" } 6 LIST: "List" => { 0 LIST_LIST: "List" exposed_apply_type=true // the List.List type alias diff --git a/crates/compiler/test_gen/src/gen_str.rs b/crates/compiler/test_gen/src/gen_str.rs index f5ab49bd0a9..77ce175adbc 100644 --- a/crates/compiler/test_gen/src/gen_str.rs +++ b/crates/compiler/test_gen/src/gen_str.rs @@ -2144,3 +2144,63 @@ fn release_excess_capacity_empty() { |value: RocStr| (value.capacity(), value) ); } + +#[test] +#[cfg(any(feature = "gen-llvm", feature = "gen-dev"))] +fn str_contains_positive() { + assert_evals_to!( + r#" + Str.contains "foobarbaz" "bar" + "#, + true, + bool + ); +} + +#[test] +#[cfg(any(feature = "gen-llvm", feature = "gen-dev"))] +fn str_contains_negative() { + assert_evals_to!( + r#" + Str.contains "apple" "orange" + "#, + false, + bool + ); +} + +#[test] +#[cfg(any(feature = "gen-llvm", feature = "gen-dev"))] +fn str_contains_empty_positive() { + assert_evals_to!( + r#" + Str.contains "anything" "" + "#, + true, + bool + ); +} + +#[test] +#[cfg(any(feature = "gen-llvm", feature = "gen-dev"))] +fn str_contains_empty_negative() { + assert_evals_to!( + r#" + Str.contains "" "anything" + "#, + false, + bool + ); +} + +#[test] +#[cfg(any(feature = "gen-llvm", feature = "gen-dev"))] +fn str_contains_self() { + assert_evals_to!( + r#" + Str.contains "self" "self" + "#, + true, + bool + ); +} From 3df2ace4a6ee205c667c8e61f2b08a6a4e24b2fe Mon Sep 17 00:00:00 2001 From: Isaac Van Doren <69181572+isaacvando@users.noreply.github.com> Date: Sat, 14 Oct 2023 15:38:31 -0500 Subject: [PATCH 2/2] add test_mono files --- ...lambda_set_productive_nullable_wrapped.txt | 4 +- .../encode_derived_nested_record_string.txt | 48 ++++++------ ...encode_derived_record_one_field_string.txt | 48 ++++++------ ...ncode_derived_record_two_field_strings.txt | 48 ++++++------ .../generated/encode_derived_string.txt | 40 +++++----- .../encode_derived_tag_one_field_string.txt | 40 +++++----- ...encode_derived_tag_two_payloads_string.txt | 40 +++++----- ...cialize_errors_behind_unified_branches.txt | 36 ++++----- .../test_mono/generated/issue_4749.txt | 36 ++++----- ..._4772_weakened_monomorphic_destructure.txt | 78 +++++++++---------- .../generated/list_map_closure_borrows.txt | 8 +- .../generated/list_map_closure_owns.txt | 4 +- .../polymorphic_expression_unification.txt | 4 +- .../generated/recursively_build_effect.txt | 4 +- ...not_duplicate_identical_concrete_types.txt | 4 +- ...types_without_unification_of_unifiable.txt | 4 +- 16 files changed, 223 insertions(+), 223 deletions(-) diff --git a/crates/compiler/test_mono/generated/compose_recursive_lambda_set_productive_nullable_wrapped.txt b/crates/compiler/test_mono/generated/compose_recursive_lambda_set_productive_nullable_wrapped.txt index d9f51ebc465..817d9b50ec2 100644 --- a/crates/compiler/test_mono/generated/compose_recursive_lambda_set_productive_nullable_wrapped.txt +++ b/crates/compiler/test_mono/generated/compose_recursive_lambda_set_productive_nullable_wrapped.txt @@ -40,8 +40,8 @@ procedure Num.51 (#Attr.2, #Attr.3): ret Num.291; procedure Str.3 (#Attr.2, #Attr.3): - let Str.291 : Str = lowlevel StrConcat #Attr.2 #Attr.3; - ret Str.291; + let Str.294 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + ret Str.294; procedure Test.1 (Test.5): ret Test.5; 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 380cdd5e59e..cbdd6e51331 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 @@ -345,38 +345,38 @@ procedure Num.94 (#Attr.2, #Attr.3): ret Num.311; procedure Str.12 (#Attr.2): - let Str.307 : List U8 = lowlevel StrToUtf8 #Attr.2; - ret Str.307; + let Str.310 : List U8 = lowlevel StrToUtf8 #Attr.2; + ret Str.310; procedure Str.4 (#Attr.2, #Attr.3): - let Str.310 : Str = lowlevel StrJoinWith #Attr.2 #Attr.3; - ret Str.310; + let Str.313 : Str = lowlevel StrJoinWith #Attr.2 #Attr.3; + ret Str.313; procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): - let Str.298 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; - ret Str.298; + let Str.301 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; + ret Str.301; procedure Str.55 (#Attr.2): - let Str.313 : List Str = lowlevel StrGraphemes #Attr.2; - ret Str.313; - -procedure Str.9 (Str.79): - let Str.296 : U64 = 0i64; - let Str.297 : U64 = CallByName List.6 Str.79; - let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.296 Str.297; - let Str.293 : Int1 = StructAtIndex 2 Str.80; - if Str.293 then - let Str.295 : Str = StructAtIndex 1 Str.80; - let Str.294 : [C {U64, U8}, C Str] = TagId(1) Str.295; - ret Str.294; + let Str.316 : List Str = lowlevel StrGraphemes #Attr.2; + ret Str.316; + +procedure Str.9 (Str.80): + let Str.299 : U64 = 0i64; + let Str.300 : U64 = CallByName List.6 Str.80; + let Str.81 : {U64, Str, Int1, U8} = CallByName Str.48 Str.80 Str.299 Str.300; + let Str.296 : Int1 = StructAtIndex 2 Str.81; + if Str.296 then + let Str.298 : Str = StructAtIndex 1 Str.81; + let Str.297 : [C {U64, U8}, C Str] = TagId(1) Str.298; + ret Str.297; else - let Str.291 : U8 = StructAtIndex 3 Str.80; - let Str.292 : U64 = StructAtIndex 0 Str.80; - let #Derived_gen.58 : Str = StructAtIndex 1 Str.80; + let Str.294 : U8 = StructAtIndex 3 Str.81; + let Str.295 : U64 = StructAtIndex 0 Str.81; + let #Derived_gen.58 : Str = StructAtIndex 1 Str.81; dec #Derived_gen.58; - let Str.290 : {U64, U8} = Struct {Str.292, Str.291}; - let Str.289 : [C {U64, U8}, C Str] = TagId(0) Str.290; - ret Str.289; + let Str.293 : {U64, U8} = Struct {Str.295, Str.294}; + let Str.292 : [C {U64, U8}, C Str] = TagId(0) Str.293; + ret Str.292; procedure TotallyNotJson.100 (TotallyNotJson.850): let TotallyNotJson.1830 : Str = "a"; 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 964ee8bb77e..abb3fcc6057 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 @@ -288,38 +288,38 @@ procedure Num.94 (#Attr.2, #Attr.3): ret Num.301; procedure Str.12 (#Attr.2): - let Str.300 : List U8 = lowlevel StrToUtf8 #Attr.2; - ret Str.300; + let Str.303 : List U8 = lowlevel StrToUtf8 #Attr.2; + ret Str.303; procedure Str.4 (#Attr.2, #Attr.3): - let Str.303 : Str = lowlevel StrJoinWith #Attr.2 #Attr.3; - ret Str.303; + let Str.306 : Str = lowlevel StrJoinWith #Attr.2 #Attr.3; + ret Str.306; procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): - let Str.298 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; - ret Str.298; + let Str.301 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; + ret Str.301; procedure Str.55 (#Attr.2): - let Str.306 : List Str = lowlevel StrGraphemes #Attr.2; - ret Str.306; - -procedure Str.9 (Str.79): - let Str.296 : U64 = 0i64; - let Str.297 : U64 = CallByName List.6 Str.79; - let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.296 Str.297; - let Str.293 : Int1 = StructAtIndex 2 Str.80; - if Str.293 then - let Str.295 : Str = StructAtIndex 1 Str.80; - let Str.294 : [C {U64, U8}, C Str] = TagId(1) Str.295; - ret Str.294; + let Str.309 : List Str = lowlevel StrGraphemes #Attr.2; + ret Str.309; + +procedure Str.9 (Str.80): + let Str.299 : U64 = 0i64; + let Str.300 : U64 = CallByName List.6 Str.80; + let Str.81 : {U64, Str, Int1, U8} = CallByName Str.48 Str.80 Str.299 Str.300; + let Str.296 : Int1 = StructAtIndex 2 Str.81; + if Str.296 then + let Str.298 : Str = StructAtIndex 1 Str.81; + let Str.297 : [C {U64, U8}, C Str] = TagId(1) Str.298; + ret Str.297; else - let Str.291 : U8 = StructAtIndex 3 Str.80; - let Str.292 : U64 = StructAtIndex 0 Str.80; - let #Derived_gen.36 : Str = StructAtIndex 1 Str.80; + let Str.294 : U8 = StructAtIndex 3 Str.81; + let Str.295 : U64 = StructAtIndex 0 Str.81; + let #Derived_gen.36 : Str = StructAtIndex 1 Str.81; dec #Derived_gen.36; - let Str.290 : {U64, U8} = Struct {Str.292, Str.291}; - let Str.289 : [C {U64, U8}, C Str] = TagId(0) Str.290; - ret Str.289; + let Str.293 : {U64, U8} = Struct {Str.295, Str.294}; + let Str.292 : [C {U64, U8}, C Str] = TagId(0) Str.293; + ret Str.292; procedure TotallyNotJson.100 (TotallyNotJson.850): let TotallyNotJson.1479 : Str = "a"; 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 5875bb440b2..a83dd367ec4 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 @@ -295,38 +295,38 @@ procedure Num.94 (#Attr.2, #Attr.3): ret Num.301; procedure Str.12 (#Attr.2): - let Str.300 : List U8 = lowlevel StrToUtf8 #Attr.2; - ret Str.300; + let Str.303 : List U8 = lowlevel StrToUtf8 #Attr.2; + ret Str.303; procedure Str.4 (#Attr.2, #Attr.3): - let Str.303 : Str = lowlevel StrJoinWith #Attr.2 #Attr.3; - ret Str.303; + let Str.306 : Str = lowlevel StrJoinWith #Attr.2 #Attr.3; + ret Str.306; procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): - let Str.298 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; - ret Str.298; + let Str.301 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; + ret Str.301; procedure Str.55 (#Attr.2): - let Str.306 : List Str = lowlevel StrGraphemes #Attr.2; - ret Str.306; - -procedure Str.9 (Str.79): - let Str.296 : U64 = 0i64; - let Str.297 : U64 = CallByName List.6 Str.79; - let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.296 Str.297; - let Str.293 : Int1 = StructAtIndex 2 Str.80; - if Str.293 then - let Str.295 : Str = StructAtIndex 1 Str.80; - let Str.294 : [C {U64, U8}, C Str] = TagId(1) Str.295; - ret Str.294; + let Str.309 : List Str = lowlevel StrGraphemes #Attr.2; + ret Str.309; + +procedure Str.9 (Str.80): + let Str.299 : U64 = 0i64; + let Str.300 : U64 = CallByName List.6 Str.80; + let Str.81 : {U64, Str, Int1, U8} = CallByName Str.48 Str.80 Str.299 Str.300; + let Str.296 : Int1 = StructAtIndex 2 Str.81; + if Str.296 then + let Str.298 : Str = StructAtIndex 1 Str.81; + let Str.297 : [C {U64, U8}, C Str] = TagId(1) Str.298; + ret Str.297; else - let Str.291 : U8 = StructAtIndex 3 Str.80; - let Str.292 : U64 = StructAtIndex 0 Str.80; - let #Derived_gen.40 : Str = StructAtIndex 1 Str.80; + let Str.294 : U8 = StructAtIndex 3 Str.81; + let Str.295 : U64 = StructAtIndex 0 Str.81; + let #Derived_gen.40 : Str = StructAtIndex 1 Str.81; dec #Derived_gen.40; - let Str.290 : {U64, U8} = Struct {Str.292, Str.291}; - let Str.289 : [C {U64, U8}, C Str] = TagId(0) Str.290; - ret Str.289; + let Str.293 : {U64, U8} = Struct {Str.295, Str.294}; + let Str.292 : [C {U64, U8}, C Str] = TagId(0) Str.293; + ret Str.292; procedure TotallyNotJson.100 (TotallyNotJson.850): let TotallyNotJson.1479 : Str = "a"; diff --git a/crates/compiler/test_mono/generated/encode_derived_string.txt b/crates/compiler/test_mono/generated/encode_derived_string.txt index 5c69390b1d6..82bf5f90238 100644 --- a/crates/compiler/test_mono/generated/encode_derived_string.txt +++ b/crates/compiler/test_mono/generated/encode_derived_string.txt @@ -162,30 +162,30 @@ procedure Num.94 (#Attr.2, #Attr.3): ret Num.293; procedure Str.12 (#Attr.2): - let Str.299 : List U8 = lowlevel StrToUtf8 #Attr.2; - ret Str.299; + let Str.302 : List U8 = lowlevel StrToUtf8 #Attr.2; + ret Str.302; procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): - let Str.298 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; - ret Str.298; - -procedure Str.9 (Str.79): - let Str.296 : U64 = 0i64; - let Str.297 : U64 = CallByName List.6 Str.79; - let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.296 Str.297; - let Str.293 : Int1 = StructAtIndex 2 Str.80; - if Str.293 then - let Str.295 : Str = StructAtIndex 1 Str.80; - let Str.294 : [C {U64, U8}, C Str] = TagId(1) Str.295; - ret Str.294; + let Str.301 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; + ret Str.301; + +procedure Str.9 (Str.80): + let Str.299 : U64 = 0i64; + let Str.300 : U64 = CallByName List.6 Str.80; + let Str.81 : {U64, Str, Int1, U8} = CallByName Str.48 Str.80 Str.299 Str.300; + let Str.296 : Int1 = StructAtIndex 2 Str.81; + if Str.296 then + let Str.298 : Str = StructAtIndex 1 Str.81; + let Str.297 : [C {U64, U8}, C Str] = TagId(1) Str.298; + ret Str.297; else - let Str.291 : U8 = StructAtIndex 3 Str.80; - let Str.292 : U64 = StructAtIndex 0 Str.80; - let #Derived_gen.13 : Str = StructAtIndex 1 Str.80; + let Str.294 : U8 = StructAtIndex 3 Str.81; + let Str.295 : U64 = StructAtIndex 0 Str.81; + let #Derived_gen.13 : Str = StructAtIndex 1 Str.81; dec #Derived_gen.13; - let Str.290 : {U64, U8} = Struct {Str.292, Str.291}; - let Str.289 : [C {U64, U8}, C Str] = TagId(0) Str.290; - ret Str.289; + let Str.293 : {U64, U8} = Struct {Str.295, Str.294}; + let Str.292 : [C {U64, U8}, C Str] = TagId(0) Str.293; + ret Str.292; procedure TotallyNotJson.182 (TotallyNotJson.183, TotallyNotJson.1175, TotallyNotJson.181): let TotallyNotJson.1178 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.181; 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 b873f9841ad..1f354b3d198 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 @@ -243,30 +243,30 @@ procedure Num.94 (#Attr.2, #Attr.3): ret Num.303; procedure Str.12 (#Attr.2): - let Str.300 : List U8 = lowlevel StrToUtf8 #Attr.2; - ret Str.300; + let Str.303 : List U8 = lowlevel StrToUtf8 #Attr.2; + ret Str.303; procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): - let Str.298 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; - ret Str.298; - -procedure Str.9 (Str.79): - let Str.296 : U64 = 0i64; - let Str.297 : U64 = CallByName List.6 Str.79; - let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.296 Str.297; - let Str.293 : Int1 = StructAtIndex 2 Str.80; - if Str.293 then - let Str.295 : Str = StructAtIndex 1 Str.80; - let Str.294 : [C {U64, U8}, C Str] = TagId(1) Str.295; - ret Str.294; + let Str.301 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; + ret Str.301; + +procedure Str.9 (Str.80): + let Str.299 : U64 = 0i64; + let Str.300 : U64 = CallByName List.6 Str.80; + let Str.81 : {U64, Str, Int1, U8} = CallByName Str.48 Str.80 Str.299 Str.300; + let Str.296 : Int1 = StructAtIndex 2 Str.81; + if Str.296 then + let Str.298 : Str = StructAtIndex 1 Str.81; + let Str.297 : [C {U64, U8}, C Str] = TagId(1) Str.298; + ret Str.297; else - let Str.291 : U8 = StructAtIndex 3 Str.80; - let Str.292 : U64 = StructAtIndex 0 Str.80; - let #Derived_gen.34 : Str = StructAtIndex 1 Str.80; + let Str.294 : U8 = StructAtIndex 3 Str.81; + let Str.295 : U64 = StructAtIndex 0 Str.81; + let #Derived_gen.34 : Str = StructAtIndex 1 Str.81; dec #Derived_gen.34; - let Str.290 : {U64, U8} = Struct {Str.292, Str.291}; - let Str.289 : [C {U64, U8}, C Str] = TagId(0) Str.290; - ret Str.289; + let Str.293 : {U64, U8} = Struct {Str.295, Str.294}; + let Str.292 : [C {U64, U8}, C Str] = TagId(0) Str.293; + ret Str.292; procedure TotallyNotJson.182 (TotallyNotJson.183, TotallyNotJson.1216, TotallyNotJson.181): let TotallyNotJson.1219 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.181; 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 1ee8d260769..4dd9a5814b4 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 @@ -246,30 +246,30 @@ procedure Num.94 (#Attr.2, #Attr.3): ret Num.303; procedure Str.12 (#Attr.2): - let Str.300 : List U8 = lowlevel StrToUtf8 #Attr.2; - ret Str.300; + let Str.303 : List U8 = lowlevel StrToUtf8 #Attr.2; + ret Str.303; procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): - let Str.298 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; - ret Str.298; - -procedure Str.9 (Str.79): - let Str.296 : U64 = 0i64; - let Str.297 : U64 = CallByName List.6 Str.79; - let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.296 Str.297; - let Str.293 : Int1 = StructAtIndex 2 Str.80; - if Str.293 then - let Str.295 : Str = StructAtIndex 1 Str.80; - let Str.294 : [C {U64, U8}, C Str] = TagId(1) Str.295; - ret Str.294; + let Str.301 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; + ret Str.301; + +procedure Str.9 (Str.80): + let Str.299 : U64 = 0i64; + let Str.300 : U64 = CallByName List.6 Str.80; + let Str.81 : {U64, Str, Int1, U8} = CallByName Str.48 Str.80 Str.299 Str.300; + let Str.296 : Int1 = StructAtIndex 2 Str.81; + if Str.296 then + let Str.298 : Str = StructAtIndex 1 Str.81; + let Str.297 : [C {U64, U8}, C Str] = TagId(1) Str.298; + ret Str.297; else - let Str.291 : U8 = StructAtIndex 3 Str.80; - let Str.292 : U64 = StructAtIndex 0 Str.80; - let #Derived_gen.35 : Str = StructAtIndex 1 Str.80; + let Str.294 : U8 = StructAtIndex 3 Str.81; + let Str.295 : U64 = StructAtIndex 0 Str.81; + let #Derived_gen.35 : Str = StructAtIndex 1 Str.81; dec #Derived_gen.35; - let Str.290 : {U64, U8} = Struct {Str.292, Str.291}; - let Str.289 : [C {U64, U8}, C Str] = TagId(0) Str.290; - ret Str.289; + let Str.293 : {U64, U8} = Struct {Str.295, Str.294}; + let Str.292 : [C {U64, U8}, C Str] = TagId(0) Str.293; + ret Str.292; procedure TotallyNotJson.182 (TotallyNotJson.183, TotallyNotJson.1216, TotallyNotJson.181): let TotallyNotJson.1219 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.181; diff --git a/crates/compiler/test_mono/generated/issue_2583_specialize_errors_behind_unified_branches.txt b/crates/compiler/test_mono/generated/issue_2583_specialize_errors_behind_unified_branches.txt index 7aa157818dd..f3c3df62c77 100644 --- a/crates/compiler/test_mono/generated/issue_2583_specialize_errors_behind_unified_branches.txt +++ b/crates/compiler/test_mono/generated/issue_2583_specialize_errors_behind_unified_branches.txt @@ -47,28 +47,28 @@ procedure Num.22 (#Attr.2, #Attr.3): let Num.291 : Int1 = lowlevel NumLt #Attr.2 #Attr.3; ret Num.291; -procedure Str.27 (Str.99): - let Str.289 : [C Int1, C I64] = CallByName Str.72 Str.99; - ret Str.289; +procedure Str.27 (Str.100): + let Str.292 : [C Int1, C I64] = CallByName Str.73 Str.100; + ret Str.292; procedure Str.47 (#Attr.2): - let Str.297 : {I64, U8} = lowlevel StrToNum #Attr.2; - ret Str.297; + let Str.300 : {I64, U8} = lowlevel StrToNum #Attr.2; + ret Str.300; -procedure Str.72 (Str.235): - let Str.236 : {I64, U8} = CallByName Str.47 Str.235; - dec Str.235; - let Str.295 : U8 = StructAtIndex 1 Str.236; - let Str.296 : U8 = 0i64; - let Str.292 : Int1 = CallByName Bool.11 Str.295 Str.296; - if Str.292 then - let Str.294 : I64 = StructAtIndex 0 Str.236; - let Str.293 : [C Int1, C I64] = TagId(1) Str.294; - ret Str.293; +procedure Str.73 (Str.236): + let Str.237 : {I64, U8} = CallByName Str.47 Str.236; + dec Str.236; + let Str.298 : U8 = StructAtIndex 1 Str.237; + let Str.299 : U8 = 0i64; + let Str.295 : Int1 = CallByName Bool.11 Str.298 Str.299; + if Str.295 then + let Str.297 : I64 = StructAtIndex 0 Str.237; + let Str.296 : [C Int1, C I64] = TagId(1) Str.297; + ret Str.296; else - let Str.291 : Int1 = false; - let Str.290 : [C Int1, C I64] = TagId(0) Str.291; - ret Str.290; + let Str.294 : Int1 = false; + let Str.293 : [C Int1, C I64] = TagId(0) Str.294; + ret Str.293; procedure Test.0 (): let Test.3 : Int1 = CallByName Bool.2; diff --git a/crates/compiler/test_mono/generated/issue_4749.txt b/crates/compiler/test_mono/generated/issue_4749.txt index 3d772ebfee2..f9b37f3a2ed 100644 --- a/crates/compiler/test_mono/generated/issue_4749.txt +++ b/crates/compiler/test_mono/generated/issue_4749.txt @@ -236,26 +236,26 @@ procedure Num.77 (#Attr.2, #Attr.3): ret Num.324; procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): - let Str.298 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; - ret Str.298; - -procedure Str.9 (Str.79): - let Str.296 : U64 = 0i64; - let Str.297 : U64 = CallByName List.6 Str.79; - let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.296 Str.297; - let Str.293 : Int1 = StructAtIndex 2 Str.80; - if Str.293 then - let Str.295 : Str = StructAtIndex 1 Str.80; - let Str.294 : [C {U64, U8}, C Str] = TagId(1) Str.295; - ret Str.294; + let Str.301 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; + ret Str.301; + +procedure Str.9 (Str.80): + let Str.299 : U64 = 0i64; + let Str.300 : U64 = CallByName List.6 Str.80; + let Str.81 : {U64, Str, Int1, U8} = CallByName Str.48 Str.80 Str.299 Str.300; + let Str.296 : Int1 = StructAtIndex 2 Str.81; + if Str.296 then + let Str.298 : Str = StructAtIndex 1 Str.81; + let Str.297 : [C {U64, U8}, C Str] = TagId(1) Str.298; + ret Str.297; else - let Str.291 : U8 = StructAtIndex 3 Str.80; - let Str.292 : U64 = StructAtIndex 0 Str.80; - let #Derived_gen.6 : Str = StructAtIndex 1 Str.80; + let Str.294 : U8 = StructAtIndex 3 Str.81; + let Str.295 : U64 = StructAtIndex 0 Str.81; + let #Derived_gen.6 : Str = StructAtIndex 1 Str.81; dec #Derived_gen.6; - let Str.290 : {U64, U8} = Struct {Str.292, Str.291}; - let Str.289 : [C {U64, U8}, C Str] = TagId(0) Str.290; - ret Str.289; + let Str.293 : {U64, U8} = Struct {Str.295, Str.294}; + let Str.292 : [C {U64, U8}, C Str] = TagId(0) Str.293; + ret Str.292; procedure Test.3 (): let Test.0 : List U8 = Array [82i64, 111i64, 99i64]; diff --git a/crates/compiler/test_mono/generated/issue_4772_weakened_monomorphic_destructure.txt b/crates/compiler/test_mono/generated/issue_4772_weakened_monomorphic_destructure.txt index 80f817c439b..c334fa3b63b 100644 --- a/crates/compiler/test_mono/generated/issue_4772_weakened_monomorphic_destructure.txt +++ b/crates/compiler/test_mono/generated/issue_4772_weakened_monomorphic_destructure.txt @@ -210,53 +210,53 @@ procedure Num.77 (#Attr.2, #Attr.3): ret Num.324; procedure Str.12 (#Attr.2): - let Str.298 : List U8 = lowlevel StrToUtf8 #Attr.2; - ret Str.298; + let Str.301 : List U8 = lowlevel StrToUtf8 #Attr.2; + ret Str.301; -procedure Str.27 (Str.99): - let Str.289 : [C {}, C I64] = CallByName Str.72 Str.99; - ret Str.289; +procedure Str.27 (Str.100): + let Str.292 : [C {}, C I64] = CallByName Str.73 Str.100; + ret Str.292; procedure Str.47 (#Attr.2): - let Str.297 : {I64, U8} = lowlevel StrToNum #Attr.2; - ret Str.297; + let Str.300 : {I64, U8} = lowlevel StrToNum #Attr.2; + ret Str.300; procedure Str.48 (#Attr.2, #Attr.3, #Attr.4): - let Str.308 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; - ret Str.308; - -procedure Str.72 (Str.235): - let Str.236 : {I64, U8} = CallByName Str.47 Str.235; - dec Str.235; - let Str.295 : U8 = StructAtIndex 1 Str.236; - let Str.296 : U8 = 0i64; - let Str.292 : Int1 = CallByName Bool.11 Str.295 Str.296; - if Str.292 then - let Str.294 : I64 = StructAtIndex 0 Str.236; - let Str.293 : [C {}, C I64] = TagId(1) Str.294; - ret Str.293; + let Str.311 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4; + ret Str.311; + +procedure Str.73 (Str.236): + let Str.237 : {I64, U8} = CallByName Str.47 Str.236; + dec Str.236; + let Str.298 : U8 = StructAtIndex 1 Str.237; + let Str.299 : U8 = 0i64; + let Str.295 : Int1 = CallByName Bool.11 Str.298 Str.299; + if Str.295 then + let Str.297 : I64 = StructAtIndex 0 Str.237; + let Str.296 : [C {}, C I64] = TagId(1) Str.297; + ret Str.296; else - let Str.291 : {} = Struct {}; - let Str.290 : [C {}, C I64] = TagId(0) Str.291; - ret Str.290; - -procedure Str.9 (Str.79): - let Str.306 : U64 = 0i64; - let Str.307 : U64 = CallByName List.6 Str.79; - let Str.80 : {U64, Str, Int1, U8} = CallByName Str.48 Str.79 Str.306 Str.307; - let Str.303 : Int1 = StructAtIndex 2 Str.80; - if Str.303 then - let Str.305 : Str = StructAtIndex 1 Str.80; - let Str.304 : [C {U64, U8}, C Str] = TagId(1) Str.305; - ret Str.304; + let Str.294 : {} = Struct {}; + let Str.293 : [C {}, C I64] = TagId(0) Str.294; + ret Str.293; + +procedure Str.9 (Str.80): + let Str.309 : U64 = 0i64; + let Str.310 : U64 = CallByName List.6 Str.80; + let Str.81 : {U64, Str, Int1, U8} = CallByName Str.48 Str.80 Str.309 Str.310; + let Str.306 : Int1 = StructAtIndex 2 Str.81; + if Str.306 then + let Str.308 : Str = StructAtIndex 1 Str.81; + let Str.307 : [C {U64, U8}, C Str] = TagId(1) Str.308; + ret Str.307; else - let Str.301 : U8 = StructAtIndex 3 Str.80; - let Str.302 : U64 = StructAtIndex 0 Str.80; - let #Derived_gen.6 : Str = StructAtIndex 1 Str.80; + let Str.304 : U8 = StructAtIndex 3 Str.81; + let Str.305 : U64 = StructAtIndex 0 Str.81; + let #Derived_gen.6 : Str = StructAtIndex 1 Str.81; dec #Derived_gen.6; - let Str.300 : {U64, U8} = Struct {Str.302, Str.301}; - let Str.299 : [C {U64, U8}, C Str] = TagId(0) Str.300; - ret Str.299; + let Str.303 : {U64, U8} = Struct {Str.305, Str.304}; + let Str.302 : [C {U64, U8}, C Str] = TagId(0) Str.303; + ret Str.302; procedure Test.0 (): let Test.37 : Str = "-1234"; diff --git a/crates/compiler/test_mono/generated/list_map_closure_borrows.txt b/crates/compiler/test_mono/generated/list_map_closure_borrows.txt index 5d30a281440..708689e1f8a 100644 --- a/crates/compiler/test_mono/generated/list_map_closure_borrows.txt +++ b/crates/compiler/test_mono/generated/list_map_closure_borrows.txt @@ -31,12 +31,12 @@ procedure Num.22 (#Attr.2, #Attr.3): ret Num.291; procedure Str.16 (#Attr.2, #Attr.3): - let Str.289 : Str = lowlevel StrRepeat #Attr.2 #Attr.3; - ret Str.289; + let Str.292 : Str = lowlevel StrRepeat #Attr.2 #Attr.3; + ret Str.292; procedure Str.3 (#Attr.2, #Attr.3): - let Str.290 : Str = lowlevel StrConcat #Attr.2 #Attr.3; - ret Str.290; + let Str.293 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + ret Str.293; procedure Test.1 (): let Test.21 : Str = "lllllllllllllllllllllooooooooooong"; diff --git a/crates/compiler/test_mono/generated/list_map_closure_owns.txt b/crates/compiler/test_mono/generated/list_map_closure_owns.txt index 138be6f3c3a..58b1cbe0cdc 100644 --- a/crates/compiler/test_mono/generated/list_map_closure_owns.txt +++ b/crates/compiler/test_mono/generated/list_map_closure_owns.txt @@ -31,8 +31,8 @@ procedure Num.22 (#Attr.2, #Attr.3): ret Num.291; procedure Str.3 (#Attr.2, #Attr.3): - let Str.290 : Str = lowlevel StrConcat #Attr.2 #Attr.3; - ret Str.290; + let Str.293 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + ret Str.293; procedure Test.1 (): let Test.21 : Str = "lllllllllllllllllllllooooooooooong"; diff --git a/crates/compiler/test_mono/generated/polymorphic_expression_unification.txt b/crates/compiler/test_mono/generated/polymorphic_expression_unification.txt index 6e6d11abec6..a0f79514511 100644 --- a/crates/compiler/test_mono/generated/polymorphic_expression_unification.txt +++ b/crates/compiler/test_mono/generated/polymorphic_expression_unification.txt @@ -3,8 +3,8 @@ procedure Bool.11 (#Attr.2, #Attr.3): ret Bool.23; procedure Str.3 (#Attr.2, #Attr.3): - let Str.290 : Str = lowlevel StrConcat #Attr.2 #Attr.3; - ret Str.290; + let Str.293 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + ret Str.293; procedure Test.2 (Test.7): let Test.24 : Str = ".trace(\""; diff --git a/crates/compiler/test_mono/generated/recursively_build_effect.txt b/crates/compiler/test_mono/generated/recursively_build_effect.txt index 7aa587cccf4..c480f7db06f 100644 --- a/crates/compiler/test_mono/generated/recursively_build_effect.txt +++ b/crates/compiler/test_mono/generated/recursively_build_effect.txt @@ -3,8 +3,8 @@ procedure Num.20 (#Attr.2, #Attr.3): ret Num.291; procedure Str.3 (#Attr.2, #Attr.3): - let Str.291 : Str = lowlevel StrConcat #Attr.2 #Attr.3; - ret Str.291; + let Str.294 : Str = lowlevel StrConcat #Attr.2 #Attr.3; + ret Str.294; procedure Test.11 (Test.29, #Attr.12): let Test.32 : {} = UnionAtIndex (Id 0) (Index 0) #Attr.12; diff --git a/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_types.txt b/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_types.txt index 801215008b6..274ede0a7db 100644 --- a/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_types.txt +++ b/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_types.txt @@ -232,8 +232,8 @@ procedure Num.94 (#Attr.2, #Attr.3): ret Num.303; procedure Str.12 (#Attr.2): - let Str.290 : List U8 = lowlevel StrToUtf8 #Attr.2; - ret Str.290; + let Str.293 : List U8 = lowlevel StrToUtf8 #Attr.2; + ret Str.293; procedure Test.2 (Test.10): let Test.15 : {Str, Str} = CallByName Encode.23 Test.10; diff --git a/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification_of_unifiable.txt b/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification_of_unifiable.txt index 514bfb0d039..e3546ac58dc 100644 --- a/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification_of_unifiable.txt +++ b/crates/compiler/test_mono/generated/unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unification_of_unifiable.txt @@ -178,8 +178,8 @@ procedure Num.51 (#Attr.2, #Attr.3): ret Num.313; procedure Str.12 (#Attr.2): - let Str.290 : List U8 = lowlevel StrToUtf8 #Attr.2; - ret Str.290; + let Str.293 : List U8 = lowlevel StrToUtf8 #Attr.2; + ret Str.293; procedure Test.2 (Test.11): let Test.18 : {{}, {}} = CallByName Encode.23 Test.11;