aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2018-11-14 18:36:22 +0100
committerTristan Gingold <tgingold@free.fr>2018-11-14 18:36:22 +0100
commite9b528294b94f62d07384859680f1f45ae5e9d6c (patch)
treead95ca9641a03453dcd0f900d5c5e2090e3b9d0a /src/vhdl
parentb6c523106ab498375a7874923742c6b806700a9a (diff)
downloadghdl-e9b528294b94f62d07384859680f1f45ae5e9d6c.tar.gz
ghdl-e9b528294b94f62d07384859680f1f45ae5e9d6c.tar.bz2
ghdl-e9b528294b94f62d07384859680f1f45ae5e9d6c.zip
parse: strenghten.
Diffstat (limited to 'src/vhdl')
-rw-r--r--src/vhdl/parse.adb25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/vhdl/parse.adb b/src/vhdl/parse.adb
index 5048719de..4ac5e0f2a 100644
--- a/src/vhdl/parse.adb
+++ b/src/vhdl/parse.adb
@@ -6180,13 +6180,14 @@ package body Parse is
when Iir_Kind_Simple_Name
| Iir_Kind_Selected_Name =>
Set_Prefix (Call, Name);
- when Iir_Kind_Attribute_Name =>
- Error_Msg_Parse ("attribute cannot be used as procedure call");
when Iir_Kind_String_Literal8 =>
Error_Msg_Parse
("string or operator cannot be used as procedure call");
- when Iir_Kind_Selected_By_All_Name =>
- Error_Msg_Parse ("invalid procedure name or missing assignment");
+ when Iir_Kind_Selected_By_All_Name
+ | Iir_Kind_Qualified_Expression
+ | Iir_Kind_Attribute_Name =>
+ Error_Msg_Parse
+ ("invalid name for a procedure call or missing assignment");
when others =>
Error_Kind ("parenthesis_name_to_procedure_call", Name);
end case;
@@ -7327,10 +7328,20 @@ package body Parse is
Set_Entity_Name (Res, Parse_Name (False));
if Current_Token = Tok_Left_Paren then
- Scan_Expect (Tok_Identifier);
- Set_Architecture (Res, Current_Text);
- Scan_Expect (Tok_Right_Paren);
+ -- Skip '('.
Scan;
+
+ if Current_Token = Tok_Identifier then
+ Set_Architecture (Res, Current_Text);
+
+ -- Skip identifier.
+ Scan;
+ else
+ Expect (Tok_Identifier, "identifier for architecture");
+ end if;
+
+ -- Skip ')'.
+ Expect_Scan (Tok_Right_Paren);
end if;
return Res;