diff options
-rw-r--r-- | src/files_map.adb | 27 | ||||
-rw-r--r-- | src/files_map.ads | 7 | ||||
-rw-r--r-- | src/flags.adb | 15 | ||||
-rw-r--r-- | src/types.ads | 3 | ||||
-rw-r--r-- | src/vhdl/disp_tree.adb | 3 | ||||
-rw-r--r-- | src/vhdl/errorout.adb | 34 | ||||
-rw-r--r-- | src/vhdl/errorout.ads | 4 | ||||
-rw-r--r-- | src/vhdl/parse.adb | 3 | ||||
-rw-r--r-- | src/vhdl/parse_psl.adb | 2 | ||||
-rw-r--r-- | src/vhdl/psl-errors.ads | 15 | ||||
-rw-r--r-- | src/vhdl/sem_scopes.adb | 5 |
11 files changed, 66 insertions, 52 deletions
diff --git a/src/files_map.adb b/src/files_map.adb index 641ed73e7..94ce9cb3a 100644 --- a/src/files_map.adb +++ b/src/files_map.adb @@ -807,6 +807,33 @@ package body Files_Map is end if; end Get_Time_Stamp_String; + function Image (Loc : Location_Type; Filename : Boolean := True) + return string + is + Line, Col : Natural; + Name : Name_Id; + begin + if Loc = Location_Nil then + -- Avoid a crash. + return "??:??:??"; + else + Location_To_Position (Loc, Name, Line, Col); + declare + Line_Str : constant String := Natural'Image (Line); + Col_Str : constant String := Natural'Image (Col); + begin + if Filename then + return Name_Table.Image (Name) + & ':' & Line_Str (Line_Str'First + 1 .. Line_Str'Last) + & ':' & Col_Str (Col_Str'First + 1 .. Col_Str'Last); + else + return Line_Str (Line_Str'First + 1 .. Line_Str'Last) + & ':' & Col_Str (Col_Str'First + 1 .. Col_Str'Last); + end if; + end; + end if; + end Image; + -- Debug procedures. procedure Debug_Source_Lines (File: Source_File_Entry); pragma Unreferenced (Debug_Source_Lines); diff --git a/src/files_map.ads b/src/files_map.ads index cc317fdfb..8ad5a040c 100644 --- a/src/files_map.ads +++ b/src/files_map.ads @@ -137,9 +137,10 @@ package Files_Map is Line : out Natural; Col : out Natural); - -- Get LINE and COL from LOCATION. - --procedure Get_Source_File_Line_And_Column - -- (Location: Location_Type; Line, Col: out Natural; Name : out Name_Id); + -- Return the image of LOC using the "FILENAME:LINE:COL" format or + -- "LINE:COL" format if FILENAME is false; + function Image (Loc : Location_Type; Filename : Boolean := True) + return String; -- Free all memory and reinitialize. procedure Initialize; diff --git a/src/flags.adb b/src/flags.adb index fc00368a5..4bd150124 100644 --- a/src/flags.adb +++ b/src/flags.adb @@ -40,14 +40,17 @@ package body Flags is else Flag_String (4) := 't'; end if; - if not Flag_Time_64 and Vhdl_Std = Vhdl_87 then + + if Flag_Time_64 then + -- Time_Resolution is always fs. + Flag_String (5) := '-'; + elsif Vhdl_Std = Vhdl_87 then + -- Time_Resolution is fixed in vhdl87, as time expressions are + -- locally static. Flag_String (5) := Time_Resolution; else - if Flag_Time_64 then - Flag_String (5) := '-'; - else - Flag_String (5) := '?'; - end if; + -- Time_Resolution can be changed at simulation time. + Flag_String (5) := '?'; end if; end Create_Flag_String; end Flags; diff --git a/src/types.ads b/src/types.ads index 2fa4b3ab8..e15d00ebc 100644 --- a/src/types.ads +++ b/src/types.ads @@ -119,4 +119,7 @@ package Types is -- (e.g eval_pos). In this case it is easier to raise an exception and -- let upper level subprograms handle the case. Node_Error : exception; + + -- Result of a comparaison of two numeric values. + type Order_Type is (Less, Equal, Greater); end Types; diff --git a/src/vhdl/disp_tree.adb b/src/vhdl/disp_tree.adb index 21c9d34ab..62fc3c4bf 100644 --- a/src/vhdl/disp_tree.adb +++ b/src/vhdl/disp_tree.adb @@ -21,7 +21,6 @@ with Ada.Text_IO; use Ada.Text_IO; with Name_Table; with Tokens; -with Errorout; with Files_Map; with PSL.Dump_Tree; with Nodes_Meta; @@ -309,7 +308,7 @@ package body Disp_Tree is function Image_Location_Type (Loc : Location_Type) return String is begin - return Errorout.Get_Location_Str (Loc); + return Files_Map.Image (Loc); end Image_Location_Type; function Image_Iir_Direction (Dir : Iir_Direction) return String is diff --git a/src/vhdl/errorout.adb b/src/vhdl/errorout.adb index 877fea25d..a36412009 100644 --- a/src/vhdl/errorout.adb +++ b/src/vhdl/errorout.adb @@ -832,41 +832,9 @@ package body Errorout is -- Disp a node location. -- Used for output of message. - function Get_Location_Str - (Name : Name_Id; Line, Col : Natural; Filename : Boolean) - return String - is - Line_Str : constant String := Natural'Image (Line); - Col_Str : constant String := Natural'Image (Col); - begin - if Filename then - return Name_Table.Image (Name) - & ':' & Line_Str (Line_Str'First + 1 .. Line_Str'Last) - & ':' & Col_Str (Col_Str'First + 1 .. Col_Str'Last); - else - return Line_Str (Line_Str'First + 1 .. Line_Str'Last) - & ':' & Col_Str (Col_Str'First + 1 .. Col_Str'Last); - end if; - end Get_Location_Str; - - function Get_Location_Str (Loc : Location_Type; Filename : Boolean := True) - return string - is - Line, Col : Natural; - Name : Name_Id; - begin - if Loc = Location_Nil then - -- Avoid a crash. - return "??:??:??"; - else - Location_To_Position (Loc, Name, Line, Col); - return Get_Location_Str (Name, Line, Col, Filename); - end if; - end Get_Location_Str; - function Disp_Location (Node: Iir) return String is begin - return Get_Location_Str (Get_Location (Node)); + return Image (Get_Location (Node)); end Disp_Location; function Disp_Name (Kind : Iir_Kind) return String is diff --git a/src/vhdl/errorout.ads b/src/vhdl/errorout.ads index ce694fe37..e0625993e 100644 --- a/src/vhdl/errorout.ads +++ b/src/vhdl/errorout.ads @@ -92,10 +92,8 @@ package Errorout is -- Disp a node location. -- Used for output of message. function Disp_Location (Node: Iir) return String; - function Get_Location_Str (Loc : Location_Type; Filename : Boolean := True) - return String; - -- Disp non-terminal name from KIND. + -- Disp non-terminal name from KIND. function Disp_Name (Kind : Iir_Kind) return String; -- SUBPRG must be a subprogram declaration or an enumeration literal diff --git a/src/vhdl/parse.adb b/src/vhdl/parse.adb index 3ad8c1148..d94f4bb7b 100644 --- a/src/vhdl/parse.adb +++ b/src/vhdl/parse.adb @@ -27,6 +27,7 @@ with Flags; use Flags; with Parse_Psl; with Name_Table; with Str_Table; +with Files_Map; use Files_Map; with Xrefs; -- Recursive descendant parser. @@ -3874,7 +3875,7 @@ package body Parse is -- FIXME: in case of multiple missing parenthesises, several -- messages will be displayed Error_Msg_Parse ("missing ')' for opening parenthesis at " - & Get_Location_Str (Loc, Filename => False)); + & Image (Loc, Filename => False)); return Expr; when others => -- Surely a parse error... diff --git a/src/vhdl/parse_psl.adb b/src/vhdl/parse_psl.adb index b71dc745f..506218ade 100644 --- a/src/vhdl/parse_psl.adb +++ b/src/vhdl/parse_psl.adb @@ -348,7 +348,7 @@ package body Parse_Psl is Res := Parse_FL_Property (Prio_Lowest); if Current_Token /= Tok_Right_Paren then Error_Msg_Parse ("missing matching ')' for '(' at line " - & Get_Location_Str (Loc, False)); + & Image (Loc, False)); else Scan; end if; diff --git a/src/vhdl/psl-errors.ads b/src/vhdl/psl-errors.ads index e99bb7de6..7742dcfef 100644 --- a/src/vhdl/psl-errors.ads +++ b/src/vhdl/psl-errors.ads @@ -1,3 +1,16 @@ +with Types; use Types; with Errorout; +with Files_Map; -package PSL.Errors renames Errorout; +package PSL.Errors is + function Image (Loc : Location_Type; Filename : Boolean := True) + return String renames Files_Map.Image; + + procedure Error_Kind (Msg : String; N : PSL_Node) renames + Errorout.Error_Kind; + + procedure Error_Msg_Parse (Msg: String) + renames Errorout.Error_Msg_Parse; + procedure Error_Msg_Sem (Msg: String; Loc: PSL_Node) + renames Errorout.Error_Msg_Sem; +end PSL.Errors; diff --git a/src/vhdl/sem_scopes.adb b/src/vhdl/sem_scopes.adb index f77e6e827..cdc35afc9 100644 --- a/src/vhdl/sem_scopes.adb +++ b/src/vhdl/sem_scopes.adb @@ -19,6 +19,7 @@ with Ada.Text_IO; with GNAT.Table; with Flags; use Flags; with Name_Table; -- use Name_Table; +with Files_Map; use Files_Map; with Errorout; use Errorout; with Iirs_Utils; use Iirs_Utils; @@ -1277,7 +1278,7 @@ package body Sem_Scopes is Put (": "); Decl := Get_Declaration (Inter); Put (Iir_Kind'Image (Get_Kind (Decl))); - Put_Line (", loc: " & Get_Location_Str (Get_Location (Decl))); + Put_Line (", loc: " & Image (Get_Location (Decl))); if Get_Kind (Decl) in Iir_Kinds_Subprogram_Declaration then Put_Line (" " & Disp_Subprg (Decl)); end if; @@ -1335,7 +1336,7 @@ package body Sem_Scopes is Put (": "); Decl := Get_Declaration (Inter); Put (Iir_Kind'Image (Get_Kind (Decl))); - Put_Line (", loc: " & Get_Location_Str (Get_Location (Decl))); + Put_Line (", loc: " & Image (Get_Location (Decl))); if Get_Kind (Decl) in Iir_Kinds_Subprogram_Declaration then Put_Line (" " & Disp_Subprg (Decl)); end if; |