mirror of
https://github.com/roc-lang/roc.git
synced 2025-11-25 13:36:37 +00:00
Don't add path instructions for newtypes that decay into their args
This commit is contained in:
parent
d4ad981448
commit
eee13a4aa3
5 changed files with 44 additions and 11 deletions
|
|
@ -977,9 +977,16 @@ fn needs_tests(pattern: &Pattern) -> bool {
|
|||
|
||||
match pattern {
|
||||
Identifier(_) | Underscore => false,
|
||||
NewtypeDestructure { arguments, .. } => {
|
||||
// Newtypes that only have one argument decay immediately into that argument, so no
|
||||
// test for them is needed.
|
||||
//
|
||||
// Newtypes with > 1 argument decay into a struct of those arguments, and we'll need to
|
||||
// read the appropriate argument in the struct when constructing the decision tree.
|
||||
arguments.len() != 1
|
||||
}
|
||||
|
||||
RecordDestructure(_, _)
|
||||
| NewtypeDestructure { .. }
|
||||
| AppliedTag { .. }
|
||||
| OpaqueUnwrap { .. }
|
||||
| BitLiteral { .. }
|
||||
|
|
|
|||
|
|
@ -7418,7 +7418,9 @@ mod solve_expr {
|
|||
Wrapper (AlternatePayload str) -> str
|
||||
"#
|
||||
),
|
||||
&[r#"Wrapper (Payload "err") : [Wrapper [AlternatePayload Str, Payload Str]]"#,]
|
||||
@r###"
|
||||
Wrapper (Payload "err") : [Wrapper [AlternatePayload Str, Payload Str]]
|
||||
"###
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1805,3 +1805,19 @@ fn instantiate_annotated_as_recursive_alias_multiple_polymorphic_expr() {
|
|||
i64
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))]
|
||||
fn issue_3560_nested_tag_constructor_is_newtype() {
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
when Wrapper (Payload "err") is
|
||||
Wrapper (Payload str) -> str
|
||||
Wrapper (AlternatePayload str) -> str
|
||||
"#
|
||||
),
|
||||
RocStr::from("err"),
|
||||
RocStr
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
procedure Test.0 ():
|
||||
let Test.10 : Str = "err";
|
||||
let Test.9 : [C Str, C Str] = TagId(1) Test.10;
|
||||
joinpoint Test.8:
|
||||
let Test.4 : Str = UnionAtIndex (Id 0) (Index 0) Test.9;
|
||||
inc Test.4;
|
||||
dec Test.9;
|
||||
ret Test.4;
|
||||
in
|
||||
let Test.3 : Str = UnionAtIndex (Id 1) (Index 0) Test.9;
|
||||
inc Test.3;
|
||||
dec Test.9;
|
||||
ret Test.3;
|
||||
|
|
@ -1886,17 +1886,12 @@ fn encode_derived_tag_two_payloads_string() {
|
|||
}
|
||||
|
||||
#[mono_test]
|
||||
fn issue_3560_nested_tag_union() {
|
||||
fn issue_3560_nested_tag_constructor_is_newtype() {
|
||||
indoc!(
|
||||
r#"
|
||||
app "test"
|
||||
imports [Encode.{ toEncoder }, Json]
|
||||
provides [main] to "./platform"
|
||||
|
||||
main =
|
||||
when Wrapper (Payload "err") is
|
||||
Wrapper (Payload str) -> str
|
||||
Wrapper (AlternatePayload str) -> str
|
||||
when Wrapper (Payload "err") is
|
||||
Wrapper (Payload str) -> str
|
||||
Wrapper (AlternatePayload str) -> str
|
||||
"#
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue