Example 1: A pattern match
Source:
#![allow(unused)]
fn main() {
fn is_north(cmd: &(Option<&str>, i32)) -> bool {
match cmd {
(Some("north" | "n"), dist) if *dist > 0 => true,
(Some(_), _) | (None, _) => false,
}
}
}
After match ergonomics:
#![allow(unused)]
fn main() {
fn is_north(cmd: &(Option<&str>, i32)) -> bool {
match cmd {
&(Some("north" | "n"), ref dist) if *dist > 0 => true,
&(Some(_), _) | (None, _) => false,
}
}
}
After or-pattern desugaring and match desugaring:
#![allow(unused)]
fn main() {
fn is_north(cmd: &(Option<&str>, i32)) -> bool {
'match_end: {
let dist_;
'arm: {
break 'match_end (if let &(Some("north"), ref dist) = cmd && *dist > 0 {
dist_ = dist;
break 'arm;
} else if let &(Some("n"), ref dist) = cmd && *dist > 0 {
dist_ = dist;
break 'arm;
} else if let &(Some(_), _) = cmd {
false
} else if let &(None, _) = cmd {
false
} else {
unsafe { core::hint::unreachable_unchecked() }
});
}
true
}
}
}
After pattern unnesting:
#![allow(unused)]
fn main() {
fn is_north(cmd: &(Option<&str>, i32)) -> bool {
'match_end: {
let dist_;
'arm: {
break 'match_end (
if (*cmd).0.enum#discriminant == discriminant_of!(Option, Some)
&& (*cmd).0.Some.0 == "north"
&& let ref dist = (*cmd).1
&& *dist > 0
{
dist_ = dist;
break 'arm;
} else if (*cmd).0.enum#discriminant == discriminant_of!(Option, Some)
&& (*cmd).0.Some.0 == "n"
&& let ref dist = (*cmd).1
&& *dist > 0
{
dist_ = dist;
break 'arm;
} else if (*cmd).0.enum#discriminant == discriminant_of!(Option, Some) {
false
} else if (*cmd).0.enum#discriminant == discriminant_of!(Option, None) {
false
} else {
unsafe { core::hint::unreachable_unchecked() }
}
);
}
true
}
}
}
After if-let-chain desugaring (and simplifying blocks a bit):
#![allow(unused)]
fn main() {
fn is_north(cmd: &(Option<&str>, i32)) -> bool {
'match_end: {
let dist_;
'arm: {
if (*cmd).0.enum#discriminant == discriminant_of!(Option, Some) {
if (*cmd).0.Some.0 == "north" {
if let ref dist = (*cmd).1 {
if *dist > 0 {
dist_ = dist;
break 'arm;
}
}
}
}
if (*cmd).0.enum#discriminant == discriminant_of!(Option, Some) {
if (*cmd).0.Some.0 == "n" {
if let ref dist = (*cmd).1 {
if *dist > 0 {
dist_ = dist;
break 'arm;
}
}
}
}
break 'match_end {
if (*cmd).0.enum#discriminant == discriminant_of!(Option, Some) {
false
} else if (*cmd).0.enum#discriminant == discriminant_of!(Option, None) {
false
} else {
unsafe { core::hint::unreachable_unchecked() }
}
};
}
true
}
}
}