[msl-out] omit extra switch case blocks where possible

This commit is contained in:
teoxoy
2022-11-15 14:31:21 +01:00
committed by Jim Blandy
parent e05706bc48
commit db63877c8c
2 changed files with 16 additions and 7 deletions

View File

@@ -2546,19 +2546,30 @@ impl<W: Write> Writer<W> {
for case in cases.iter() {
match case.value {
crate::SwitchValue::Integer(value) => {
writeln!(self.out, "{}case {}{}: {{", lcase, value, type_postfix)?;
write!(self.out, "{}case {}{}:", lcase, value, type_postfix)?;
}
crate::SwitchValue::Default => {
writeln!(self.out, "{}default: {{", lcase)?;
write!(self.out, "{}default:", lcase)?;
}
}
let write_block_braces = !(case.fall_through && case.body.is_empty());
if write_block_braces {
writeln!(self.out, " {{")?;
} else {
writeln!(self.out)?;
}
self.put_block(lcase.next(), &case.body, context)?;
if !case.fall_through
&& case.body.last().map_or(true, |s| !s.is_terminator())
{
writeln!(self.out, "{}break;", lcase.next())?;
}
writeln!(self.out, "{}}}", lcase)?;
if write_block_braces {
writeln!(self.out, "{}}}", lcase)?;
}
}
writeln!(self.out, "{}}}", level)?;
}

View File

@@ -68,8 +68,7 @@ kernel void main_(
pos = 1;
break;
}
case 3: {
}
case 3:
case 4: {
pos = 2;
break;
@@ -78,8 +77,7 @@ kernel void main_(
pos = 3;
break;
}
default: {
}
default:
case 6: {
pos = 4;
break;