diff options
author | Robert Dewar <dewar@adacore.com> | 2009-07-23 14:40:49 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2009-07-23 14:40:49 +0200 |
commit | e0dc6003fc81c6f839159f8f32944de2cd771afa (patch) | |
tree | 17f045de35db5bae027e8f0c34e4d9eee3e199b8 /gcc/ada | |
parent | 1646c9479cc2c04f2462a91ade8569ba0a81b629 (diff) | |
download | gcc-e0dc6003fc81c6f839159f8f32944de2cd771afa.zip gcc-e0dc6003fc81c6f839159f8f32944de2cd771afa.tar.gz gcc-e0dc6003fc81c6f839159f8f32944de2cd771afa.tar.bz2 |
par-ch4.adb (P_Aggregate_Or_Paren_Expr): Better message for missing comma.
2009-07-23 Robert Dewar <dewar@adacore.com>
* par-ch4.adb (P_Aggregate_Or_Paren_Expr): Better message for missing
comma.
From-SVN: r150003
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/par-ch4.adb | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/gcc/ada/par-ch4.adb b/gcc/ada/par-ch4.adb index 0d8e33c..f07f54e 100644 --- a/gcc/ada/par-ch4.adb +++ b/gcc/ada/par-ch4.adb @@ -458,7 +458,7 @@ package body Ch4 is loop Discard_Junk_Node (P_Expression_If_OK); - exit when not Comma_Present; + exit when not Comma_Present; end loop; T_Right_Paren; @@ -1391,6 +1391,19 @@ package body Ch4 is Append (Expr_Node, Expr_List); + -- Check for aggregate followed by left parent, maybe missing comma + + elsif Nkind (Expr_Node) = N_Aggregate + and then Token = Tok_Left_Paren + then + T_Comma; + + if No (Expr_List) then + Expr_List := New_List; + end if; + + Append (Expr_Node, Expr_List); + -- Anything else is assumed to be a named association else @@ -2093,8 +2106,18 @@ package body Ch4 is if not Token_Is_At_Start_Of_Line and then Token not in Token_Class_Sterm then - Error_Msg_AP ("binary operator expected"); + -- Normally the right error message is indeed that we expected a + -- binary operator, but in the case of being between a right and left + -- paren, e.g. in an aggregate, a more likely error is missing comma. + + if Prev_Token = Tok_Right_Paren and then Token = Tok_Left_Paren then + T_Comma; + else + Error_Msg_AP ("binary operator expected"); + end if; + raise Error_Resync; + else return Node1; end if; |