@@ -360,16 +360,15 @@ END_IF
360
360
| INTEGER_LITERAL endif id { (getSpan $ 3 , Just $ 1 ) }
361
361
362
362
CASE_BLOCK :: { Block A0 }
363
- CASE_BLOCK
364
- : selectcase ' (' EXPRESSION ' )' MAYBE_COMMENT NEWLINE CASES
363
+ : selectcase ' (' EXPRESSION ' )' MAYBE_COMMENT NEWLINE CASES
365
364
{ let { (caseRanges, blocks, endLabel, endSpan) = $ 7 ;
366
365
span = getTransSpan $ 1 endSpan }
367
366
in BlCase () span Nothing Nothing $ 3 caseRanges blocks endLabel }
368
- | INTEGER_LITERAL selectcase ' (' EXPRESSION ' )' MAYBE_COMMENT NEWLINE CASES
367
+ | INTEGER_LITERAL selectcase ' (' EXPRESSION ' )' MAYBE_COMMENT NEWLINE CASES
369
368
{ let { (caseRanges, blocks, endLabel, endSpan) = $ 8 ;
370
369
span = getTransSpan $ 1 endSpan }
371
370
in BlCase () span (Just $ 1 ) Nothing $ 4 caseRanges blocks endLabel }
372
- | id ' :' selectcase ' (' EXPRESSION ' )' MAYBE_COMMENT NEWLINE CASES
371
+ | id ' :' selectcase ' (' EXPRESSION ' )' MAYBE_COMMENT NEWLINE CASES
373
372
{ let { (caseRanges, blocks, endLabel, endSpan) = $ 9 ;
374
373
TId s startName = $ 1 ;
375
374
span = getTransSpan s endSpan }
@@ -380,8 +379,16 @@ CASE_BLOCK
380
379
span = getTransSpan s endSpan }
381
380
in BlCase () span (Just $ 1 ) (Just startName) $ 6 caseRanges blocks endLabel }
382
381
382
+ -- We store line comments as statements, but this raises an issue: we have
383
+ -- nowhere to place comments after a SELECT CASE but before a CASE. So we drop
384
+ -- them. The inner CASES_ rule does /not/ use this, because comments can always
385
+ -- be parsed as belonging to to the above CASE block.
383
386
CASES :: { ([Maybe (AList Index A0 )], [[Block A0 ]], Maybe (Expression A0 ), SrcSpan ) }
384
- : maybe (INTEGER_LITERAL ) case ' (' INDICIES ' )' MAYBE_COMMENT NEWLINE BLOCKS CASES
387
+ : COMMENT_BLOCK CASES_ { $ 2 }
388
+ | CASES_ { $ 1 }
389
+
390
+ CASES_ :: { ([Maybe (AList Index A0 )], [[Block A0 ]], Maybe (Expression A0 ), SrcSpan ) }
391
+ : maybe (INTEGER_LITERAL ) case ' (' INDICIES ' )' MAYBE_COMMENT NEWLINE BLOCKS CASES_
385
392
{ let (scrutinees, blocks, endLabel, endSpan) = $ 9
386
393
in (Just (fromReverseList $ 4 ) : scrutinees, reverse $ 8 : blocks, endLabel, endSpan) }
387
394
| maybe (INTEGER_LITERAL ) case default MAYBE_COMMENT NEWLINE BLOCKS END_SELECT
0 commit comments