package body Mains is
+ type File_And_Loc is record
+ File_Name : File_Name_Type;
+ Location : Source_Ptr := No_Location;
+ end record;
+
package Names is new Table.Table
- (Table_Component_Type => File_Name_Type,
+ (Table_Component_Type => File_And_Loc,
Table_Index_Type => Integer,
Table_Low_Bound => 1,
Table_Initial => 10,
Name_Len := 0;
Add_Str_To_Name_Buffer (Name);
Names.Increment_Last;
- Names.Table (Names.Last) := Name_Find;
+ Names.Table (Names.Last) := (Name_Find, No_Location);
end Add_Main;
------------
Mains.Reset;
end Delete;
+ ------------------
+ -- Get_Location --
+ ------------------
+
+ function Get_Location return Source_Ptr is
+ begin
+ if Current < Names.First or else Current > Names.Last then
+ return No_Location;
+
+ else
+ return Names.Table (Current).Location;
+ end if;
+ end Get_Location;
+
---------------
-- Next_Main --
---------------
else
Current := Current + 1;
- return Get_Name_String (Names.Table (Current));
+ return Get_Name_String (Names.Table (Current).File_Name);
end if;
end Next_Main;
Current := 0;
end Reset;
+ ------------------
+ -- Set_Location --
+ ------------------
+
+ procedure Set_Location (Location : Source_Ptr) is
+ begin
+ if Names.Last > 0 then
+ Names.Table (Names.Last).Location := Location;
+ end if;
+ end Set_Location;
+
+ -----------------
+ -- Update_Main --
+ -----------------
+
+ procedure Update_Main (Name : String) is
+ begin
+ if Current >= Names.First and then Current <= Names.Last then
+ Name_Len := 0;
+ Add_Str_To_Name_Buffer (Name);
+ Names.Table (Current).File_Name := Name_Find;
+ end if;
+ end Update_Main;
end Mains;
----------
procedure Add_Main (Name : String);
-- Add one main to the table
+ procedure Set_Location (Location : Source_Ptr);
+ -- Set the location of the last main added. By default, the location is
+ -- No_Location.
+
procedure Delete;
-- Empty the table
-- Increase the index and return the next main.
-- If table is exhausted, return an empty string.
+ function Get_Location return Source_Ptr;
+ -- Get the location of the current main
+
+ procedure Update_Main (Name : String);
+ -- Update the file name of the current main
+
function Number_Of_Mains return Natural;
-- Returns the number of mains added with Add_Main since the last call
-- to Delete.