Commit ea4ce0f7 by Vincent Celier Committed by Arnaud Charlet

frontend.adb: Set Lib.Parsing_Main_Extended_Source to True before loading the main source...

2010-10-04  Vincent Celier  <celier@adacore.com>

	* frontend.adb: Set Lib.Parsing_Main_Extended_Source to True before
	loading the main source, so that if it is preprocessed and -gnateG is
	used, the preprocessed file is written.
	* lib.ads (Analysing_Subunit_Of_Main): New global variable to indicate
	if a subunit is from the main unit when it is loaded.
	* sem_ch10.adb (Analyze_Proper_Body): Set Lib.Analysing_Subunit_Of_Main
	to True before loading a subunit.
	* sem_ch12.adb (Copy_Generic_Node): Set Lib.Analysing_Subunit_Of_Main
	to True when the main is a generic unit before loading one of its
	subunits.
	* sinput-l.adb (Load_File): If -gnateG is used, write the preprocessed
	file only for the main unit (spec, body and subunits).

From-SVN: r164934
parent 1366997b
2010-10-04 Vincent Celier <celier@adacore.com> 2010-10-04 Vincent Celier <celier@adacore.com>
* frontend.adb: Set Lib.Parsing_Main_Extended_Source to True before
loading the main source, so that if it is preprocessed and -gnateG is
used, the preprocessed file is written.
* lib.ads (Analysing_Subunit_Of_Main): New global variable to indicate
if a subunit is from the main unit when it is loaded.
* sem_ch10.adb (Analyze_Proper_Body): Set Lib.Analysing_Subunit_Of_Main
to True before loading a subunit.
* sem_ch12.adb (Copy_Generic_Node): Set Lib.Analysing_Subunit_Of_Main
to True when the main is a generic unit before loading one of its
subunits.
* sinput-l.adb (Load_File): If -gnateG is used, write the preprocessed
file only for the main unit (spec, body and subunits).
2010-10-04 Vincent Celier <celier@adacore.com>
* sinput-l.adb (Load_File): Do not fail when switch -gnateG is * sinput-l.adb (Load_File): Do not fail when switch -gnateG is
specified and the processed file cannot be written. Just issue a specified and the processed file cannot be written. Just issue a
warning and continue. warning and continue.
......
...@@ -116,6 +116,11 @@ begin ...@@ -116,6 +116,11 @@ begin
Prepcomp.Check_Symbols; Prepcomp.Check_Symbols;
end if; end if;
-- We set Parsing_Main_Extended_Source true here to cover processing of all
-- the configuration pragma files, as well as the main source unit itself.
Parsing_Main_Extended_Source := True;
-- Now that the preprocessing situation is established, we are able to -- Now that the preprocessing situation is established, we are able to
-- load the main source (this is no longer done by Lib.Load.Initialize). -- load the main source (this is no longer done by Lib.Load.Initialize).
...@@ -127,11 +132,6 @@ begin ...@@ -127,11 +132,6 @@ begin
return; return;
end if; end if;
-- We set Parsing_Main_Extended_Source true here to cover processing of all
-- the configuration pragma files, as well as the main source unit itself.
Parsing_Main_Extended_Source := True;
-- Read and process configuration pragma files if present -- Read and process configuration pragma files if present
declare declare
......
...@@ -49,6 +49,11 @@ package Lib is ...@@ -49,6 +49,11 @@ package Lib is
-- extended source (the main unit, its spec, or one of its subunits). This -- extended source (the main unit, its spec, or one of its subunits). This
-- flag to implement In_Extended_Main_Source_Unit. -- flag to implement In_Extended_Main_Source_Unit.
Analysing_Subunit_Of_Main : Boolean := False;
-- Set to True when analyzing a subunit of the main source. When True, if
-- the subunit is preprocessed and -gnateG is specified, then the
-- preprocessed file (.prep) is written.
-------------------------------------------- --------------------------------------------
-- General Approach to Library Management -- -- General Approach to Library Management --
-------------------------------------------- --------------------------------------------
......
...@@ -1739,12 +1739,17 @@ package body Sem_Ch10 is ...@@ -1739,12 +1739,17 @@ package body Sem_Ch10 is
-- Otherwise we must load the subunit and link to it -- Otherwise we must load the subunit and link to it
else else
-- Make sure that, if the subunit is preprocessed and -gnateG is
-- specified, the preprocessed file will be written.
Lib.Analysing_Subunit_Of_Main := True;
Unum := Unum :=
Load_Unit Load_Unit
(Load_Name => Subunit_Name, (Load_Name => Subunit_Name,
Required => False, Required => False,
Subunit => True, Subunit => True,
Error_Node => N); Error_Node => N);
Lib.Analysing_Subunit_Of_Main := False;
-- Give message if we did not get the unit Emit warning even if -- Give message if we did not get the unit Emit warning even if
-- missing subunit is not within main unit, to simplify debugging. -- missing subunit is not within main unit, to simplify debugging.
...@@ -1822,11 +1827,11 @@ package body Sem_Ch10 is ...@@ -1822,11 +1827,11 @@ package body Sem_Ch10 is
end if; end if;
end if; end if;
-- The remaining case is when the subunit is not already loaded and -- The remaining case is when the subunit is not already loaded and we
-- we are not generating code. In this case we are just performing -- are not generating code. In this case we are just performing semantic
-- semantic analysis on the parent, and we are not interested in -- analysis on the parent, and we are not interested in the subunit. For
-- the subunit. For subprograms, analyze the stub as a body. For -- subprograms, analyze the stub as a body. For other entities the stub
-- other entities the stub has already been marked as completed. -- has already been marked as completed.
else else
Optional_Subunit; Optional_Subunit;
......
...@@ -5906,12 +5906,19 @@ package body Sem_Ch12 is ...@@ -5906,12 +5906,19 @@ package body Sem_Ch12 is
New_Body : Node_Id; New_Body : Node_Id;
begin begin
-- Make sure that, if it is a subunit of the main unit that is
-- preprocessed and if -gnateG is specified, the preprocessed
-- file will be written.
Lib.Analysing_Subunit_Of_Main :=
Lib.In_Extended_Main_Source_Unit (N);
Unum := Unum :=
Load_Unit Load_Unit
(Load_Name => Subunit_Name, (Load_Name => Subunit_Name,
Required => False, Required => False,
Subunit => True, Subunit => True,
Error_Node => N); Error_Node => N);
Lib.Analysing_Subunit_Of_Main := False;
-- If the proper body is not found, a warning message will be -- If the proper body is not found, a warning message will be
-- emitted when analyzing the stub, or later at the point -- emitted when analyzing the stub, or later at the point
......
...@@ -30,6 +30,7 @@ with Einfo; use Einfo; ...@@ -30,6 +30,7 @@ with Einfo; use Einfo;
with Errout; use Errout; with Errout; use Errout;
with Fname; use Fname; with Fname; use Fname;
with Hostparm; with Hostparm;
with Lib; use Lib;
with Opt; use Opt; with Opt; use Opt;
with Osint; use Osint; with Osint; use Osint;
with Output; use Output; with Output; use Output;
...@@ -552,9 +553,17 @@ package body Sinput.L is ...@@ -552,9 +553,17 @@ package body Sinput.L is
else else
-- Output the result of the preprocessing, if requested and -- Output the result of the preprocessing, if requested and
-- the source has been modified by the preprocessing. -- the source has been modified by the preprocessing. Only
-- do that for the main unit (spec, body and subunits).
if Generate_Processed_File and then Modified then
if Generate_Processed_File and then
Modified and then
((Compiler_State = Parsing
and then Parsing_Main_Extended_Source)
or else
(Compiler_State = Analyzing
and then Analysing_Subunit_Of_Main))
then
declare declare
FD : File_Descriptor; FD : File_Descriptor;
NB : Integer; NB : Integer;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment