aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2018-12-17 07:46:56 +0100
committerTristan Gingold <tgingold@free.fr>2018-12-17 07:46:56 +0100
commitad35e3e0d33ff08872c73ee810c2bbf34bd788ef (patch)
tree3e30ab7f6e719df9faccc029a6b37851b60107ff /src
parentc1e163cd3ac2b23455ac44af39917fd5d5e0edd4 (diff)
downloadghdl-ad35e3e0d33ff08872c73ee810c2bbf34bd788ef.tar.gz
ghdl-ad35e3e0d33ff08872c73ee810c2bbf34bd788ef.tar.bz2
ghdl-ad35e3e0d33ff08872c73ee810c2bbf34bd788ef.zip
parse: improve error recovery.
Diffstat (limited to 'src')
-rw-r--r--src/vhdl/parse.adb23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/vhdl/parse.adb b/src/vhdl/parse.adb
index ade7b840a..477ead805 100644
--- a/src/vhdl/parse.adb
+++ b/src/vhdl/parse.adb
@@ -217,7 +217,7 @@ package body Parse is
end if;
end Check_End_Name;
- procedure Eat_Tokens_Until_Semi_Colon is
+ procedure Skip_Until_Semi_Colon is
begin
loop
case Current_Token is
@@ -228,7 +228,7 @@ package body Parse is
Scan;
end case;
end loop;
- end Eat_Tokens_Until_Semi_Colon;
+ end Skip_Until_Semi_Colon;
procedure Resync_To_End_Of_Statement is
begin
@@ -2420,6 +2420,7 @@ package body Parse is
("secondary units may only be defined by an integer");
when others =>
Error_Msg_Parse ("a physical literal is expected here");
+ Skip_Until_Semi_Colon;
end case;
end if;
Append (Last, Res, Unit);
@@ -3160,12 +3161,12 @@ package body Parse is
-- TODO
Error_Msg_Parse ("array nature definition not supported");
Def := Null_Iir;
- Eat_Tokens_Until_Semi_Colon;
+ Skip_Until_Semi_Colon;
when Tok_Record =>
-- TODO
Error_Msg_Parse ("record nature definition not supported");
Def := Null_Iir;
- Eat_Tokens_Until_Semi_Colon;
+ Skip_Until_Semi_Colon;
when Tok_Identifier =>
Def := Create_Iir (Iir_Kind_Scalar_Nature_Definition);
Set_Location (Def, Loc);
@@ -3189,15 +3190,15 @@ package body Parse is
Scan;
else
Expect (Tok_Reference, "'reference' expected");
- Eat_Tokens_Until_Semi_Colon;
+ Skip_Until_Semi_Colon;
end if;
else
Error_Msg_Parse ("reference identifier expected");
- Eat_Tokens_Until_Semi_Colon;
+ Skip_Until_Semi_Colon;
end if;
when others =>
Error_Msg_Parse ("nature definition expected here");
- Eat_Tokens_Until_Semi_Colon;
+ Skip_Until_Semi_Colon;
end case;
Decl := Create_Iir (Iir_Kind_Nature_Declaration);
@@ -3391,7 +3392,7 @@ package body Parse is
Kind := Iir_Kind_Through_Quantity_Declaration;
when others =>
Error_Msg_Parse ("'across' or 'through' expected here");
- Eat_Tokens_Until_Semi_Colon;
+ Skip_Until_Semi_Colon;
return Null_Iir;
end case;
@@ -3492,7 +3493,7 @@ package body Parse is
when others =>
Error_Msg_Parse ("missing type or across/throught aspect "
& "in quantity declaration");
- Eat_Tokens_Until_Semi_Colon;
+ Skip_Until_Semi_Colon;
return Null_Iir;
end case;
@@ -8632,7 +8633,7 @@ package body Parse is
Stmt := Parse_Concurrent_Conditional_Signal_Assignment (Id);
else
Error_Msg_Parse ("'<=' expected after aggregate");
- Eat_Tokens_Until_Semi_Colon;
+ Skip_Until_Semi_Colon;
end if;
when Tok_Process =>
Stmt := Parse_Process_Statement (Label, Loc, Postponed);
@@ -8694,7 +8695,7 @@ package body Parse is
-- instead of 'unexpected token 'signal' in conc stmt list'
-- report: 'signal declarations are not allowed in conc stmt'
Unexpected ("concurrent statement list");
- Eat_Tokens_Until_Semi_Colon;
+ Skip_Until_Semi_Colon;
if Current_Token = Tok_Semi_Colon then
Scan;
end if;