@@ -29,12 +29,15 @@ pub fn select_case_p() -> impl Parser<RcStringView, Output = Statement> {
2929 let case_blocks = all_case_blocks
3030 . clone ( )
3131 . into_iter ( )
32- . filter ( |x| !x . expression_list . is_empty ( ) )
32+ . filter ( |x| x . has_conditions ( ) )
3333 . collect ( ) ;
3434 let else_block = all_case_blocks
3535 . into_iter ( )
36- . find ( |x| x. expression_list . is_empty ( ) )
37- . map ( |x| x. statements ) ;
36+ . find ( |x| !x. has_conditions ( ) )
37+ . map ( |x| {
38+ let ( _, right) = x. into ( ) ;
39+ right
40+ } ) ;
3841 Statement :: SelectCase ( SelectCase {
3942 expr,
4043 case_blocks,
@@ -91,10 +94,7 @@ fn continue_after_case() -> impl Parser<RcStringView, Output = CaseBlock> {
9194 Box :: new( case_expression_list( ) ) ,
9295 ] ) ,
9396 ZeroOrMoreStatements :: new_multi ( vec ! [ Keyword :: Case , Keyword :: End ] ) ,
94- |expression_list, statements| CaseBlock {
95- expression_list,
96- statements,
97- } ,
97+ CaseBlock :: new,
9898 ) ,
9999 )
100100}
@@ -175,15 +175,15 @@ mod tests {
175175 GlobalStatement :: Statement ( Statement :: SelectCase ( SelectCase {
176176 expr: "X" . as_var_expr( 2 , 21 ) ,
177177 inline_comments: vec![ " testing for x" . to_string( ) . at_rc( 2 , 23 ) ] ,
178- case_blocks: vec![ CaseBlock {
179- expression_list : vec![ CaseExpression :: Simple ( 1 . as_lit_expr( 3 , 14 ) ) ] ,
180- statements : vec![
178+ case_blocks: vec![ CaseBlock :: new (
179+ vec![ CaseExpression :: Simple ( 1 . as_lit_expr( 3 , 14 ) ) ] ,
180+ vec![
181181 Statement :: Comment ( " is it one?" . to_string( ) ) . at_rc( 3 , 23 ) ,
182182 Statement :: sub_call( "Flint" . into( ) , vec![ "One" . as_lit_expr( 4 , 15 ) ] )
183183 . at_rc( 4 , 9 ) ,
184184 Statement :: Comment ( " print it" . to_string( ) ) . at_rc( 4 , 23 ) ,
185185 ]
186- } ] ,
186+ ) ] ,
187187 else_block: Some ( vec![
188188 Statement :: Comment ( " something else?" . to_string( ) ) . at_rc( 5 , 23 ) ,
189189 Statement :: sub_call( "Flint" . into( ) , vec![ "Nope" . as_lit_expr( 6 , 15 ) ] )
@@ -238,15 +238,15 @@ mod tests {
238238 " testing for x" . to_string( ) . at_rc( 2 , 23 ) ,
239239 " first case" . to_string( ) . at_rc( 3 , 9 )
240240 ] ,
241- case_blocks: vec![ CaseBlock {
242- expression_list : vec![ CaseExpression :: Simple ( 1 . as_lit_expr( 4 , 14 ) ) ] ,
243- statements : vec![
241+ case_blocks: vec![ CaseBlock :: new (
242+ vec![ CaseExpression :: Simple ( 1 . as_lit_expr( 4 , 14 ) ) ] ,
243+ vec![
244244 Statement :: Comment ( " is it one?" . to_string( ) ) . at_rc( 4 , 23 ) ,
245245 Statement :: sub_call( "Flint" . into( ) , vec![ "One" . as_lit_expr( 5 , 15 ) ] )
246246 . at_rc( 5 , 9 ) ,
247247 Statement :: Comment ( " print it" . to_string( ) ) . at_rc( 5 , 23 ) ,
248248 ]
249- } ] ,
249+ ) ] ,
250250 else_block: None
251251 } ) )
252252 . at_rc( 2 , 9 )
@@ -271,31 +271,31 @@ mod tests {
271271 expr: paren_exp!( bin_exp!( int_lit!( 5 at 2 : 21 ) ; plus int_lit!( 2 at 2 : 23 ) ; at 2 : 22 ) ; at 2 : 20 ) ,
272272 inline_comments: vec![ ] ,
273273 case_blocks: vec![
274- CaseBlock {
275- expression_list : vec![ CaseExpression :: Simple (
274+ CaseBlock :: new (
275+ vec![ CaseExpression :: Simple (
276276 paren_exp!( bin_exp!( int_lit!( 6 at 3 : 14 ) ; plus int_lit!( 5 at 3 : 16 ) ; at 3 : 15 ) ; at 3 : 13 )
277277 ) ] ,
278- statements : vec![ Statement :: Print ( Print {
278+ vec![ Statement :: Print ( Print {
279279 file_number: None ,
280280 lpt1: false ,
281281 format_string: None ,
282282 args: vec![ PrintArg :: Expression ( 11 . as_lit_expr( 4 , 19 ) ) ]
283283 } )
284284 . at_rc( 4 , 13 ) ]
285- } ,
286- CaseBlock {
287- expression_list : vec![ CaseExpression :: Range (
285+ ) ,
286+ CaseBlock :: new (
287+ vec![ CaseExpression :: Range (
288288 Expression :: Parenthesis ( Box :: new( 2 . as_lit_expr( 5 , 14 ) ) ) . at_rc( 5 , 13 ) ,
289289 Expression :: Parenthesis ( Box :: new( 5 . as_lit_expr( 5 , 19 ) ) ) . at_rc( 5 , 18 )
290290 ) ] ,
291- statements : vec![ Statement :: Print ( Print {
291+ vec![ Statement :: Print ( Print {
292292 file_number: None ,
293293 lpt1: false ,
294294 format_string: None ,
295295 args: vec![ PrintArg :: Expression ( 2 . as_lit_expr( 6 , 19 ) ) ]
296296 } )
297297 . at_rc( 6 , 13 ) ]
298- } ,
298+ ) ,
299299 ] ,
300300 else_block: None
301301 } )
0 commit comments