diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-08 10:33:17 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-08 10:33:17 +0000 |
commit | bdd64cbef403677f46362009e2b592176d04d22d (patch) | |
tree | c83150f858a1ea22febff15880c94d93b7c3314f /gcc/ada/prj-part.adb | |
parent | 75213f6909b7f4c460932a1ec9b29b575627818d (diff) | |
download | gcc-bdd64cbef403677f46362009e2b592176d04d22d.tar.gz |
2003-12-08 Jerome Guitton <guitton@act-europe.fr>
* 5ytiitho.adb, 5zthrini.adb, 5ztiitho.adb, i-vthrea.adb,
i-vthrea.ads, s-tpae65.adb, s-tpae65.ads: Cleanup: Remove a bunch of
obsolete files.
* Makefile.in: (rts-ravenscar): Generate an empty libgnat.a.
(rts-zfp): Ditto.
2003-12-08 Robert Dewar <dewar@gnat.com>
* 7sintman.adb: Minor reformatting
* bindgen.adb: Configurable_Run_Time mode no longer suppresses the
standard linker options to get standard libraries linked. We now plan
to provide dummy versions of these libraries to match the appropriate
configurable run-time (e.g. if a library is not needed at all, provide
a dummy empty library).
* targparm.ads: Configurable_Run_Time mode no longer affects linker
options (-L parameters and standard libraries). What we plan to do is
to provide dummy libraries where the libraries are not required.
* gnatbind.adb: Minor comment improvement
2003-12-08 Javier Miranda <miranda@gnat.com>
* exp_aggr.adb (Build_Record_Aggr_Code): Do not remove the expanded
aggregate in the parent. Otherwise constants with limited aggregates
are not supported. Add new formal to pass the component type (Ctype).
It is required to call the corresponding IP subprogram in case of
default initialized components.
(Gen_Assign): In case of default-initialized component, generate a
call to the IP subprogram associated with the component.
(Build_Record_Aggr_Code): Remove the aggregate from the parent in case
of aggregate with default initialized components.
(Has_Default_Init_Comps): Improve implementation to recursively check
all the present expressions.
* exp_ch3.ads, exp_ch3.adb (Build_Initialization_Call): Add new formal
to indicate that the initialization call corresponds to a
default-initialized component of an aggregate.
In case of default initialized aggregate with tasks this parameter is
used to generate a null string (this is just a workaround that must be
improved later). In case of discriminants, this parameter is used to
generate a selected component node that gives access to the discriminant
value.
* exp_ch9.ads, exp_ch9.adb (Build_Task_Allocate_Block_With_Stmts): New
subprogram, based on Build_Task_Allocate_Block, but adapted to expand
allocated aggregates with default-initialized components.
* par-ch4.adb (P_Aggregate_Or_Paren_Expr): Improve error message if
the box notation is used in positional aggregates.
2003-12-08 Samuel Tardieu <tardieu@act-europe.fr>
* lib.ads: Fix typo in comment
2003-12-08 Vincent Celier <celier@gnat.com>
* prj.adb (Project_Empty): New component Unkept_Comments
(Scan): Remove procedure; moved to Prj.Err.
* prj.ads (Project_Data): New Boolean component Unkept_Comments
(Scan): Remove procedure; moved to Prj.Err.
* prj-dect.adb: Manage comments for the different declarations.
* prj-part.adb (With_Record): New component Node
(Parse): New Boolean parameter Store_Comments, defaulted to False.
Set the scanner to return ends of line and comments as tokens, if
Store_Comments is True.
(Pre_Parse_Context_Clause): Create the N_With_Clause nodes so that
comments are associated with these nodes. Store the node IDs in the
With_Records.
(Post_Parse_Context_Clause): Use the N_With_Clause nodes stored in the
With_Records.
(Parse_Single_Project): Call Pre_Parse_Context_Clause before creating
the N_Project node. Call Tree.Save and Tree.Reset before scanning the
current project. Call Tree.Restore afterwards. Set the various nodes
for comment storage (Next_End, End_Of_Line, Previous_Line,
Previous_End).
* prj-part.ads (Parse): New Boolean parameter Store_Comments,
defaulted to False.
* prj-pp.adb (Write_String): New Boolean parameter Truncated, defaulted
to False. When Truncated is True, truncate the string, never go to the
next line.
(Write_End_Of_Line_Comment): New procedure
(Print): Process comments for nodes N_With_Clause,
N_Package_Declaration, N_String_Type_Declaration,
N_Attribute_Declaration, N_Typed_Variable_Declaration,
N_Variable_Declaration, N_Case_Construction, N_Case_Item.
Process nodes N_Comment.
* prj-tree.ads, prj-tree.adb (Default_Project_Node): If it is a node
without comments and there are some comments, set the flag
Unkept_Comments to True.
(Scan): If there are comments, set the flag Unkept_Comments to True and
clear the comments.
(Project_Node_Kind): Add enum values N_Comment_Zones, N_Comment
(Next_End_Nodes: New table
(Comment_Zones_Of): New function
(Scan): New procedure; moved from Prj. Accumulate comments in the
Comments table and set end of line comments, comments after, after end
and before end.
(Add_Comments): New procedure
(Save, Restore, Seset_State): New procedures
(There_Are_Unkept_Comments): New function
(Set_Previous_Line_Node, Set_Previous_End_Node): New procedures
(Set_End_Of_Line, Set_Next_End_Node, Remove_Next_End_Node): New
procedures.
(First_Comment_After, First_Comment_After_End): New functions
(First_Comment_Before, First_Comment_Before_End): New functions
(Next_Comment): New function
(End_Of_Line_Comment, Follows_Empty_Line,
Is_Followed_By_Empty_Line): New functions
(Set_First_Comment_After, Set_First_Comment_After_End): New procedures
(Set_First_Comment_Before, Set_First_Comment_Before_End): New procedures
(Set_Next_Comment): New procedure
(Default_Project_Node): Associate comment before if the node can store
comments.
* scans.ads (Token_Type): New enumeration value Tok_Comment
(Comment_Id): New global variable
* scng.ads, scng.adb (Comment_Is_Token): New Boolean global variable,
defaulted to False.
(Scan): Store position of start of comment. If comments are tokens, set
Comment_Id and set Token to Tok_Comment when scanning a comment.
(Set_Comment_As_Token): New procedure
* sinput-p.adb: Update Copyright notice
(Source_File_Is_Subunit): Call Prj.Err.Scanner.Scan instead of Prj.Scan
that no longer exists.
2003-12-08 Javier Miranda <miranda@gnat.com>
* sem_aggr.adb: Add dependence on Exp_Tss package
Correct typo in comment
(Resolve_Aggregate): In case of array aggregates set the estimated
type of the aggregate before calling resolve. This is needed to know
the name of the corresponding IP in case of limited array aggregates.
(Resolve_Array_Aggregate): Delay the resolution to the expansion phase
in case of default initialized array components.
* sem_ch12.adb (Analyze_Formal_Object_Declaration): Allow limited
types. Required to give support to limited aggregates in generic
formals.
2003-12-08 Ed Schonberg <schonberg@gnat.com>
* sem_ch3.adb (Check_Initialization): For legality purposes, an
inlined body functions like an instantiation.
(Decimal_Fixed_Point_Declaration): Do not set kind of first subtype
until bounds are analyzed, to diagnose premature use of type.
* sem_util.adb (Wrong_Type): Improve error message when the type of
the expression is used prematurely.
2003-12-08 GNAT Script <nobody@gnat.com>
* Make-lang.in: Makefile automatically updated
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74414 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/prj-part.adb')
-rw-r--r-- | gcc/ada/prj-part.adb | 49 |
1 files changed, 40 insertions, 9 deletions
diff --git a/gcc/ada/prj-part.adb b/gcc/ada/prj-part.adb index 73d7c574575..1aa4725e46c 100644 --- a/gcc/ada/prj-part.adb +++ b/gcc/ada/prj-part.adb @@ -81,6 +81,7 @@ package body Prj.Part is Path : Name_Id; Location : Source_Ptr; Limited_With : Boolean; + Node : Project_Node_Id; Next : With_Id; end record; -- Information about an imported project, to be put in table Withs below @@ -426,7 +427,8 @@ package body Prj.Part is (Project : out Project_Node_Id; Project_File_Name : String; Always_Errout_Finalize : Boolean; - Packages_To_Check : String_List_Access := All_Packages) + Packages_To_Check : String_List_Access := All_Packages; + Store_Comments : Boolean := False) is Current_Directory : constant String := Get_Current_Dir; @@ -451,6 +453,8 @@ package body Prj.Part is begin Prj.Err.Initialize; + Prj.Err.Scanner.Set_Comment_As_Token (Store_Comments); + Prj.Err.Scanner.Set_End_Of_Line_As_Token (Store_Comments); -- Parse the main project file @@ -578,6 +582,8 @@ package body Prj.Part is Current_With : With_Record; + Current_With_Node : Project_Node_Id := Empty_Node; + begin -- Assume no context clause @@ -588,6 +594,7 @@ package body Prj.Part is -- or we have exhausted the with clauses. while Token = Tok_With or else Token = Tok_Limited loop + Current_With_Node := Default_Project_Node (Of_Kind => N_With_Clause); Limited_With := Token = Tok_Limited; if Limited_With then @@ -612,6 +619,7 @@ package body Prj.Part is (Path => Token_Name, Location => Token_Ptr, Limited_With => Limited_With, + Node => Current_With_Node, Next => No_With); Withs.Increment_Last; @@ -629,6 +637,8 @@ package body Prj.Part is Scan; if Token = Tok_Semicolon then + Set_End_Of_Line (Current_With_Node); + Set_Previous_Line_Node (Current_With_Node); -- End of (possibly multiple) with clause; @@ -639,6 +649,9 @@ package body Prj.Part is Error_Msg ("expected comma or semi colon", Token_Ptr); exit Comma_Loop; end if; + + Current_With_Node := + Default_Project_Node (Of_Kind => N_With_Clause); end loop Comma_Loop; end loop With_Loop; end Pre_Parse_Context_Clause; @@ -714,13 +727,11 @@ package body Prj.Part is -- First with clause of the context clause - Current_Project := Default_Project_Node - (Of_Kind => N_With_Clause); + Current_Project := Current_With.Node; Imported_Projects := Current_Project; else - Next_Project := Default_Project_Node - (Of_Kind => N_With_Clause); + Next_Project := Current_With.Node; Set_Next_With_Clause_Of (Current_Project, Next_Project); Current_Project := Next_Project; end if; @@ -829,6 +840,8 @@ package body Prj.Part is use Tree_Private_Part; + Project_Comment_State : Tree.Comment_State; + begin declare Normed : String := Normalize_Pathname (Path_Name); @@ -868,6 +881,8 @@ package body Prj.Part is end if; end loop; + -- Put the new path name on the stack + Project_Stack.Increment_Last; Project_Stack.Table (Project_Stack.Last).Name := Canonical_Path_Name; @@ -933,6 +948,7 @@ package body Prj.Part is Save_Project_Scan_State (Project_Scan_State); Source_Index := Load_Project_File (Path_Name); + Tree.Save (Project_Comment_State); -- if we cannot find it, we stop @@ -943,6 +959,7 @@ package body Prj.Part is end if; Prj.Err.Scanner.Initialize_Scanner (Types.No_Unit, Source_Index); + Tree.Reset_State; Scan; if Name_From_Path = No_Name then @@ -962,6 +979,10 @@ package body Prj.Part is Write_Eol; end if; + -- Is there any imported project? + + Pre_Parse_Context_Clause (First_With); + Project_Directory := Immediate_Directory_Of (Normed_Path_Name); Project := Default_Project_Node (Of_Kind => N_Project); Project_Stack.Table (Project_Stack.Last).Id := Project; @@ -969,10 +990,6 @@ package body Prj.Part is Set_Path_Name_Of (Project, Normed_Path_Name); Set_Location_Of (Project, Token_Ptr); - -- Is there any imported project? - - Pre_Parse_Context_Clause (First_With); - Expect (Tok_Project, "PROJECT"); -- Mark location of PROJECT token if present @@ -1276,6 +1293,9 @@ package body Prj.Part is end if; Expect (Tok_Is, "IS"); + Set_End_Of_Line (Project); + Set_Previous_Line_Node (Project); + Set_Next_End_Node (Project); declare Project_Declaration : Project_Node_Id := Empty_Node; @@ -1296,6 +1316,7 @@ package body Prj.Part is end; Expect (Tok_End, "END"); + Remove_Next_End_Node; -- Skip "end" if present @@ -1353,6 +1374,7 @@ package body Prj.Part is -- source. if Token = Tok_Semicolon then + Set_Previous_End_Node (Project); Scan; if Token /= Tok_EOF then @@ -1368,6 +1390,15 @@ package body Prj.Part is -- And remove the project from the project stack Project_Stack.Decrement_Last; + + -- Indicate if there are unkept comments + + Tree.Set_Project_File_Includes_Unkept_Comments + (Node => Project, To => Tree.There_Are_Unkept_Comments); + + -- And restore the comment state that was saved + + Tree.Restore (Project_Comment_State); end Parse_Single_Project; ----------------------- |