diff options
author | Tristan Gingold <tgingold@free.fr> | 2021-08-30 08:12:26 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2021-08-30 08:12:26 +0200 |
commit | 852f4310b717765360f5d3bf575d40af5769f70d (patch) | |
tree | d3ea3da1d6152b6a14ca71f24cc8f03139dc3101 /src/vhdl/vhdl-parse_psl.adb | |
parent | 7b0195b5e706502a1d564f31867b02bf2a8a27bb (diff) | |
download | ghdl-852f4310b717765360f5d3bf575d40af5769f70d.tar.gz ghdl-852f4310b717765360f5d3bf575d40af5769f70d.tar.bz2 ghdl-852f4310b717765360f5d3bf575d40af5769f70d.zip |
vhdl and psl: parse sync_abort and async_abort. For #1654
Diffstat (limited to 'src/vhdl/vhdl-parse_psl.adb')
-rw-r--r-- | src/vhdl/vhdl-parse_psl.adb | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/vhdl/vhdl-parse_psl.adb b/src/vhdl/vhdl-parse_psl.adb index 808c2dae7..e456514bf 100644 --- a/src/vhdl/vhdl-parse_psl.adb +++ b/src/vhdl/vhdl-parse_psl.adb @@ -812,6 +812,8 @@ package body Vhdl.Parse_Psl is | N_Endpoint_Instance | N_Strong | N_Abort + | N_Async_Abort + | N_Sync_Abort | N_Next_Event_E | N_Next_Event_A | N_Next_Event @@ -864,6 +866,18 @@ package body Vhdl.Parse_Psl is end case; end Property_To_Sequence; + function Parse_Abort (Kind : Nkind; Left : Node) return Node + is + N : Node; + begin + N := Create_Node_Loc (Kind); + Set_Property (N, Left); + Scan; + Set_Boolean (N, Parse_Boolean (Prio_Lowest)); + -- Left associative. + return N; + end Parse_Abort; + -- A.4.4 PSL properties -- FL_Property::= -- Boolean @@ -959,12 +973,17 @@ package body Vhdl.Parse_Psl is if Prio > Prio_FL_Abort then return Res; end if; - N := Create_Node_Loc (N_Abort); - Set_Property (N, Res); - Scan; - Set_Boolean (N, Parse_Boolean (Prio_Lowest)); - -- Left associative. - return N; + return Parse_Abort (N_Abort, Res); + when Tok_Sync_Abort => + if Prio > Prio_FL_Abort then + return Res; + end if; + return Parse_Abort (N_Sync_Abort, Res); + when Tok_Async_Abort => + if Prio > Prio_FL_Abort then + return Res; + end if; + return Parse_Abort (N_Async_Abort, Res); when Tok_Exclam_Mark => N := Create_Node_Loc (N_Strong); Set_Property (N, Res); |