From db63877c8c82626682785c4e04a359d4bcba411f Mon Sep 17 00:00:00 2001 From: teoxoy <28601907+teoxoy@users.noreply.github.com> Date: Tue, 15 Nov 2022 14:31:21 +0100 Subject: [PATCH] [msl-out] omit extra switch case blocks where possible --- src/back/msl/writer.rs | 17 ++++++++++++++--- tests/out/msl/control-flow.msl | 6 ++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/back/msl/writer.rs b/src/back/msl/writer.rs index 7617ca9a6d..7cf6ebed62 100644 --- a/src/back/msl/writer.rs +++ b/src/back/msl/writer.rs @@ -2546,19 +2546,30 @@ impl Writer { 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)?; } diff --git a/tests/out/msl/control-flow.msl b/tests/out/msl/control-flow.msl index d00b7ec18b..be396e23a8 100644 --- a/tests/out/msl/control-flow.msl +++ b/tests/out/msl/control-flow.msl @@ -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;