diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-07-23 12:40:49 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-07-23 12:40:49 +0000 |
commit | d4734f07090a18288522e64fce2c6dce6ce13c4b (patch) | |
tree | 17f045de35db5bae027e8f0c34e4d9eee3e199b8 /gcc/ada/par-ch4.adb | |
parent | ca932a144d2bbe1103399cfeccccf5ef90de28e3 (diff) | |
download | gcc-d4734f07090a18288522e64fce2c6dce6ce13c4b.tar.gz |
2009-07-23 Robert Dewar <dewar@adacore.com>
* par-ch4.adb (P_Aggregate_Or_Paren_Expr): Better message for missing
comma.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@150003 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/par-ch4.adb')
-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 0d8e33cf7d7..f07f54e5098 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; |