diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-12-13 10:28:39 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-12-13 10:28:39 +0000 |
commit | e7084ad5a3335a2812b9f430ed3cb1c8464cf7aa (patch) | |
tree | f34d6aa77881e7af268ea3a8628eb9fef5c872a7 /gcc/ada/prj.ads | |
parent | 3062c401ad2c0af8f48d4e22b9feea8043baef45 (diff) | |
download | gcc-e7084ad5a3335a2812b9f430ed3cb1c8464cf7aa.tar.gz |
2007-12-06 Emmanuel Briot <briot@adacore.com>
Vincent Celier <celier@adacore.com>
* prj.ads, prj.adb (Is_A_Language): Now takes a Name_Id instead of a
string
(Must_Check_Configuration, Default_Language_Is_Ada): new flags in
prj.ads
(Hash): Move instantiation of System.HTable.Hash from spec to body
(prj-nmsc.adb): Optimize calls to Name_Find when on case sensitive
systems, since we do not need to recompute the Name_Id for the canonical
file name.
(Body_Suffix_Id_Of, Spec_Suffix_Id_Of): new version that takes a name_id
as a parameter. This parameter is in fact always "ada" in all calls, and
we were doing 160560 extra calls to Name_Find to convert it to Name_Ada
while loading a project with 40000 files
* prj-attr.adb: Fix name of attribute Dependency_Driver
Change the kind of indexing for attribute Root
* prj-dect.adb (Parse_Declarative_Items): Allow redeclarations of
variables already declared, in case constructions.
* prj-env.adb (Initialize): Reset Current_Source_Path_File and
Current_Object_Path_File to No_Path.
* prj-ext.adb (Initialize_Project_Path): In multi language mode, use
ADA_PROJECT_PATH if value of GPR_PROJECT_PATH is empty.
* prj-makr.adb: new parameter Current_Dir
* prj-nmsc.ads, prj-nmsc.adb (Find_Explicit_Sources): Do not look for
Ada sources when language is not Ada.
Change Opt.Follow_Links to Opt.Follow_Links_For_Files.
(Find_Excluded_Sources, Find_Explicit_Sources): new subprograms
(Must_Check_Configuration, Default_Language_Is_Ada): new flags.
(Locate_Directory): Always resolve links when computing Canonical_Path
(Look_For_Sources): Make sure that Name_Buffer contains the file name
in Source_Files before checking for the presence of a directory
separator.
Optimize calls to Name_Find when on case sensitive systems.
(Body_Suffix_Id_Of, Spec_Suffix_Id_Of): new version that takes a name_id
as a parameter.
(Prj.Nmsc.Check): new parameter Current_Dir
(Check_Ada_Naming_Schemes): Restrictions on suffixes are relaxed. They
cannot be empty and the spec suffix cannot be the same as the body or
separate suffix.
(Get_Unit): When a file name can be of several unit kinds (spec, body or
subunit), always consider the longest suffix.
(Check_Configuration): Do not issue an error if there is no compiler
for a language. Just issue a warning and ignore the sources for the
language.
(Check_Library_Attributes): Only check Library_Dir if Library_Name is
not empty.
(Check_Naming_Schemes.Maked_Unit): Only output message if high verbosity
(Unit_Exceptions): New hash table
(Check_Naming_Schemes): Check if a file that could be a unit because of
the naming scheme is not in fact a source because there is an exception
for the unit.
(Look_For_Sources): Put the unit exceptions in hash table
Unit_Exceptions
(Get_Unit_Exceptions): Give initial value No_Source to local variable
Other_Part to avoid exception when code is compiled with validity
checking.
(Get_Sources_From_File): Check that there is no directory information
in the file names.
(Look_For_Sources): Check that there is no directory information in the
list of file names in Source_Files.
(Look_For_Sources): In multi-language mode, do not allow exception file
names that are excluded.
(Excluded_Sources_Htable): New hash table
(Search_Directories.Check_File): New procedure to simplify
Search_Directories.
(Search_Directories): Do not consider excluded sources
(Look_For_Sources): Populate Excluded_Sources_Htable before calling
Search_Directories.
(Get_Exceptions): Set component Lang_Kind of Source_Data
(Get_Unit_Exceptions): Ditto
(Search_Directories): Ditto
* prj-pars.adb: new parameter Current_Dir
* prj-part.ads, prj-part.adb:
Change Opt.Follow_Links to Opt.Follow_Links_For_Files.
(Opt.Follow_Links_For_Dirs): New flag
(Project_Path_Name_Of): Cache information returned by this routine as
Locate_Regular_File is a costly routine. The code to output a log
information and the effective call to Locate_Regular_File is now
factorized into a routine (code clean-up).
(Parse, Parse_Single_Project): new parameter Current_Dir
When main project file cannot be found, indicate in the error
message the project path that was used to do the search.
* prj-proc.ads, prj-proc.adb (Opt.Follow_Links_For_Dirs): New flag
(Prj.Proc.Process*): new parameter Current_Dir
* switch-m.adb: Change Opt.Follow_Links to Opt.Follow_Links_For_Files
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130846 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/prj.ads')
-rw-r--r-- | gcc/ada/prj.ads | 338 |
1 files changed, 251 insertions, 87 deletions
diff --git a/gcc/ada/prj.ads b/gcc/ada/prj.ads index 938b3a05033..b242c2cead8 100644 --- a/gcc/ada/prj.ads +++ b/gcc/ada/prj.ads @@ -62,6 +62,17 @@ package Prj is procedure Set_Mode (New_Mode : Mode); pragma Inline (Set_Mode); + Default_Language_Is_Ada : Boolean := True; + -- If no language was defined in the project or the configuration file, it + -- is an error, unless this variable is True, in which case it defaults to + -- Ada. Calling Set_Mode will reset this variable, default is for Ada_Only. + + Must_Check_Configuration : Boolean := False; + -- Whether the contents of the configuration file must be checked. This is + -- in general only needed by gprbuild itself, since other applications can + -- ignore such errors when they don't need to build directly. Calling + -- Set_Mode will reset this variable, default is for Ada_Only. + function In_Configuration return Boolean; pragma Inline (In_Configuration); @@ -74,8 +85,8 @@ package Prj is type Project_Tree_Data; type Project_Tree_Ref is access all Project_Tree_Data; - -- Reference to a project tree. - -- Several project trees may exist in memory at the same time. + -- Reference to a project tree. Several project trees may exist in memory + -- at the same time. No_Project_Tree : constant Project_Tree_Ref; @@ -260,24 +271,33 @@ package Prj is -- The table that contains all packages type Language_Index is new Nat; + -- Index of language data No_Language_Index : constant Language_Index := 0; + -- Constant indicating that there is no language data procedure Display_Language_Name (In_Tree : Project_Tree_Ref; Language : Language_Index); + -- Output the name of a language - type Header_Num is range 0 .. 2047; - - function Hash is new System.HTable.Hash (Header_Num => Header_Num); + type Header_Num is range 0 .. 6150; + -- Size for hash table below. The upper bound is an arbitrary value, the + -- value here was chosen after testing to determine a good compromise + -- between speed of access and memory usage. function Hash (Name : Name_Id) return Header_Num; function Hash (Name : File_Name_Type) return Header_Num; function Hash (Name : Path_Name_Type) return Header_Num; + -- Used for computing hash values for names put into above hash table type Language_Kind is (File_Based, Unit_Based); + -- Type for the kind of language. All languages are file based, except Ada + -- which is unit based. type Dependency_File_Kind is (None, Makefile, ALI_File); + -- Type of dependency to be checked: no dependency file, Makefile fragment + -- or ALI file (for Ada). Makefile_Dependency_Suffix : constant String := ".d"; ALI_Dependency_Suffix : constant String := ".ali"; @@ -345,8 +365,6 @@ package Prj is No_Source : constant Source_Id := 0; - -- All the fields in the below record should be commented ??? - type Language_Config is record Kind : Language_Kind := File_Based; -- Kind of language. All languages are file based, except Ada which is @@ -370,47 +388,104 @@ package Prj is -- shared libraries. Specified in the configuration. When not specified, -- there is no need for such switch. - Runtime_Library_Dir : Name_Id := No_Name; + Runtime_Library_Dir : Name_Id := No_Name; + -- Path name of the runtime library directory, if any Mapping_File_Switches : Name_List_Index := No_Name_List; -- The option(s) to provide a mapping file to the compiler. Specified in - -- the configuration. When not ??? + -- the configuration. When value is No_Name_List, there is no mapping + -- file. + + Mapping_Spec_Suffix : File_Name_Type := No_File; + -- Placeholder representing the spec suffix in a mapping file + + Mapping_Body_Suffix : File_Name_Type := No_File; + -- Placeholder representing the body suffix in a mapping file + + Config_File_Switches : Name_List_Index := No_Name_List; + -- The option(s) to provide a config file to the compiler. Specified in + -- the configuration. When value is No_Name_List, there is no config + -- file. + + Dependency_Kind : Dependency_File_Kind := None; + -- The kind of dependency to be checked: none, Makefile fragment or + -- ALI file (for Ada). + + Dependency_Option : Name_List_Index := No_Name_List; + -- The option(s) to be used to create the dependency file. When value is + -- No_Name_List, there is not such option(s). + + Compute_Dependency : Name_List_Index := No_Name_List; + -- Hold the value of attribute Dependency_Driver, if declared for the + -- language. - Mapping_Spec_Suffix : File_Name_Type := No_File; - Mapping_Body_Suffix : File_Name_Type := No_File; - Config_File_Switches : Name_List_Index := No_Name_List; - Dependency_Kind : Dependency_File_Kind := None; - Dependency_Option : Name_List_Index := No_Name_List; - Compute_Dependency : Name_List_Index := No_Name_List; - Include_Option : Name_List_Index := No_Name_List; + Include_Option : Name_List_Index := No_Name_List; + -- Hold the value of attribute Include_Switches, if declared for the + -- language. Include_Path : Name_Id := No_Name; - -- Name of an environment variable + -- Name of environment variable declared by attribute Include_Path for + -- the language. Include_Path_File : Name_Id := No_Name; - -- Name of an environment variable + -- Name of environment variable declared by attribute Include_Path_File + -- for the language. Objects_Path : Name_Id := No_Name; - -- Name of an environment variable + -- Name of environment variable declared by attribute Objects_Path for + -- the language. Objects_Path_File : Name_Id := No_Name; - -- Name of an environment variable + -- Name of environment variable declared by attribute Objects_Path_File + -- for the language. + + Config_Body : Name_Id := No_Name; + -- The template for a pragma Source_File_Name(_Project) for a specific + -- file name of a body. - Config_Body : Name_Id := No_Name; Config_Spec : Name_Id := No_Name; + -- The template for a pragma Source_File_Name(_Project) for a specific + -- file name of a spec. + Config_Body_Pattern : Name_Id := No_Name; + -- The template for a pragma Source_File_Name(_Project) for a naming + -- body pattern. + Config_Spec_Pattern : Name_Id := No_Name; - Config_File_Unique : Boolean := False; - Runtime_Project : Path_Name_Type := No_Path; - Binder_Driver : File_Name_Type := No_File; - Binder_Driver_Path : Path_Name_Type := No_Path; - Binder_Required_Switches : Name_List_Index := No_Name_List; - Binder_Prefix : Name_Id := No_Name; - Toolchain_Version : Name_Id := No_Name; - Toolchain_Description : Name_Id := No_Name; - PIC_Option : Name_Id := No_Name; - Objects_Generated : Boolean := True; + -- The template for a pragma Source_File_Name(_Project) for a naming + -- spec pattern. + + Config_File_Unique : Boolean := False; + -- Indicate if the config file specified to the compiler needs to be + -- unique. If it is unique, then all config files are concatenated into + -- a temp config file. + + Binder_Driver : File_Name_Type := No_File; + -- The name of the binder driver for the language, if any + + Binder_Driver_Path : Path_Name_Type := No_Path; + -- The path name of the binder driver + + Binder_Required_Switches : Name_List_Index := No_Name_List; + -- Hold the value of attribute Binder'Required_Switches for the language + + Binder_Prefix : Name_Id := No_Name; + -- Hold the value of attribute Binder'Prefixthe language + + Toolchain_Version : Name_Id := No_Name; + -- Hold the value of attribute Toolchain_Version for the language + + Toolchain_Description : Name_Id := No_Name; + -- Hold the value of attribute Toolchain_Description for the language + + PIC_Option : Name_Id := No_Name; + -- Hold the value of attribute Compiler'PIC_Option for the language + + Objects_Generated : Boolean := True; + -- Indicates if objects are generated for the language + end record; + -- Record describing the configuration of a language No_Language_Config : constant Language_Config := (Kind => File_Based, @@ -437,7 +512,6 @@ package Prj is Config_Body_Pattern => No_Name, Config_Spec_Pattern => No_Name, Config_File_Unique => False, - Runtime_Project => No_Path, Binder_Driver => No_File, Binder_Driver_Path => No_Path, Binder_Required_Switches => No_Name_List, @@ -493,30 +567,78 @@ package Prj is type Source_Kind is (Spec, Impl, Sep); - -- Following record needs full comments on every field ??? - type Source_Data is record Project : Project_Id := No_Project; + -- Project of the source + Language_Name : Name_Id := No_Name; + -- Name of the language of the source + Language : Language_Index := No_Language_Index; + -- Index of the language + + Lang_Kind : Language_Kind := File_Based; + -- Kind of the language + Alternate_Languages : Alternate_Language_Id := No_Alternate_Language; + -- List of languages a header file may also be, in addition of + -- language Language_Name. + Kind : Source_Kind := Spec; - Dependency : Dependency_File_Kind := Makefile; + -- Kind of the source: spec, body or subunit + + Dependency : Dependency_File_Kind := None; + -- Kind of dependency: none, Makefile fragment or ALI file + Other_Part : Source_Id := No_Source; + -- Source ID for the other part, if any: for a spec, indicates its body; + -- for a body, indicates its spec. + Unit : Name_Id := No_Name; + -- Name of the unit, if language is unit based + Index : Int := 0; + -- Index of the source in a multi unit source file + Locally_Removed : Boolean := False; + -- True if the source has been "excluded" + + Get_Object : Boolean := False; + -- Indicates that the object of the source should be put in the global + -- archive. This is for Ada, when only the closure of a main needs to + -- be compiled/recompiled. + Replaced_By : Source_Id := No_Source; + File : File_Name_Type := No_File; + -- Canonical file name of the source + Display_File : File_Name_Type := No_File; + -- File name of the source, for display purposes + Path : Path_Name_Type := No_Path; + -- Canonical path name of the source + Display_Path : Path_Name_Type := No_Path; + -- Path name of the source, for display purposes + Source_TS : Time_Stamp_Type := Empty_Time_Stamp; + -- Time stamp of the source file + Object_Project : Project_Id := No_Project; + -- Project where the object file is + Object_Exists : Boolean := True; + -- True if an object file exists + Object : File_Name_Type := No_File; + -- File name of the object file + Current_Object_Path : Path_Name_Type := No_Path; + -- Object path of an existing object file + Object_Path : Path_Name_Type := No_Path; + -- Object path of the real object file Object_TS : Time_Stamp_Type := Empty_Time_Stamp; -- Object file time stamp @@ -525,33 +647,49 @@ package Prj is -- Dependency file simple name Current_Dep_Path : Path_Name_Type := No_Path; + -- Path name of an existing dependency file Dep_Path : Path_Name_Type := No_Path; - -- Dependency full path name + -- Path name of the real dependency file Dep_TS : Time_Stamp_Type := Empty_Time_Stamp; -- Dependency file time stamp - Switches : File_Name_Type := No_File; - Switches_Path : Path_Name_Type := No_Path; - Switches_TS : Time_Stamp_Type := Empty_Time_Stamp; - Naming_Exception : Boolean := False; - Next_In_Sources : Source_Id := No_Source; - Next_In_Project : Source_Id := No_Source; - Next_In_Lang : Source_Id := No_Source; + Switches : File_Name_Type := No_File; + -- File name of the switches file + + Switches_Path : Path_Name_Type := No_Path; + -- Path name of the switches file + + Switches_TS : Time_Stamp_Type := Empty_Time_Stamp; + -- Switches file time stamp + + Naming_Exception : Boolean := False; + -- True if the source has an exceptional name + + Next_In_Sources : Source_Id := No_Source; + -- Link to another source in the project tree + + Next_In_Project : Source_Id := No_Source; + -- Link to another source in the project + + Next_In_Lang : Source_Id := No_Source; + -- Link to another source of the same language end record; No_Source_Data : constant Source_Data := (Project => No_Project, Language_Name => No_Name, Language => No_Language_Index, + Lang_Kind => File_Based, Alternate_Languages => No_Alternate_Language, Kind => Spec, - Dependency => Makefile, + Dependency => None, Other_Part => No_Source, Unit => No_Name, Index => 0, Locally_Removed => False, + Get_Object => False, Replaced_By => No_Source, File => No_File, Display_File => No_File, @@ -855,6 +993,11 @@ package Prj is Language : String; Naming : Naming_Data) return File_Name_Type; + function Spec_Suffix_Id_Of + (In_Tree : Project_Tree_Ref; + Language_Id : Name_Id; + Naming : Naming_Data) return File_Name_Type; + procedure Set_Spec_Suffix (In_Tree : Project_Tree_Ref; Language : String; @@ -866,6 +1009,11 @@ package Prj is Language : String; Naming : Naming_Data) return File_Name_Type; + function Body_Suffix_Id_Of + (In_Tree : Project_Tree_Ref; + Language_Id : Name_Id; + Naming : Naming_Data) return File_Name_Type; + function Body_Suffix_Of (In_Tree : Project_Tree_Ref; Language : String; @@ -1034,10 +1182,10 @@ package Prj is -- True if the project is externally built. In such case, the Project -- Manager will not modify anything in this project. - Languages : Name_List_Index := No_Name_List; + Languages : Name_List_Index := No_Name_List; -- The list of languages of the sources of this project - Config : Project_Configuration; + Config : Project_Configuration; First_Referred_By : Project_Id := No_Project; -- The project, if any, that was the first to be known as importing or @@ -1141,7 +1289,7 @@ package Prj is Ada_Sources : String_List_Id := Nil_String; -- The list of all the Ada source file names (gnatmake only). - Sources : String_List_Id := Nil_String; + Sources : String_List_Id := Nil_String; -- Identical to Ada_Sources. For upward compatibility of GPS. First_Source : Source_Id := No_Source; @@ -1207,7 +1355,7 @@ package Prj is -- The naming scheme of this project file First_Language_Processing : Language_Index := No_Language_Index; - -- Comment needed ??? + -- First index of the language data in the project Decl : Declarations := No_Declarations; -- The declarations (variables, attributes and packages) of this project @@ -1229,8 +1377,9 @@ package Prj is -- use this field directly outside of the compiler, use -- Prj.Env.Ada_Objects_Path instead. - Objects_Path : String_Access := null; - -- ??? + Objects_Path : String_Access := null; + -- The cached value of the object dir path, used during the binding + -- phase of gprbuild. Objects_Path_File_With_Libs : Path_Name_Type := No_Path; -- The cached value of the object path temp file (including library @@ -1247,13 +1396,13 @@ package Prj is -- An indication that the configuration pragmas file is a temporary file -- that must be deleted at the end. - Linker_Name : File_Name_Type := No_File; + Linker_Name : File_Name_Type := No_File; -- Value of attribute Language_Processing'Linker in the project file - Linker_Path : Path_Name_Type := No_Path; + Linker_Path : Path_Name_Type := No_Path; -- Path of linker when attribute Language_Processing'Linker is specified - Minimum_Linker_Options : Name_List_Index := No_Name_List; + Minimum_Linker_Options : Name_List_Index := No_Name_List; -- List of options specified in attribute -- Language_Processing'Minimum_Linker_Options. @@ -1280,19 +1429,32 @@ package Prj is -- True if there are comments in the project sources that cannot be kept -- in the project tree. - -- For gprmake + ------------------ + -- For gprmake -- + ------------------ Langs : Languages_In_Project := No_Languages; Supp_Languages : Supp_Language_Index := No_Supp_Language_Index; -- Indicate the different languages of the source of this project - Ada_Sources_Present : Boolean := True; - Other_Sources_Present : Boolean := True; - First_Other_Source : Other_Source_Id := No_Other_Source; - Last_Other_Source : Other_Source_Id := No_Other_Source; + Ada_Sources_Present : Boolean := True; + -- True if there are Ada sources in the project + + Other_Sources_Present : Boolean := True; + -- True if there are sources from languages other than Ada in the + -- project. + + First_Other_Source : Other_Source_Id := No_Other_Source; + -- First source of a language other than Ada + + Last_Other_Source : Other_Source_Id := No_Other_Source; + -- Last source of a language other than Ada + First_Lang_Processing : First_Language_Processing_Data := - Default_First_Language_Processing_Data; - Supp_Language_Processing : Supp_Language_Index := No_Supp_Language_Index; + Default_First_Language_Processing_Data; + Supp_Language_Processing : Supp_Language_Index := + No_Supp_Language_Index; + -- Language configurations end record; function Empty_Project (Tree : Project_Tree_Ref) return Project_Data; @@ -1307,7 +1469,9 @@ package Prj is function Is_A_Language (Tree : Project_Tree_Ref; Data : Project_Data; - Language_Name : String) return Boolean; + Language_Name : Name_Id) return Boolean; + -- Whether Language_Name is one of the languages used for the project. + -- Language_Name must be lower cased. function There_Are_Ada_Sources (In_Tree : Project_Tree_Ref; @@ -1329,12 +1493,12 @@ package Prj is type File_Name_Data is record Name : File_Name_Type := No_File; - Index : Int := 0; + Index : Int := 0; Display_Name : File_Name_Type := No_File; Path : Path_Name_Type := No_Path; Display_Path : Path_Name_Type := No_Path; - Project : Project_Id := No_Project; - Needs_Pragma : Boolean := False; + Project : Project_Id := No_Project; + Needs_Pragma : Boolean := False; end record; -- File and Path name of a spec or body @@ -1389,29 +1553,29 @@ package Prj is record -- Languages and sources of the project - First_Language : Language_Index := No_Language_Index; + First_Language : Language_Index := No_Language_Index; -- - First_Source : Source_Id := No_Source; + First_Source : Source_Id := No_Source; -- -- Tables - Languages_Data : Language_Data_Table.Instance; - Name_Lists : Name_List_Table.Instance; - String_Elements : String_Element_Table.Instance; - Variable_Elements : Variable_Element_Table.Instance; - Array_Elements : Array_Element_Table.Instance; - Arrays : Array_Table.Instance; - Packages : Package_Table.Instance; - Project_Lists : Project_List_Table.Instance; - Projects : Project_Table.Instance; - Sources : Source_Data_Table.Instance; - Alt_Langs : Alternate_Language_Table.Instance; - Units : Unit_Table.Instance; - Units_HT : Units_Htable.Instance; - Files_HT : Files_Htable.Instance; - Source_Paths_HT : Source_Paths_Htable.Instance; + Languages_Data : Language_Data_Table.Instance; + Name_Lists : Name_List_Table.Instance; + String_Elements : String_Element_Table.Instance; + Variable_Elements : Variable_Element_Table.Instance; + Array_Elements : Array_Element_Table.Instance; + Arrays : Array_Table.Instance; + Packages : Package_Table.Instance; + Project_Lists : Project_List_Table.Instance; + Projects : Project_Table.Instance; + Sources : Source_Data_Table.Instance; + Alt_Langs : Alternate_Language_Table.Instance; + Units : Unit_Table.Instance; + Units_HT : Units_Htable.Instance; + Files_HT : Files_Htable.Instance; + Source_Paths_HT : Source_Paths_Htable.Instance; -- For gprmake: @@ -1422,7 +1586,7 @@ package Prj is -- Private part - Private_Part : Private_Project_Tree_Data; + Private_Part : Private_Project_Tree_Data; end record; -- Data for a project tree @@ -1565,10 +1729,10 @@ private Ignored : constant Variable_Kind := Single; Nil_Variable_Value : constant Variable_Value := - (Project => No_Project, - Kind => Undefined, - Location => No_Location, - Default => False); + (Project => No_Project, + Kind => Undefined, + Location => No_Location, + Default => False); Virtual_Prefix : constant String := "v$"; -- The prefix for virtual extending projects. Because of the '$', which is @@ -1592,7 +1756,7 @@ private Table_Low_Bound => 1, Table_Initial => 5, Table_Increment => 100); - -- Comment ??? + -- Table storing the naming data for gnatmake/gprmake package Path_File_Table is new GNAT.Dynamic_Tables (Table_Component_Type => Path_Name_Type, |