diff options
Diffstat (limited to 'ortho/oread/ortho_front.adb')
-rw-r--r-- | ortho/oread/ortho_front.adb | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/ortho/oread/ortho_front.adb b/ortho/oread/ortho_front.adb index cea43cdd1..e29dfeb08 100644 --- a/ortho/oread/ortho_front.adb +++ b/ortho/oread/ortho_front.adb @@ -2020,24 +2020,29 @@ package body Ortho_Front is loop exit when Tok = Tok_End; Expect (Tok_When); - Start_Choice (Case_Blk); Next_Token; - if Tok = Tok_Default then - New_Default_Choice (Case_Blk); - Next_Token; - else - L := Parse_Typed_Literal (Choice_Type); - if Tok = Tok_Elipsis then + Start_Choice (Case_Blk); + loop + if Tok = Tok_Default then + New_Default_Choice (Case_Blk); Next_Token; - New_Range_Choice - (Case_Blk, L, Parse_Typed_Literal (Choice_Type)); else - New_Expr_Choice (Case_Blk, L); + L := Parse_Typed_Literal (Choice_Type); + if Tok = Tok_Elipsis then + Next_Token; + New_Range_Choice + (Case_Blk, L, Parse_Typed_Literal (Choice_Type)); + else + New_Expr_Choice (Case_Blk, L); + end if; end if; - end if; - Finish_Choice (Case_Blk); - Expect (Tok_Arrow); + exit when Tok = Tok_Arrow; + Expect (Tok_Comma); + Next_Token; + end loop; + -- Skip '=>'. Next_Token; + Finish_Choice (Case_Blk); Parse_Statements; end loop; Finish_Case_Stmt (Case_Blk); |