aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/prj-strt.adb
diff options
context:
space:
mode:
authorVincent Celier <celier@adacore.com>2005-03-15 16:46:57 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2005-03-15 16:46:57 +0100
commit7e98a4c668eac2b10f06ff207a24d2ca4e867128 (patch)
treecf1142dd403f99e75300ca6822d5c4d182a98b74 /gcc/ada/prj-strt.adb
parent0ca89db7aa51322aa15f6d89b692b20ad5898c89 (diff)
downloadgcc-7e98a4c668eac2b10f06ff207a24d2ca4e867128.zip
gcc-7e98a4c668eac2b10f06ff207a24d2ca4e867128.tar.gz
gcc-7e98a4c668eac2b10f06ff207a24d2ca4e867128.tar.bz2
mlib-tgt-tru64.adb, [...] (Library_Exist_For, [...]): Add new parameter In_Tree to specify the project tree...
2005-03-08 Vincent Celier <celier@adacore.com> * mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb, mlib-tgt-hpux.adb, mlib-tgt-linux.adb, mlib-tgt-solaris.adb, mlib-tgt-vms-alpha.adb, mlib-tgt-vms-ia64.adb, mlib-tgt-mingw.adb, mlib-tgt-vxworks.adb, mlib-tgt-lynxos.adb (Library_Exist_For, Library_File_Name_For): Add new parameter In_Tree to specify the project tree: needed by the project manager. Adapt to changes in project manager using new parameter In_Tree. Remove local imports, use functions in System.CRTL. * make.adb, clean.adb, gnatcmd.adb (Project_Tree): New constant needed to use the project manager. * makeutl.ads, makeutl.adb (Linker_Options_Switches): New parameter In_Tree to designate the project tree. Adapt to changes in the project manager, using In_Tree. * mlib-prj.ads, mlib-prj.adb (Build_Library, Check_Library, Copy_Interface_Sources): Add new parameter In_Tree to specify the project tree: needed by the project manager. (Build_Library): Check that Arg'Length >= 6 before checking if it contains "--RTS=...". * mlib-tgt.ads, mlib-tgt.adb (Library_Exist_For, Library_File_Name_For): Add new parameter In_Tree to specify the project tree: needed by the project manager. * prj.ads, prj.adb: Major modifications to allow several project trees in memory at the same time. Change tables to dynamic tables and hash tables to dynamic hash tables. Move tables and hash tables from Prj.Com (in the visible part) and Prj.Env (in the private part). Move some constants from the visible part to the private part. Make other constants deferred. (Project_Empty): Make it a variable, not a function (Empty_Project): Add parameter Tree. Returns the data with the default naming data of the project tree Tree. (Initialize): After updating Std_Naming_Data, copy its value to the component Naming of Project Empty. (Register_Default_Naming_Scheme): Use and update the default naming component of the project tree, instead of the global variable Std_Naming_Data. (Standard_Naming_Data): Add defaulted parameter Tree. If project tree Tree is not defaulted, return the default naming data of the Tree. (Initial_Buffer_Size): Constant moved from private part (Default_Ada_Spec_Suffix_Id, Default_Ada_Body_Suffix_Id, Slash_Id); new variables initialized in procedure Initialize. (Add_To_Buffer): Add two in out parameters to replace global variables Buffer and Buffer_Last. (Default_Ada_Spec_Suffix, Default_Body_Spec_Suffix, Slash): New functions. Adapt to changes to use new type Project_Tree_Ref and dynamic tables and hash tables. (Initialize, Reset, register-Default_Namng-Scheme): Add a new parameter for the project tree. (Project_Tree_Data, Project_Tree_Ref, No_Project): Declare types and constant at the beginning of the package spec, so that they cane be used in subprograms before their full declarations. (Standard_Naming_Data): Add defaulted parameter of type Project_Node_Ref (Empty_Project): Add parameter of type Project_Node_Ref (Private_Project_Tree_Data): Add component Default_Naming of type Naming_Data. (Buffer, Buffer_Last): remove global variables (Add_To_Buffer): Add two in out parameters to replace global variables Buffer and Buffer_Last. (Current_Packages_To_Check): Remove global variable (Empty_Name): Move to private part (No-Symbols): Make it a constant (Private_Project_Tree_Data): New type for the private part of the project tree data. (Project_Tree_Data): New type for the data of a project tree (Project_Tree_Ref): New type to designate a project tree (Initialize, Reset, register-Default_Namng-Scheme): Add a new parameter for the project tree. * prj-attr.ads: Add with Table; needed, as package Prj no longer imports package Table. * prj-com.adb: Remove empty, no longer needed body * prj-com.ads: Move most of the content of this package to package Prj. * prj-dect.ads, prj-dect.adb (Parse): New parameters In_Tree to designate the project node tree and Packages_To_Check to replace global variable Current_Packages_To_Check. Add new parameters In_Tree and Packages_To_Check to local subprograms, when needed. Adapt to changes in project manager with project node tree In_Tree. * prj-env.ads, prj-env.adb: Add new parameter In_Tree to designate the project tree to most subprograms. Move tables and hash tables to private part of package Prj. Adapt to changes in project manager using project tree In_Tree. * prj-makr.adb (Tree): New constant to designate the project node tree Adapt to change in project manager using project node tree Tree * prj-nmsc.ads, prj-nmsc.adb (Check_Stand_Alone_Library): Correctly display the Library_Src_Dir and the Library_Dir. Add new parameter In_Tree to designate the project node tree to most subprograms. Adapt to changes in the project manager, using project tree In_Tree. (Check_Naming_Scheme): Do not alter the casing on platforms where the casing of file names is not significant. (Check): Add new parameter In_Tree to designate the * prj-pars.ads, prj-pars.adb (Parse): Add new parameter In_Tree to designate the project tree. Declare a project node tree to call Prj.Part.Parse and Prj.Proc.Process * prj-part.ads, prj-part.adb (Buffer, Buffer_Last): Global variables, to replace those that were in the private part of package Prj. Add new parameter In__Tree to designate the project node tree to most subprograms. Adapt to change in Prj.Tree with project node tree In_Tree. (Post_Parse_Context_Clause): When specifying the project node of a with clause, indicate that it is a limited with only if there is "limited" in the with clause, not necessarily when In_Limited is True. (Parse): Add new parameter In_Tree to designate the project node tree * prj-pp.ads, prj-pp.adb (Pretty_Print): Add new parameter In_Tree to designate the project node tree. Adapt to change in Prj.Tree with project node tree In_Tree. * prj-proc.ads, prj-proc.adb (Recursive_Process): Specify the project tree In_Tree in the call to function Empty_Process to give its initial value to the project data Processed_Data. Add new parameters In_Tree to designate the project tree and From_Project_Node_Tree to designate the project node tree to several subprograms. Adapt to change in project manager with project tree In_Tree and project node tree From_Project_Node_Tree. * prj-strt.ads, prj-strt.adb (Buffer, Buffer_Last): Global variables, to replace those that were in the private part of package Prj. Add new parameter In_Tree to designate the project node tree to most subprograms. Adapt to change in Prj.Tree with project node tree In_Tree. * prj-tree.ads, prj-tree.adb: Add new parameter of type Project_Node_Tree_Ref to most subprograms. Use this new parameter to store project nodes in the designated project node tree. (Project_Node_Tree_Ref): New type to designate a project node tree (Tree_Private_Part): Change table to dynamic table and hash tables to dynamic hash tables. * prj-util.ads, prj-util.adb: Add new parameter In_Tree to designate the project tree to most subprograms. Adapt to changes in project manager using project tree In_Tree. * makegpr.adb (Project_Tree): New constant needed to use project manager. From-SVN: r96481
Diffstat (limited to 'gcc/ada/prj-strt.adb')
-rw-r--r--gcc/ada/prj-strt.adb423
1 files changed, 250 insertions, 173 deletions
diff --git a/gcc/ada/prj-strt.adb b/gcc/ada/prj-strt.adb
index b11124a..ae7941c 100644
--- a/gcc/ada/prj-strt.adb
+++ b/gcc/ada/prj-strt.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2004 Free Software Foundation, Inc. --
+-- Copyright (C) 2001-2005 Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -37,6 +37,9 @@ with Uintp; use Uintp;
package body Prj.Strt is
+ Buffer : String_Access;
+ Buffer_Last : Natural := 0;
+
type Choice_String is record
The_String : Name_Id;
Already_Used : Boolean := False;
@@ -102,18 +105,22 @@ package body Prj.Strt is
procedure Add_To_Names (NL : Name_Location);
-- Add one single names to table Names
- procedure External_Reference (External_Value : out Project_Node_Id);
+ procedure External_Reference
+ (In_Tree : Project_Node_Tree_Ref;
+ External_Value : out Project_Node_Id);
-- Parse an external reference. Current token is "external".
procedure Attribute_Reference
- (Reference : out Project_Node_Id;
+ (In_Tree : Project_Node_Tree_Ref;
+ Reference : out Project_Node_Id;
First_Attribute : Attribute_Node_Id;
Current_Project : Project_Node_Id;
Current_Package : Project_Node_Id);
-- Parse an attribute reference. Current token is an apostrophe.
procedure Terms
- (Term : out Project_Node_Id;
+ (In_Tree : Project_Node_Tree_Ref;
+ Term : out Project_Node_Id;
Expr_Kind : in out Variable_Kind;
Current_Project : Project_Node_Id;
Current_Package : Project_Node_Id;
@@ -148,7 +155,8 @@ package body Prj.Strt is
-------------------------
procedure Attribute_Reference
- (Reference : out Project_Node_Id;
+ (In_Tree : Project_Node_Tree_Ref;
+ Reference : out Project_Node_Id;
First_Attribute : Attribute_Node_Id;
Current_Project : Project_Node_Id;
Current_Package : Project_Node_Id)
@@ -158,9 +166,11 @@ package body Prj.Strt is
begin
-- Declare the node of the attribute reference
- Reference := Default_Project_Node (Of_Kind => N_Attribute_Reference);
- Set_Location_Of (Reference, To => Token_Ptr);
- Scan; -- past apostrophe
+ Reference :=
+ Default_Project_Node
+ (Of_Kind => N_Attribute_Reference, In_Tree => In_Tree);
+ Set_Location_Of (Reference, In_Tree, To => Token_Ptr);
+ Scan (In_Tree); -- past apostrophe
-- Body may be an attribute name
@@ -172,7 +182,7 @@ package body Prj.Strt is
Expect (Tok_Identifier, "identifier");
if Token = Tok_Identifier then
- Set_Name_Of (Reference, To => Token_Name);
+ Set_Name_Of (Reference, In_Tree, To => Token_Name);
-- Check if the identifier is one of the attribute identifiers in the
-- context (package or project level attributes).
@@ -189,22 +199,23 @@ package body Prj.Strt is
-- Scan past the attribute name
- Scan;
+ Scan (In_Tree);
else
-- Give its characteristics to this attribute reference
- Set_Project_Node_Of (Reference, To => Current_Project);
- Set_Package_Node_Of (Reference, To => Current_Package);
+ Set_Project_Node_Of (Reference, In_Tree, To => Current_Project);
+ Set_Package_Node_Of (Reference, In_Tree, To => Current_Package);
Set_Expression_Kind_Of
- (Reference, To => Variable_Kind_Of (Current_Attribute));
+ (Reference, In_Tree, To => Variable_Kind_Of (Current_Attribute));
Set_Case_Insensitive
- (Reference, To => Attribute_Kind_Of (Current_Attribute) =
- Case_Insensitive_Associative_Array);
+ (Reference, In_Tree,
+ To => Attribute_Kind_Of (Current_Attribute) =
+ Case_Insensitive_Associative_Array);
-- Scan past the attribute name
- Scan;
+ Scan (In_Tree);
-- If the attribute is an associative array, get the index
@@ -212,17 +223,17 @@ package body Prj.Strt is
Expect (Tok_Left_Paren, "`(`");
if Token = Tok_Left_Paren then
- Scan;
+ Scan (In_Tree);
Expect (Tok_String_Literal, "literal string");
if Token = Tok_String_Literal then
Set_Associative_Array_Index_Of
- (Reference, To => Token_Name);
- Scan;
+ (Reference, In_Tree, To => Token_Name);
+ Scan (In_Tree);
Expect (Tok_Right_Paren, "`)`");
if Token = Tok_Right_Paren then
- Scan;
+ Scan (In_Tree);
end if;
end if;
end if;
@@ -232,18 +243,20 @@ package body Prj.Strt is
-- Change name of obsolete attributes
if Reference /= Empty_Node then
- case Name_Of (Reference) is
+ case Name_Of (Reference, In_Tree) is
when Snames.Name_Specification =>
- Set_Name_Of (Reference, To => Snames.Name_Spec);
+ Set_Name_Of (Reference, In_Tree, To => Snames.Name_Spec);
when Snames.Name_Specification_Suffix =>
- Set_Name_Of (Reference, To => Snames.Name_Spec_Suffix);
+ Set_Name_Of
+ (Reference, In_Tree, To => Snames.Name_Spec_Suffix);
when Snames.Name_Implementation =>
- Set_Name_Of (Reference, To => Snames.Name_Body);
+ Set_Name_Of (Reference, In_Tree, To => Snames.Name_Body);
when Snames.Name_Implementation_Suffix =>
- Set_Name_Of (Reference, To => Snames.Name_Body_Suffix);
+ Set_Name_Of
+ (Reference, In_Tree, To => Snames.Name_Body_Suffix);
when others =>
null;
@@ -327,26 +340,31 @@ package body Prj.Strt is
-- External_Reference --
------------------------
- procedure External_Reference (External_Value : out Project_Node_Id) is
+ procedure External_Reference
+ (In_Tree : Project_Node_Tree_Ref;
+ External_Value : out Project_Node_Id)
+ is
Field_Id : Project_Node_Id := Empty_Node;
begin
External_Value :=
- Default_Project_Node (Of_Kind => N_External_Value,
- And_Expr_Kind => Single);
- Set_Location_Of (External_Value, To => Token_Ptr);
+ Default_Project_Node
+ (Of_Kind => N_External_Value,
+ In_Tree => In_Tree,
+ And_Expr_Kind => Single);
+ Set_Location_Of (External_Value, In_Tree, To => Token_Ptr);
-- The current token is External
-- Get the left parenthesis
- Scan;
+ Scan (In_Tree);
Expect (Tok_Left_Paren, "`(`");
-- Scan past the left parenthesis
if Token = Tok_Left_Paren then
- Scan;
+ Scan (In_Tree);
end if;
-- Get the name of the external reference
@@ -355,27 +373,29 @@ package body Prj.Strt is
if Token = Tok_String_Literal then
Field_Id :=
- Default_Project_Node (Of_Kind => N_Literal_String,
- And_Expr_Kind => Single);
- Set_String_Value_Of (Field_Id, To => Token_Name);
- Set_External_Reference_Of (External_Value, To => Field_Id);
+ Default_Project_Node
+ (Of_Kind => N_Literal_String,
+ In_Tree => In_Tree,
+ And_Expr_Kind => Single);
+ Set_String_Value_Of (Field_Id, In_Tree, To => Token_Name);
+ Set_External_Reference_Of (External_Value, In_Tree, To => Field_Id);
-- Scan past the first argument
- Scan;
+ Scan (In_Tree);
case Token is
when Tok_Right_Paren =>
-- Scan past the right parenthesis
- Scan;
+ Scan (In_Tree);
when Tok_Comma =>
-- Scan past the comma
- Scan;
+ Scan (In_Tree);
Expect (Tok_String_Literal, "literal string");
@@ -383,17 +403,20 @@ package body Prj.Strt is
if Token = Tok_String_Literal then
Field_Id :=
- Default_Project_Node (Of_Kind => N_Literal_String,
- And_Expr_Kind => Single);
- Set_String_Value_Of (Field_Id, To => Token_Name);
- Set_External_Default_Of (External_Value, To => Field_Id);
- Scan;
+ Default_Project_Node
+ (Of_Kind => N_Literal_String,
+ In_Tree => In_Tree,
+ And_Expr_Kind => Single);
+ Set_String_Value_Of (Field_Id, In_Tree, To => Token_Name);
+ Set_External_Default_Of
+ (External_Value, In_Tree, To => Field_Id);
+ Scan (In_Tree);
Expect (Tok_Right_Paren, "`)`");
end if;
-- Scan past the right parenthesis
if Token = Tok_Right_Paren then
- Scan;
+ Scan (In_Tree);
end if;
when others =>
@@ -406,7 +429,10 @@ package body Prj.Strt is
-- Parse_Choice_List --
-----------------------
- procedure Parse_Choice_List (First_Choice : out Project_Node_Id) is
+ procedure Parse_Choice_List
+ (In_Tree : Project_Node_Tree_Ref;
+ First_Choice : out Project_Node_Id)
+ is
Current_Choice : Project_Node_Id := Empty_Node;
Next_Choice : Project_Node_Id := Empty_Node;
Choice_String : Name_Id := No_Name;
@@ -416,8 +442,10 @@ package body Prj.Strt is
-- Declare the node of the first choice
First_Choice :=
- Default_Project_Node (Of_Kind => N_Literal_String,
- And_Expr_Kind => Single);
+ Default_Project_Node
+ (Of_Kind => N_Literal_String,
+ In_Tree => In_Tree,
+ And_Expr_Kind => Single);
-- Initially Current_Choice is the same as First_Choice
@@ -426,12 +454,12 @@ package body Prj.Strt is
loop
Expect (Tok_String_Literal, "literal string");
exit when Token /= Tok_String_Literal;
- Set_Location_Of (Current_Choice, To => Token_Ptr);
+ Set_Location_Of (Current_Choice, In_Tree, To => Token_Ptr);
Choice_String := Token_Name;
-- Give the string value to the current choice
- Set_String_Value_Of (Current_Choice, To => Choice_String);
+ Set_String_Value_Of (Current_Choice, In_Tree, To => Choice_String);
-- Check if the label is part of the string type and if it has not
-- been already used.
@@ -466,7 +494,7 @@ package body Prj.Strt is
-- Scan past the label
- Scan;
+ Scan (In_Tree);
-- If there is no '|', we are done
@@ -475,11 +503,14 @@ package body Prj.Strt is
-- Current_Choice and set Current_Choice to this new node.
Next_Choice :=
- Default_Project_Node (Of_Kind => N_Literal_String,
- And_Expr_Kind => Single);
- Set_Next_Literal_String (Current_Choice, To => Next_Choice);
+ Default_Project_Node
+ (Of_Kind => N_Literal_String,
+ In_Tree => In_Tree,
+ And_Expr_Kind => Single);
+ Set_Next_Literal_String
+ (Current_Choice, In_Tree, To => Next_Choice);
Current_Choice := Next_Choice;
- Scan;
+ Scan (In_Tree);
else
exit;
end if;
@@ -491,7 +522,8 @@ package body Prj.Strt is
----------------------
procedure Parse_Expression
- (Expression : out Project_Node_Id;
+ (In_Tree : Project_Node_Tree_Ref;
+ Expression : out Project_Node_Id;
Current_Project : Project_Node_Id;
Current_Package : Project_Node_Id;
Optional_Index : Boolean)
@@ -502,12 +534,14 @@ package body Prj.Strt is
begin
-- Declare the node of the expression
- Expression := Default_Project_Node (Of_Kind => N_Expression);
- Set_Location_Of (Expression, To => Token_Ptr);
+ Expression :=
+ Default_Project_Node (Of_Kind => N_Expression, In_Tree => In_Tree);
+ Set_Location_Of (Expression, In_Tree, To => Token_Ptr);
-- Parse the term or terms of the expression
- Terms (Term => First_Term,
+ Terms (In_Tree => In_Tree,
+ Term => First_Term,
Expr_Kind => Expression_Kind,
Current_Project => Current_Project,
Current_Package => Current_Package,
@@ -515,15 +549,18 @@ package body Prj.Strt is
-- Set the first term and the expression kind
- Set_First_Term (Expression, To => First_Term);
- Set_Expression_Kind_Of (Expression, To => Expression_Kind);
+ Set_First_Term (Expression, In_Tree, To => First_Term);
+ Set_Expression_Kind_Of (Expression, In_Tree, To => Expression_Kind);
end Parse_Expression;
----------------------------
-- Parse_String_Type_List --
----------------------------
- procedure Parse_String_Type_List (First_String : out Project_Node_Id) is
+ procedure Parse_String_Type_List
+ (In_Tree : Project_Node_Tree_Ref;
+ First_String : out Project_Node_Id)
+ is
Last_String : Project_Node_Id := Empty_Node;
Next_String : Project_Node_Id := Empty_Node;
String_Value : Name_Id := No_Name;
@@ -532,8 +569,10 @@ package body Prj.Strt is
-- Declare the node of the first string
First_String :=
- Default_Project_Node (Of_Kind => N_Literal_String,
- And_Expr_Kind => Single);
+ Default_Project_Node
+ (Of_Kind => N_Literal_String,
+ In_Tree => In_Tree,
+ And_Expr_Kind => Single);
-- Initially, Last_String is the same as First_String
@@ -546,8 +585,8 @@ package body Prj.Strt is
-- Give its string value to Last_String
- Set_String_Value_Of (Last_String, To => String_Value);
- Set_Location_Of (Last_String, To => Token_Ptr);
+ Set_String_Value_Of (Last_String, In_Tree, To => String_Value);
+ Set_Location_Of (Last_String, In_Tree, To => Token_Ptr);
-- Now, check if the string is already part of the string type
@@ -556,7 +595,7 @@ package body Prj.Strt is
begin
while Current /= Last_String loop
- if String_Value_Of (Current) = String_Value then
+ if String_Value_Of (Current, In_Tree) = String_Value then
-- This is a repetition, report an error
Error_Msg_Name_1 := String_Value;
@@ -564,13 +603,13 @@ package body Prj.Strt is
exit;
end if;
- Current := Next_Literal_String (Current);
+ Current := Next_Literal_String (Current, In_Tree);
end loop;
end;
-- Scan past the literal string
- Scan;
+ Scan (In_Tree);
-- If there is no comma following the literal string, we are done
@@ -582,11 +621,13 @@ package body Prj.Strt is
-- Last_String to its node.
Next_String :=
- Default_Project_Node (Of_Kind => N_Literal_String,
- And_Expr_Kind => Single);
- Set_Next_Literal_String (Last_String, To => Next_String);
+ Default_Project_Node
+ (Of_Kind => N_Literal_String,
+ In_Tree => In_Tree,
+ And_Expr_Kind => Single);
+ Set_Next_Literal_String (Last_String, In_Tree, To => Next_String);
Last_String := Next_String;
- Scan;
+ Scan (In_Tree);
end if;
end loop;
end Parse_String_Type_List;
@@ -596,7 +637,8 @@ package body Prj.Strt is
------------------------------
procedure Parse_Variable_Reference
- (Variable : out Project_Node_Id;
+ (In_Tree : Project_Node_Tree_Ref;
+ Variable : out Project_Node_Id;
Current_Project : Project_Node_Id;
Current_Package : Project_Node_Id)
is
@@ -623,9 +665,9 @@ package body Prj.Strt is
end if;
Add_To_Names (NL => (Name => Token_Name, Location => Token_Ptr));
- Scan;
+ Scan (In_Tree);
exit when Token /= Tok_Dot;
- Scan;
+ Scan (In_Tree);
end loop;
if Look_For_Variable then
@@ -654,7 +696,7 @@ package body Prj.Strt is
-- Now, look if it can be a project name
The_Project := Imported_Or_Extended_Project_Of
- (Current_Project, Names.Table (1).Name);
+ (Current_Project, In_Tree, Names.Table (1).Name);
if The_Project = Empty_Node then
-- If it is neither a project name nor a package name,
@@ -670,14 +712,15 @@ package body Prj.Strt is
-- If it is a package name, check if the package
-- has already been declared in the current project.
- The_Package := First_Package_Of (Current_Project);
+ The_Package :=
+ First_Package_Of (Current_Project, In_Tree);
while The_Package /= Empty_Node
- and then Name_Of (The_Package) /=
+ and then Name_Of (The_Package, In_Tree) /=
Names.Table (1).Name
loop
The_Package :=
- Next_Package_In_Project (The_Package);
+ Next_Package_In_Project (The_Package, In_Tree);
end loop;
-- If it has not been already declared, report an
@@ -717,10 +760,11 @@ package body Prj.Strt is
for Index in 1 .. Names.Last - 1 loop
Add_To_Buffer
- (Get_Name_String (Names.Table (Index).Name));
+ (Get_Name_String (Names.Table (Index).Name),
+ Buffer, Buffer_Last);
if Index /= Names.Last - 1 then
- Add_To_Buffer (".");
+ Add_To_Buffer (".", Buffer, Buffer_Last);
end if;
end loop;
@@ -732,9 +776,10 @@ package body Prj.Strt is
-- Now, add the last simple name to get the name of the
-- long project.
- Add_To_Buffer (".");
+ Add_To_Buffer (".", Buffer, Buffer_Last);
Add_To_Buffer
- (Get_Name_String (Names.Table (Names.Last).Name));
+ (Get_Name_String (Names.Table (Names.Last).Name),
+ Buffer, Buffer_Last);
Name_Len := Buffer_Last;
Name_Buffer (1 .. Buffer_Last) :=
Buffer (1 .. Buffer_Last);
@@ -743,7 +788,7 @@ package body Prj.Strt is
-- Check if the long project is imported or extended
The_Project := Imported_Or_Extended_Project_Of
- (Current_Project, Long_Project);
+ (Current_Project, In_Tree, Long_Project);
-- If the long project exists, then this is the prefix
-- of the attribute.
@@ -757,7 +802,8 @@ package body Prj.Strt is
-- or extended.
The_Project := Imported_Or_Extended_Project_Of
- (Current_Project, Short_Project);
+ (Current_Project, In_Tree,
+ Short_Project);
-- If the short project does not exist, we report an
-- error.
@@ -774,13 +820,14 @@ package body Prj.Strt is
-- Now, we check if the package has been declared
-- in this project.
- The_Package := First_Package_Of (The_Project);
+ The_Package :=
+ First_Package_Of (The_Project, In_Tree);
while The_Package /= Empty_Node
- and then Name_Of (The_Package) /=
+ and then Name_Of (The_Package, In_Tree) /=
Names.Table (Names.Last).Name
loop
The_Package :=
- Next_Package_In_Project (The_Package);
+ Next_Package_In_Project (The_Package, In_Tree);
end loop;
-- If it has not, then we report an error
@@ -799,7 +846,7 @@ package body Prj.Strt is
First_Attribute :=
First_Attribute_Of
- (Package_Id_Of (The_Package));
+ (Package_Id_Of (The_Package, In_Tree));
end if;
end if;
end if;
@@ -807,7 +854,8 @@ package body Prj.Strt is
end case;
Attribute_Reference
- (Variable,
+ (In_Tree,
+ Variable,
Current_Project => The_Project,
Current_Package => The_Package,
First_Attribute => First_Attribute);
@@ -816,7 +864,8 @@ package body Prj.Strt is
end if;
Variable :=
- Default_Project_Node (Of_Kind => N_Variable_Reference);
+ Default_Project_Node
+ (Of_Kind => N_Variable_Reference, In_Tree => In_Tree);
if Look_For_Variable then
case Names.Last is
@@ -830,7 +879,7 @@ package body Prj.Strt is
-- Simple variable name
- Set_Name_Of (Variable, To => Names.Table (1).Name);
+ Set_Name_Of (Variable, In_Tree, To => Names.Table (1).Name);
when 2 =>
@@ -838,22 +887,24 @@ package body Prj.Strt is
-- a project name or a package name. Project names have
-- priority over package names.
- Set_Name_Of (Variable, To => Names.Table (2).Name);
+ Set_Name_Of (Variable, In_Tree, To => Names.Table (2).Name);
-- Check if it can be a package name
- The_Package := First_Package_Of (Current_Project);
+ The_Package := First_Package_Of (Current_Project, In_Tree);
while The_Package /= Empty_Node
- and then Name_Of (The_Package) /= Names.Table (1).Name
+ and then Name_Of (The_Package, In_Tree) /=
+ Names.Table (1).Name
loop
- The_Package := Next_Package_In_Project (The_Package);
+ The_Package :=
+ Next_Package_In_Project (The_Package, In_Tree);
end loop;
-- Now look for a possible project name
The_Project := Imported_Or_Extended_Project_Of
- (Current_Project, Names.Table (1).Name);
+ (Current_Project, In_Tree, Names.Table (1).Name);
if The_Project /= Empty_Node then
Specified_Project := The_Project;
@@ -874,7 +925,8 @@ package body Prj.Strt is
-- made of several simple names, or a project name followed
-- by a package name.
- Set_Name_Of (Variable, To => Names.Table (Names.Last).Name);
+ Set_Name_Of
+ (Variable, In_Tree, To => Names.Table (Names.Last).Name);
declare
Short_Project : Name_Id;
@@ -891,10 +943,11 @@ package body Prj.Strt is
for Index in 1 .. Names.Last - 2 loop
Add_To_Buffer
- (Get_Name_String (Names.Table (Index).Name));
+ (Get_Name_String (Names.Table (Index).Name),
+ Buffer, Buffer_Last);
if Index /= Names.Last - 2 then
- Add_To_Buffer (".");
+ Add_To_Buffer (".", Buffer, Buffer_Last);
end if;
end loop;
@@ -904,9 +957,10 @@ package body Prj.Strt is
-- Add the simple name before the name of the variable
- Add_To_Buffer (".");
+ Add_To_Buffer (".", Buffer, Buffer_Last);
Add_To_Buffer
- (Get_Name_String (Names.Table (Names.Last - 1).Name));
+ (Get_Name_String (Names.Table (Names.Last - 1).Name),
+ Buffer, Buffer_Last);
Name_Len := Buffer_Last;
Name_Buffer (1 .. Name_Len) := Buffer (1 .. Buffer_Last);
Long_Project := Name_Find;
@@ -915,7 +969,7 @@ package body Prj.Strt is
-- extended project.
The_Project := Imported_Or_Extended_Project_Of
- (Current_Project, Long_Project);
+ (Current_Project, In_Tree, Long_Project);
if The_Project /= Empty_Node then
Specified_Project := The_Project;
@@ -927,7 +981,7 @@ package body Prj.Strt is
-- First check for a possible project name
The_Project := Imported_Or_Extended_Project_Of
- (Current_Project, Short_Project);
+ (Current_Project, In_Tree, Short_Project);
if The_Project = Empty_Node then
-- Unknown prefix, report an error
@@ -943,14 +997,14 @@ package body Prj.Strt is
-- Now look for the package in this project
- The_Package := First_Package_Of (The_Project);
+ The_Package := First_Package_Of (The_Project, In_Tree);
while The_Package /= Empty_Node
- and then Name_Of (The_Package) /=
+ and then Name_Of (The_Package, In_Tree) /=
Names.Table (Names.Last - 1).Name
loop
The_Package :=
- Next_Package_In_Project (The_Package);
+ Next_Package_In_Project (The_Package, In_Tree);
end loop;
if The_Package = Empty_Node then
@@ -971,9 +1025,9 @@ package body Prj.Strt is
end if;
if Look_For_Variable then
- Variable_Name := Name_Of (Variable);
- Set_Project_Node_Of (Variable, To => Specified_Project);
- Set_Package_Node_Of (Variable, To => Specified_Package);
+ Variable_Name := Name_Of (Variable, In_Tree);
+ Set_Project_Node_Of (Variable, In_Tree, To => Specified_Project);
+ Set_Package_Node_Of (Variable, In_Tree, To => Specified_Package);
if Specified_Project /= Empty_Node then
The_Project := Specified_Project;
@@ -990,13 +1044,14 @@ package body Prj.Strt is
-- declared in this package.
if Specified_Package /= Empty_Node then
- Current_Variable := First_Variable_Of (Specified_Package);
+ Current_Variable :=
+ First_Variable_Of (Specified_Package, In_Tree);
while Current_Variable /= Empty_Node
and then
- Name_Of (Current_Variable) /= Variable_Name
+ Name_Of (Current_Variable, In_Tree) /= Variable_Name
loop
- Current_Variable := Next_Variable (Current_Variable);
+ Current_Variable := Next_Variable (Current_Variable, In_Tree);
end loop;
else
@@ -1007,12 +1062,14 @@ package body Prj.Strt is
if Specified_Project = Empty_Node
and then Current_Package /= Empty_Node
then
- Current_Variable := First_Variable_Of (Current_Package);
+ Current_Variable :=
+ First_Variable_Of (Current_Package, In_Tree);
while Current_Variable /= Empty_Node
- and then Name_Of (Current_Variable) /= Variable_Name
+ and then Name_Of (Current_Variable, In_Tree) /= Variable_Name
loop
- Current_Variable := Next_Variable (Current_Variable);
+ Current_Variable :=
+ Next_Variable (Current_Variable, In_Tree);
end loop;
end if;
@@ -1020,12 +1077,13 @@ package body Prj.Strt is
-- variable has been declared in the project.
if Current_Variable = Empty_Node then
- Current_Variable := First_Variable_Of (The_Project);
+ Current_Variable := First_Variable_Of (The_Project, In_Tree);
while Current_Variable /= Empty_Node
- and then Name_Of (Current_Variable) /= Variable_Name
+ and then Name_Of (Current_Variable, In_Tree) /= Variable_Name
loop
- Current_Variable := Next_Variable (Current_Variable);
+ Current_Variable :=
+ Next_Variable (Current_Variable, In_Tree);
end loop;
end if;
end if;
@@ -1041,11 +1099,15 @@ package body Prj.Strt is
if Current_Variable /= Empty_Node then
Set_Expression_Kind_Of
- (Variable, To => Expression_Kind_Of (Current_Variable));
+ (Variable, In_Tree,
+ To => Expression_Kind_Of (Current_Variable, In_Tree));
- if Kind_Of (Current_Variable) = N_Typed_Variable_Declaration then
+ if
+ Kind_Of (Current_Variable, In_Tree) = N_Typed_Variable_Declaration
+ then
Set_String_Type_Of
- (Variable, To => String_Type_Of (Current_Variable));
+ (Variable, In_Tree,
+ To => String_Type_Of (Current_Variable, In_Tree));
end if;
end if;
@@ -1054,15 +1116,15 @@ package body Prj.Strt is
if Token = Tok_Left_Paren then
Error_Msg ("\variables cannot be associative arrays", Token_Ptr);
- Scan;
+ Scan (In_Tree);
Expect (Tok_String_Literal, "literal string");
if Token = Tok_String_Literal then
- Scan;
+ Scan (In_Tree);
Expect (Tok_Right_Paren, "`)`");
if Token = Tok_Right_Paren then
- Scan;
+ Scan (In_Tree);
end if;
end if;
end if;
@@ -1072,7 +1134,10 @@ package body Prj.Strt is
-- Start_New_Case_Construction --
---------------------------------
- procedure Start_New_Case_Construction (String_Type : Project_Node_Id) is
+ procedure Start_New_Case_Construction
+ (In_Tree : Project_Node_Tree_Ref;
+ String_Type : Project_Node_Id)
+ is
Current_String : Project_Node_Id;
begin
@@ -1089,11 +1154,11 @@ package body Prj.Strt is
-- Add to table Choices the literal of the string type
if String_Type /= Empty_Node then
- Current_String := First_Literal_String (String_Type);
+ Current_String := First_Literal_String (String_Type, In_Tree);
while Current_String /= Empty_Node loop
- Add (This_String => String_Value_Of (Current_String));
- Current_String := Next_Literal_String (Current_String);
+ Add (This_String => String_Value_Of (Current_String, In_Tree));
+ Current_String := Next_Literal_String (Current_String, In_Tree);
end loop;
end if;
@@ -1109,7 +1174,8 @@ package body Prj.Strt is
-----------
procedure Terms
- (Term : out Project_Node_Id;
+ (In_Tree : Project_Node_Tree_Ref;
+ Term : out Project_Node_Id;
Expr_Kind : in out Variable_Kind;
Current_Project : Project_Node_Id;
Current_Package : Project_Node_Id;
@@ -1125,8 +1191,8 @@ package body Prj.Strt is
begin
-- Declare a new node for the term
- Term := Default_Project_Node (Of_Kind => N_Term);
- Set_Location_Of (Term, To => Token_Ptr);
+ Term := Default_Project_Node (Of_Kind => N_Term, In_Tree => In_Tree);
+ Set_Location_Of (Term, In_Tree, To => Token_Ptr);
case Token is
when Tok_Left_Paren =>
@@ -1156,20 +1222,21 @@ package body Prj.Strt is
-- Declare a new node for this literal string list
Term_Id := Default_Project_Node
- (Of_Kind => N_Literal_String_List,
+ (Of_Kind => N_Literal_String_List,
+ In_Tree => In_Tree,
And_Expr_Kind => List);
- Set_Current_Term (Term, To => Term_Id);
- Set_Location_Of (Term, To => Token_Ptr);
+ Set_Current_Term (Term, In_Tree, To => Term_Id);
+ Set_Location_Of (Term, In_Tree, To => Token_Ptr);
-- Scan past the left parenthesis
- Scan;
+ Scan (In_Tree);
-- If the left parenthesis is immediately followed by a right
-- parenthesis, the literal string list is empty.
if Token = Tok_Right_Paren then
- Scan;
+ Scan (In_Tree);
else
-- Otherwise, we parse the expression(s) in the literal string
@@ -1177,14 +1244,16 @@ package body Prj.Strt is
loop
Current_Location := Token_Ptr;
- Parse_Expression (Expression => Next_Expression,
- Current_Project => Current_Project,
- Current_Package => Current_Package,
- Optional_Index => Optional_Index);
+ Parse_Expression
+ (In_Tree => In_Tree,
+ Expression => Next_Expression,
+ Current_Project => Current_Project,
+ Current_Package => Current_Package,
+ Optional_Index => Optional_Index);
-- The expression kind is String list, report an error
- if Expression_Kind_Of (Next_Expression) = List then
+ if Expression_Kind_Of (Next_Expression, In_Tree) = List then
Error_Msg ("single expression expected",
Current_Location);
end if;
@@ -1194,10 +1263,10 @@ package body Prj.Strt is
if Current_Expression = Empty_Node then
Set_First_Expression_In_List
- (Term_Id, To => Next_Expression);
+ (Term_Id, In_Tree, To => Next_Expression);
else
Set_Next_Expression_In_List
- (Current_Expression, To => Next_Expression);
+ (Current_Expression, In_Tree, To => Next_Expression);
end if;
Current_Expression := Next_Expression;
@@ -1205,7 +1274,7 @@ package body Prj.Strt is
-- If there is a comma, continue with the next expression
exit when Token /= Tok_Comma;
- Scan; -- past the comma
+ Scan (In_Tree); -- past the comma
end loop;
-- We expect a closing right parenthesis
@@ -1213,7 +1282,7 @@ package body Prj.Strt is
Expect (Tok_Right_Paren, "`)`");
if Token = Tok_Right_Paren then
- Scan;
+ Scan (In_Tree);
end if;
end if;
@@ -1228,29 +1297,31 @@ package body Prj.Strt is
-- Declare a new node for the string literal
- Term_Id := Default_Project_Node (Of_Kind => N_Literal_String);
- Set_Current_Term (Term, To => Term_Id);
- Set_String_Value_Of (Term_Id, To => Token_Name);
+ Term_Id :=
+ Default_Project_Node
+ (Of_Kind => N_Literal_String, In_Tree => In_Tree);
+ Set_Current_Term (Term, In_Tree, To => Term_Id);
+ Set_String_Value_Of (Term_Id, In_Tree, To => Token_Name);
-- Scan past the string literal
- Scan;
+ Scan (In_Tree);
-- Check for possible index expression
if Token = Tok_At then
if not Optional_Index then
Error_Msg ("index not allowed here", Token_Ptr);
- Scan;
+ Scan (In_Tree);
if Token = Tok_Integer_Literal then
- Scan;
+ Scan (In_Tree);
end if;
-- Set the index value
else
- Scan;
+ Scan (In_Tree);
Expect (Tok_Integer_Literal, "integer literal");
if Token = Tok_Integer_Literal then
@@ -1260,11 +1331,12 @@ package body Prj.Strt is
if Index = 0 then
Error_Msg ("index cannot be zero", Token_Ptr);
else
- Set_Source_Index_Of (Term_Id, To => Index);
+ Set_Source_Index_Of
+ (Term_Id, In_Tree, To => Index);
end if;
end;
- Scan;
+ Scan (In_Tree);
end if;
end if;
end if;
@@ -1275,10 +1347,11 @@ package body Prj.Strt is
-- Get the variable or attribute reference
Parse_Variable_Reference
- (Variable => Reference,
+ (In_Tree => In_Tree,
+ Variable => Reference,
Current_Project => Current_Project,
Current_Package => Current_Package);
- Set_Current_Term (Term, To => Reference);
+ Set_Current_Term (Term, In_Tree, To => Reference);
if Reference /= Empty_Node then
@@ -1286,10 +1359,10 @@ package body Prj.Strt is
-- has the kind of the variable or attribute reference.
if Expr_Kind = Undefined then
- Expr_Kind := Expression_Kind_Of (Reference);
+ Expr_Kind := Expression_Kind_Of (Reference, In_Tree);
elsif Expr_Kind = Single
- and then Expression_Kind_Of (Reference) = List
+ and then Expression_Kind_Of (Reference, In_Tree) = List
then
-- If the expression is a single list, and the reference is
-- a string list, report an error, and set the expression
@@ -1308,26 +1381,27 @@ package body Prj.Strt is
-- attribute reference of the current project.
Current_Location := Token_Ptr;
- Scan;
+ Scan (In_Tree);
Expect (Tok_Apostrophe, "`'`");
if Token = Tok_Apostrophe then
Attribute_Reference
- (Reference => Reference,
+ (In_Tree => In_Tree,
+ Reference => Reference,
First_Attribute => Prj.Attr.Attribute_First,
Current_Project => Current_Project,
Current_Package => Empty_Node);
- Set_Current_Term (Term, To => Reference);
+ Set_Current_Term (Term, In_Tree, To => Reference);
end if;
-- Same checks as above for the expression kind
if Reference /= Empty_Node then
if Expr_Kind = Undefined then
- Expr_Kind := Expression_Kind_Of (Reference);
+ Expr_Kind := Expression_Kind_Of (Reference, In_Tree);
elsif Expr_Kind = Single
- and then Expression_Kind_Of (Reference) = List
+ and then Expression_Kind_Of (Reference, In_Tree) = List
then
Error_Msg
("lists cannot appear in single string expression",
@@ -1342,8 +1416,9 @@ package body Prj.Strt is
Expr_Kind := Single;
end if;
- External_Reference (External_Value => Reference);
- Set_Current_Term (Term, To => Reference);
+ External_Reference
+ (In_Tree => In_Tree, External_Value => Reference);
+ Set_Current_Term (Term, In_Tree, To => Reference);
when others =>
Error_Msg ("cannot be part of an expression", Token_Ptr);
@@ -1357,17 +1432,19 @@ package body Prj.Strt is
-- Scan past the '&'
- Scan;
+ Scan (In_Tree);
- Terms (Term => Next_Term,
- Expr_Kind => Expr_Kind,
- Current_Project => Current_Project,
- Current_Package => Current_Package,
- Optional_Index => Optional_Index);
+ Terms
+ (In_Tree => In_Tree,
+ Term => Next_Term,
+ Expr_Kind => Expr_Kind,
+ Current_Project => Current_Project,
+ Current_Package => Current_Package,
+ Optional_Index => Optional_Index);
-- And link the next term to this term
- Set_Next_Term (Term, To => Next_Term);
+ Set_Next_Term (Term, In_Tree, To => Next_Term);
end if;
end Terms;