diff options
author | Bob Duff <duff@adacore.com> | 2020-07-02 18:16:57 -0400 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-10-19 05:53:36 -0400 |
commit | 8c8b92dcc8f0b45af96aecc9e83c52175d6f4ce5 (patch) | |
tree | bfc76d6835d590f5de2dafa5009ec34f1a0e4421 /gcc/ada/par-ch4.adb | |
parent | b9d685922c7d960ab5b0beae348cfb37df08d115 (diff) | |
download | gcc-8c8b92dcc8f0b45af96aecc9e83c52175d6f4ce5.zip gcc-8c8b92dcc8f0b45af96aecc9e83c52175d6f4ce5.tar.gz gcc-8c8b92dcc8f0b45af96aecc9e83c52175d6f4ce5.tar.bz2 |
[Ada] Ada2020: matching parentheses and brackets
gcc/ada/
* par-ch4.adb (P_Aggregate_Or_Paren_Expr): Require matching
parens or brackets.
* par.adb, par-tchk.adb (T_Right_Bracket): New procedure to give
an error on missing ].
Diffstat (limited to 'gcc/ada/par-ch4.adb')
-rw-r--r-- | gcc/ada/par-ch4.adb | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/gcc/ada/par-ch4.adb b/gcc/ada/par-ch4.adb index cc5ed03..649c88e 100644 --- a/gcc/ada/par-ch4.adb +++ b/gcc/ada/par-ch4.adb @@ -1391,6 +1391,9 @@ package body Ch4 is return Maybe; end Is_Quantified_Expression; + Start_Token : constant Token_Type := Token; + -- Used to prevent mismatches (...] and [...) + -- Start of processing for P_Aggregate_Or_Paren_Expr begin @@ -1697,23 +1700,26 @@ package body Ch4 is end if; end loop; - -- All component associations (positional and named) have been scanned + -- All component associations (positional and named) have been scanned. + -- Scan ] or ) based on Start_Token. - if Token = Tok_Right_Bracket and then Ada_Version >= Ada_2020 then - Set_Component_Associations (Aggregate_Node, Assoc_List); - Set_Is_Homogeneous_Aggregate (Aggregate_Node); - Scan; -- past right bracket + case Start_Token is + when Tok_Left_Bracket => + Set_Component_Associations (Aggregate_Node, Assoc_List); + Set_Is_Homogeneous_Aggregate (Aggregate_Node); + T_Right_Bracket; - if Token = Tok_Apostrophe then - Scan; + if Token = Tok_Apostrophe then + Scan; - if Token = Tok_Identifier then - return P_Reduction_Attribute_Reference (Aggregate_Node); + if Token = Tok_Identifier then + return P_Reduction_Attribute_Reference (Aggregate_Node); + end if; end if; - end if; - else - T_Right_Paren; - end if; + when Tok_Left_Paren => + T_Right_Paren; + when others => raise Program_Error; + end case; if Nkind (Aggregate_Node) /= N_Delta_Aggregate then Set_Expressions (Aggregate_Node, Expr_List); |