aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vhdl/vhdl-parse.adb28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/vhdl/vhdl-parse.adb b/src/vhdl/vhdl-parse.adb
index 1d981b841..b67545779 100644
--- a/src/vhdl/vhdl-parse.adb
+++ b/src/vhdl/vhdl-parse.adb
@@ -6607,6 +6607,24 @@ package body Vhdl.Parse is
return Res;
end Parse_Expression;
+ -- Like Parse_Expression, but assumed the expression is followed by a
+ -- reserved identifier. As a result, it will diagnoses extra parentheses.
+ function Parse_Expression_Keyword return Iir
+ is
+ Res : Iir;
+ begin
+ Res := Parse_Expression;
+
+ if Current_Token = Tok_Right_Paren then
+ Error_Msg_Parse ("extra ')' ignored");
+
+ -- Skip ')'.
+ Scan;
+ end if;
+
+ return Res;
+ end Parse_Expression_Keyword;
+
-- precond : next token
-- postcond: next token.
--
@@ -7138,14 +7156,10 @@ package body Vhdl.Parse is
Clause := Res;
loop
- Set_Condition (Clause, Parse_Expression);
+ Set_Condition (Clause, Parse_Expression_Keyword);
Then_Loc := Get_Token_Location;
- if Current_Token = Tok_Then then
- -- Eat 'then'.
- Scan;
- else
- Expect_Error (Tok_Then, "'then' is expected here");
- end if;
+ -- Eat 'then'.
+ Expect_Scan (Tok_Then, "'then' is expected here");
Set_Sequential_Statement_Chain
(Clause, Parse_Sequential_Statements (Res));