bindgen.adb: Minor reformatting

* bindgen.adb: Minor reformatting

	* cstand.adb: Minor reformatting

	* fmap.adb: Minor reformatting
	Change name from Add for Add_To_File_Map (Add is much too generic)
	Change Path_Name_Of to Mapped_Path_Name
	Change File_Name_Of to Mapped_File_Name
	Fix copyright dates in header

	* fmap.ads:
	Change name from Add for Add_To_File_Map (Add is much too generic)
	Change Path_Name_Of to Mapped_Path_Name
	Change File_Name_Of to Mapped_File_Name
	Fix copyright dates in header

	* fname-uf.adb: Minor reformatting.  New names of stuff in Fmap.
	Add use clause for Fmap.

	* make.adb: Minor reformatting

	* osint.adb: Minor reformatting.  Change of names in Fmap.
	Add use clause for Fmap.

	* prj-env.adb: Minor reformatting

	* prj-env.ads: Minor reformatting

	* switch.adb: Minor reformatting.  Do proper raise of Bad_Switch if
	error found (there were odd exceptions to this general rule in
	-gnatec/-gnatem processing)

	* raise.c (__gnat_eh_personality): Exception handling personality
	routine for Ada.  Still in rough state, inspired from the C++ version
	and still containing a bunch of debugging artifacts.
	(parse_lsda_header, get_ttype_entry): Local (static) helpers, also
	inspired from the C++ library.

	* raise.c (eh_personality): Add comments. Part of work for the GCC 3
	exception handling integration.

	* Makefile.in: Remove use of 5smastop.adb which is obsolete.
	(HIE_SOURCES): Add s-secsta.ad{s,b}.
	(HIE_OBJS): Add s-fat*.o
	(RAVEN_SOURCES): Remove files that are no longer required. Add
	interrupt handling files.
	(RAVEN_MOD): Removed, no longer needed.

	* a-ngelfu.adb: Remove ??? comment for inappropriate Inline_Always
	Add 2001 to copyright date

	* g-regpat.adb: Change pragma Inline_Always to Inline. There is no
	need to force universal inlining for these cases.

	* s-taprob.adb: Minor clean ups so that this unit can be used in
	Ravenscar HI.

	* exp_ch7.adb: Allow use of secondary stack in HI mode.
	Disallow it when pragma Restrictions (No_Secondary_Stack) is specified.

	* prj-tree.ads (Project_Node_Record): Add comments for components
	Pkg_Id and Case_Insensitive.

	* g-socket.adb: Minor reformatting. Found while reading code.

	* prj-tree.ads: Minor reformatting

From-SVN: r48195
This commit is contained in:
Geert Bosch 2001-12-20 07:22:43 +01:00
parent a004eb826e
commit 17c5c8a5ee
19 changed files with 788 additions and 178 deletions

View File

@ -1,3 +1,86 @@
2001-12-19 Robert Dewar <dewar@gnat.com>
* bindgen.adb: Minor reformatting
* cstand.adb: Minor reformatting
* fmap.adb: Minor reformatting
Change name from Add for Add_To_File_Map (Add is much too generic)
Change Path_Name_Of to Mapped_Path_Name
Change File_Name_Of to Mapped_File_Name
Fix copyright dates in header
* fmap.ads:
Change name from Add for Add_To_File_Map (Add is much too generic)
Change Path_Name_Of to Mapped_Path_Name
Change File_Name_Of to Mapped_File_Name
Fix copyright dates in header
* fname-uf.adb: Minor reformatting. New names of stuff in Fmap.
Add use clause for Fmap.
* make.adb: Minor reformatting
* osint.adb: Minor reformatting. Change of names in Fmap.
Add use clause for Fmap.
* prj-env.adb: Minor reformatting
* prj-env.ads: Minor reformatting
* switch.adb: Minor reformatting. Do proper raise of Bad_Switch if
error found (there were odd exceptions to this general rule in
-gnatec/-gnatem processing)
2001-12-19 Olivier Hainque <hainque@gnat.com>
* raise.c (__gnat_eh_personality): Exception handling personality
routine for Ada. Still in rough state, inspired from the C++ version
and still containing a bunch of debugging artifacts.
(parse_lsda_header, get_ttype_entry): Local (static) helpers, also
inspired from the C++ library.
* raise.c (eh_personality): Add comments. Part of work for the GCC 3
exception handling integration.
2001-12-19 Arnaud Charlet <charlet@gnat.com>
* Makefile.in: Remove use of 5smastop.adb which is obsolete.
(HIE_SOURCES): Add s-secsta.ad{s,b}.
(HIE_OBJS): Add s-fat*.o
(RAVEN_SOURCES): Remove files that are no longer required. Add
interrupt handling files.
(RAVEN_MOD): Removed, no longer needed.
2001-12-19 Robert Dewar <dewar@gnat.com>
* a-ngelfu.adb: Remove ??? comment for inappropriate Inline_Always
Add 2001 to copyright date
* g-regpat.adb: Change pragma Inline_Always to Inline. There is no
need to force universal inlining for these cases.
2001-12-19 Arnaud Charlet <charlet@gnat.com>
* s-taprob.adb: Minor clean ups so that this unit can be used in
Ravenscar HI.
* exp_ch7.adb: Allow use of secondary stack in HI mode.
Disallow it when pragma Restrictions (No_Secondary_Stack) is specified.
2001-12-19 Vincent Celier <celier@gnat.com>
* prj-tree.ads (Project_Node_Record): Add comments for components
Pkg_Id and Case_Insensitive.
2001-12-19 Pascal Obry <obry@gnat.com>
* g-socket.adb: Minor reformatting. Found while reading code.
2001-12-19 Robert Dewar <dewar@gnat.com>
* prj-tree.ads: Minor reformatting
2001-12-20 Joseph S. Myers <jsm28@cam.ac.uk>
* config-lang.in (diff_excludes): Remove.

View File

@ -1060,7 +1060,6 @@ ifeq ($(strip $(filter-out sparc sun solaris2% sunos5%,$(targ))),)
a-intnam.ads<4sintnam.ads \
s-inmaop.adb<7sinmaop.adb \
s-intman.adb<5sintman.adb \
s-mastop.adb<5smastop.adb \
s-osinte.adb<5sosinte.adb \
s-osinte.ads<5sosinte.ads \
s-osprim.adb<5posprim.adb \
@ -1086,7 +1085,6 @@ ifeq ($(strip $(filter-out sparc sun solaris2% sunos5%,$(targ))),)
a-intnam.ads<4sintnam.ads \
s-inmaop.adb<7sinmaop.adb \
s-intman.adb<5sintman.adb \
s-mastop.adb<5smastop.adb \
s-osinte.adb<7sosinte.adb \
s-osinte.ads<5tosinte.ads \
s-osprim.adb<5posprim.adb \
@ -1105,7 +1103,6 @@ ifeq ($(strip $(filter-out sparc sun solaris2% sunos5%,$(targ))),)
a-intnam.ads<4sintnam.ads \
s-inmaop.adb<7sinmaop.adb \
s-intman.adb<7sintman.adb \
s-mastop.adb<5smastop.adb \
s-osinte.adb<5iosinte.adb \
s-osinte.ads<54osinte.ads \
s-osprim.adb<5posprim.adb \
@ -1909,6 +1906,8 @@ HIE_SOURCES = \
s-fatlfl.ads \
s-fatllf.ads \
s-fatsfl.ads \
s-secsta.ads \
s-secsta.adb \
a-tags.ads \
a-tags.adb $(EXTRA_HIE_SOURCES)
@ -1923,23 +1922,19 @@ HIE_OBJS = \
s-stoele.o \
s-maccod.o \
s-unstyp.o \
s-fatflt.o \
s-fatlfl.o \
s-fatllf.o \
s-secsta.o \
a-tags.o $(EXTRA_HIE_OBJS)
# Files which are needed in ravenscar mode
RAVEN_SOURCES = \
$(HIE_SOURCES) \
s-arit64.ads \
s-arit64.adb \
s-parame.ads \
s-parame.adb \
g-except.ads \
s-stalib.ads \
s-stalib.adb \
s-soflin.ads \
s-soflin.adb \
s-secsta.ads \
s-secsta.adb \
s-osinte.ads \
s-osinte.adb \
s-tasinf.ads \
@ -1948,9 +1943,12 @@ RAVEN_SOURCES = \
s-taprop.ads \
s-taprop.adb \
s-taskin.ads \
s-taskin.adb \
s-interr.ads \
s-interr.adb \
s-taskin.adb \
a-interr.ads \
a-interr.adb \
a-intnam.ads \
a-reatim.ads \
a-reatim.adb \
a-retide.ads \
@ -1963,33 +1961,24 @@ RAVEN_SOURCES = \
s-tarest.ads \
s-tarest.adb $(EXTRA_RAVEN_SOURCES)
# Files that need to be preprocessed before inclusion in a ravenscar run time
RAVEN_MOD = \
s-tposen.adb \
s-tarest.adb
# Objects to generate for the ravenscar run time
RAVEN_OBJS = \
$(HIE_OBJS) \
g-except.o \
s-stalib.o \
s-arit64.o \
s-parame.o \
s-soflin.o \
s-secsta.o \
s-tasinf.o \
g-except.o \
s-osinte.o \
s-tasinf.o \
s-taspri.o \
s-taprop.o \
s-taskin.o \
s-taprob.o \
s-tposen.o \
s-interr.o \
a-interr.o \
a-intnam.o \
a-reatim.o \
a-retide.o \
s-taprob.o \
s-tposen.o \
s-tasres.o \
s-tarest.o $(EXTRA_RAVEN_OBJS)

View File

@ -6,9 +6,9 @@
-- --
-- B o d y --
-- --
-- $Revision: 1.44 $
-- $Revision$
-- --
-- Copyright (C) 1992-2000, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2001, 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- --
@ -52,11 +52,9 @@ package body Ada.Numerics.Generic_Elementary_Functions is
Log_Two : constant := 0.69314_71805_59945_30941_72321_21458_17656_80755;
Half_Log_Two : constant := Log_Two / 2;
subtype T is Float_Type'Base;
subtype Double is Aux.Double;
Two_Pi : constant T := 2.0 * Pi;
Half_Pi : constant T := Pi / 2.0;
Fourth_Pi : constant T := Pi / 4.0;
@ -68,7 +66,6 @@ package body Ada.Numerics.Generic_Elementary_Functions is
Log_Inverse_Epsilon : constant T := T (T'Model_Mantissa - 1) * Log_Two;
Sqrt_Epsilon : constant T := Sqrt_Two ** (1 - T'Model_Mantissa);
DEpsilon : constant Double := Double (Epsilon);
DIEpsilon : constant Double := Double (IEpsilon);
@ -558,7 +555,6 @@ package body Ada.Numerics.Generic_Elementary_Functions is
-- Just reuse the code for Sin. The potential small
-- loss of speed is negligible with proper (front-end) inlining.
-- ??? Add pragma Inline_Always in spec when this is supported
return -Sin (abs X - Cycle * 0.25, Cycle);
end Cos;
@ -716,7 +712,6 @@ package body Ada.Numerics.Generic_Elementary_Functions is
Q := ((Q3 * Z + Q2) * Z + Q1) * Z + Q0;
R := 0.5 + P / (Q - P);
R := Float_Type'Base'Scaling (R, Integer (XN) + 1);
-- Deal with case of Exp returning IEEE infinity. If Machine_Overflows
@ -732,7 +727,6 @@ package body Ada.Numerics.Generic_Elementary_Functions is
end Exp_Strict;
----------------
-- Local_Atan --
----------------

View File

@ -343,16 +343,16 @@ package body Bindgen is
Write_Statement_Buffer;
-- Normal case (no pragma No_Run_Time). The global values are
-- Normal case (not No_Run_Time mode). The global values are
-- assigned using the runtime routine Set_Globals (we have to use
-- the routine call, rather than define the globals in the binder
-- file to deal with cross-library calls in some systems.
if No_Run_Time_Specified then
-- Case of pragma No_Run_Time present. The only global variable
-- that might be needed (by the Ravenscar profile) is
-- the environment task's priority. Also no exception tables are
-- needed.
-- Case of No_Run_Time mode. The only global variable that might
-- be needed (by the Ravenscar profile) is the priority of the
-- environment. Also no exception tables are needed.
if Main_Priority /= No_Main_Priority then
WBI (" Main_Priority : Integer;");
@ -513,8 +513,9 @@ package body Bindgen is
Write_Statement_Buffer;
if No_Run_Time_Specified then
-- Case where No_Run_Time pragma is present.
-- Set __gl_main_priority if needed for the Ravenscar profile.
-- Case of No_Run_Time mode. Set __gl_main_priority if needed
-- for the Ravenscar profile.
if Main_Priority /= No_Main_Priority then
Set_String (" extern int __gl_main_priority = ");
@ -524,7 +525,7 @@ package body Bindgen is
end if;
else
-- Code for normal case (no pragma No_Run_Time in use)
-- Code for normal case (not in No_Run_Time mode)
Gen_Exception_Table_C;

View File

@ -1001,10 +1001,14 @@ package body CStand is
Set_Size_Known_At_Compile_Time
(Universal_Fixed);
-- Create type declaration for Duration, using a 64-bit size.
-- Delta is 1 nanosecond.
-- Except on 32 bits machine in No_Run_Time mode, in which case Duration
-- is a 32 bits value whose delta is 10E-4 seconds.
-- Create type declaration for Duration, using a 64-bit size. The
-- delta value depends on the mode we are running in:
-- Normal mode or No_Run_Time mode when word size is 64 bits:
-- 10**(-9) seconds, size is 64 bits
-- No_Run_Time mode when word size is 32 bits:
-- 10**(-4) seconds, oize is 32 bits
Build_Duration : declare
Dlo : Uint;
@ -1018,6 +1022,7 @@ package body CStand is
Dlo := Intval (Type_Low_Bound (Standard_Integer_32));
Dhi := Intval (Type_High_Bound (Standard_Integer_32));
Delta_Val := UR_From_Components (Uint_1, Uint_4, 10);
else
Dlo := Intval (Type_Low_Bound (Standard_Integer_64));
Dhi := Intval (Type_High_Bound (Standard_Integer_64));

View File

@ -601,7 +601,7 @@ package body Exp_Ch7 is
if Sec_Stk then
Set_Uses_Sec_Stack (Current_Scope);
Disallow_In_No_Run_Time_Mode (N);
Check_Restriction (No_Secondary_Stack, N);
end if;
Set_Etype (Current_Scope, Standard_Void_Type);
@ -2449,7 +2449,7 @@ package body Exp_Ch7 is
if not Requires_Transient_Scope (Etype (S)) then
if not Functions_Return_By_DSP_On_Target then
Set_Uses_Sec_Stack (S, True);
Disallow_In_No_Run_Time_Mode (Action);
Check_Restriction (No_Secondary_Stack, Action);
end if;
end if;
@ -2470,7 +2470,7 @@ package body Exp_Ch7 is
then
if not Functions_Return_By_DSP_On_Target then
Set_Uses_Sec_Stack (S, True);
Disallow_In_No_Run_Time_Mode (Action);
Check_Restriction (No_Secondary_Stack, Action);
end if;
Set_Uses_Sec_Stack (Current_Scope, False);
@ -2703,7 +2703,7 @@ package body Exp_Ch7 is
null;
else
Set_Uses_Sec_Stack (S);
Disallow_In_No_Run_Time_Mode (N);
Check_Restriction (No_Secondary_Stack, N);
end if;
end if;
end Wrap_Transient_Declaration;

View File

@ -6,9 +6,9 @@
-- --
-- B o d y --
-- --
-- $Revision$
-- $Revision: 1.1 $
-- --
-- Copyright (C) 1992-2001, Free Software Foundation, Inc. --
-- Copyright (C) 2001, 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- --
@ -26,7 +26,6 @@
-- --
------------------------------------------------------------------------------
with GNAT.HTable;
with Namet; use Namet;
with Osint; use Osint;
with Output; use Output;
@ -34,6 +33,8 @@ with Table;
with Unchecked_Conversion;
with GNAT.HTable;
package body Fmap is
subtype Big_String is String (Positive);
@ -63,6 +64,7 @@ package body Fmap is
type Header_Num is range 0 .. 1_000;
function Hash (F : Unit_Name_Type) return Header_Num;
-- Function used to compute hash of unit name
No_Entry : constant Int := -1;
-- Signals no entry in following table
@ -87,14 +89,15 @@ package body Fmap is
-- Hash table to map file names to path names. Used in conjunction with
-- table Path_Mapping above.
---------
-- Add --
---------
---------------------
-- Add_To_File_Map --
---------------------
procedure Add
procedure Add_To_File_Map
(Unit_Name : Unit_Name_Type;
File_Name : File_Name_Type;
Path_Name : File_Name_Type) is
Path_Name : File_Name_Type)
is
begin
File_Mapping.Increment_Last;
Unit_Hash_Table.Set (Unit_Name, File_Mapping.Last);
@ -102,23 +105,7 @@ package body Fmap is
Path_Mapping.Increment_Last;
File_Hash_Table.Set (File_Name, Path_Mapping.Last);
Path_Mapping.Table (Path_Mapping.Last) := Path_Name;
end Add;
------------------
-- File_Name_Of --
------------------
function File_Name_Of (Unit : Unit_Name_Type) return File_Name_Type is
The_Index : constant Int := Unit_Hash_Table.Get (Unit);
begin
if The_Index = No_Entry then
return No_File;
else
return File_Mapping.Table (The_Index);
end if;
end File_Name_Of;
end Add_To_File_Map;
----------
-- Hash --
@ -174,10 +161,12 @@ package body Fmap is
procedure Get_Line is
use ASCII;
begin
Deb := Fin + 1;
-- If not at the end of file, skip the end of line
while Deb < SP'Last
and then (SP (Deb) = CR
or else SP (Deb) = LF
@ -213,7 +202,7 @@ package body Fmap is
Write_Line (""" is truncated");
end Report_Truncated;
-- start of procedure Initialize
-- Start of procedure Initialize
begin
Name_Len := File_Name'Length;
@ -230,7 +219,6 @@ package body Fmap is
SP := BS (1 .. Natural (Hi))'Unrestricted_Access;
loop
-- Get the unit name
Get_Line;
@ -303,30 +291,41 @@ package body Fmap is
-- Add the mappings for this unit name
Add (Uname, Fname, Pname);
Add_To_File_Map (Uname, Fname, Pname);
end loop;
end if;
end Initialize;
------------------
-- Path_Name_Of --
------------------
----------------------
-- Mapped_File_Name --
----------------------
function Path_Name_Of (File : File_Name_Type) return File_Name_Type is
function Mapped_File_Name (Unit : Unit_Name_Type) return File_Name_Type is
The_Index : constant Int := Unit_Hash_Table.Get (Unit);
begin
if The_Index = No_Entry then
return No_File;
else
return File_Mapping.Table (The_Index);
end if;
end Mapped_File_Name;
----------------------
-- Mapped_Path_Name --
----------------------
function Mapped_Path_Name (File : File_Name_Type) return File_Name_Type is
Index : Int := No_Entry;
begin
Index := File_Hash_Table.Get (File);
if Index = No_Entry then
return No_File;
else
return Path_Mapping.Table (Index);
end if;
end Path_Name_Of;
end Mapped_Path_Name;
end Fmap;

View File

@ -6,9 +6,9 @@
-- --
-- S p e c --
-- --
-- $Revision$
-- $Revision: 1.1 $
-- --
-- Copyright (C) 1992-2001, Free Software Foundation, Inc. --
-- Copyright (C) 2001, 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- --
@ -38,15 +38,15 @@ package Fmap is
-- If the mapping file is incorrect (non existent file, truncated file,
-- duplicate entries), output a warning and do not initialize the mappings.
function Path_Name_Of (File : File_Name_Type) return File_Name_Type;
function Mapped_Path_Name (File : File_Name_Type) return File_Name_Type;
-- Return the path name mapped to the file name File.
-- Return No_File if File is not mapped.
function File_Name_Of (Unit : Unit_Name_Type) return File_Name_Type;
function Mapped_File_Name (Unit : Unit_Name_Type) return File_Name_Type;
-- Return the file name mapped to the unit name Unit.
-- Return No_File if Unit is not mapped.
procedure Add
procedure Add_To_File_Map
(Unit_Name : Unit_Name_Type;
File_Name : File_Name_Type;
Path_Name : File_Name_Type);

View File

@ -28,7 +28,7 @@
with Alloc;
with Debug; use Debug;
with Fmap;
with Fmap; use Fmap;
with Krunch;
with Namet; use Namet;
with Opt; use Opt;
@ -140,6 +140,7 @@ package body Fname.UF is
Pname : File_Name_Type := No_File;
Fname : File_Name_Type := No_File;
-- Path name and File name for mapping
begin
-- Null or error name means that some previous error occurred
@ -149,12 +150,12 @@ package body Fname.UF is
raise Unrecoverable_Error;
end if;
-- Look into the mapping from unit names to file names
-- Look in the map from unit names to file names
Fname := Fmap.File_Name_Of (Uname);
Fname := Mapped_File_Name (Uname);
-- If the unit name is already mapped, return the corresponding
-- file name.
-- file name from the map.
if Fname /= No_File then
return Fname;
@ -394,7 +395,7 @@ package body Fname.UF is
-- Add to mapping, so that we don't do another
-- path search in Find_File for this file name
Fmap.Add (Get_File_Name.Uname, Fnam, Pname);
Add_To_File_Map (Get_File_Name.Uname, Fnam, Pname);
return Fnam;
-- This entry does not match after all, because this is

View File

@ -245,9 +245,9 @@ package body GNAT.Regpat is
procedure Reset_Class (Bitmap : in out Character_Class);
-- Clear all the entries in the class Bitmap.
pragma Inline_Always (Set_In_Class);
pragma Inline_Always (Get_From_Class);
pragma Inline_Always (Reset_Class);
pragma Inline (Set_In_Class);
pragma Inline (Get_From_Class);
pragma Inline (Reset_Class);
-----------------------
-- Local Subprograms --
@ -512,9 +512,9 @@ package body GNAT.Regpat is
-- Parse a posic character class, like [:alpha:] or [:^alpha:].
-- The called is suppoed to absorbe the opening [.
pragma Inline_Always (Is_Mult);
pragma Inline_Always (Emit_Natural);
pragma Inline_Always (Parse_Character_Class); -- since used only once
pragma Inline (Is_Mult);
pragma Inline (Emit_Natural);
pragma Inline (Parse_Character_Class); -- since used only once
---------------
-- Case_Emit --
@ -2401,12 +2401,13 @@ package body GNAT.Regpat is
return Boolean;
-- Return True it the simple operator (possibly non-greedy) matches
pragma Inline_Always (Index);
pragma Inline_Always (Repeat);
pragma Inline (Index);
pragma Inline (Repeat);
-- These are two complex functions, but used only once.
pragma Inline_Always (Match_Whilem);
pragma Inline_Always (Match_Simple_Operator);
pragma Inline (Match_Whilem);
pragma Inline (Match_Simple_Operator);
-----------
-- Index --

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- $Revision: 1.21 $
-- $Revision$
-- --
-- Copyright (C) 2001 Ada Core Technologies, Inc. --
-- --
@ -166,8 +166,7 @@ package body GNAT.Sockets is
-- Types needed for Datagram_Socket_Stream_Type
type Datagram_Socket_Stream_Type is new Root_Stream_Type with
record
type Datagram_Socket_Stream_Type is new Root_Stream_Type with record
Socket : Socket_Type;
To : Sock_Addr_Type;
From : Sock_Addr_Type;
@ -187,8 +186,7 @@ package body GNAT.Sockets is
-- Types needed for Stream_Socket_Stream_Type
type Stream_Socket_Stream_Type is new Root_Stream_Type with
record
type Stream_Socket_Stream_Type is new Root_Stream_Type with record
Socket : Socket_Type;
end record;

View File

@ -3501,7 +3501,6 @@ package body Make is
begin
Delete_File (Name => Mapping_File_Name, Success => Success);
end;
end if;
Exit_Program (E_Success);

View File

@ -26,7 +26,7 @@
-- --
------------------------------------------------------------------------------
with Fmap;
with Fmap; use Fmap;
with Hostparm;
with Namet; use Namet;
with Opt; use Opt;
@ -996,16 +996,16 @@ package body Osint is
-- directory where the user said it was.
elsif Look_In_Primary_Directory_For_Current_Main
and then Current_Main = N then
and then Current_Main = N
then
return Locate_File (N, T, Primary_Directory, File_Name);
-- Otherwise do standard search for source file
else
-- Check the mapping of this file name
File := Fmap.Path_Name_Of (N);
File := Mapped_Path_Name (N);
-- If the file name is mapped to a path name, return the
-- corresponding path name

View File

@ -804,6 +804,10 @@ package body Prj.Env is
-- Put the mapping of the spec or body contained in Data in the file
-- (3 lines).
---------
-- Put --
---------
procedure Put (S : String) is
Last : Natural;
@ -813,9 +817,12 @@ package body Prj.Env is
if Last /= S'Length then
Osint.Fail ("Disk full");
end if;
end Put;
--------------
-- Put_Data --
--------------
procedure Put_Data (Spec : Boolean) is
begin
Put (Get_Name_String (The_Unit_Data.Name));
@ -833,6 +840,8 @@ package body Prj.Env is
Put (S => (1 => ASCII.LF));
end Put_Data;
-- Start of processing for Create_Mapping_File
begin
GNAT.OS_Lib.Create_Temp_File (File, Name => Name);
@ -938,7 +947,7 @@ package body Prj.Env is
for Current in reverse Units.First .. Units.Last loop
Unit := Units.Table (Current);
-- If it is a unit of the same project
-- Case of unit of the same project
if Unit.File_Names (Body_Part).Project = Project then
declare
@ -946,7 +955,7 @@ package body Prj.Env is
Unit.File_Names (Body_Part).Name;
begin
-- If there is a body
-- Case of a body present
if Current_Name /= No_Name then
if Current_Verbosity = High then
@ -987,7 +996,7 @@ package body Prj.Env is
end;
end if;
-- If it is a unit of the same project
-- Case of a unit of the same project
if Units.Table (Current).File_Names (Specification).Project =
Project
@ -997,7 +1006,7 @@ package body Prj.Env is
Unit.File_Names (Specification).Name;
begin
-- If there is a spec
-- Case of spec present
if Current_Name /= No_Name then
if Current_Verbosity = High then
@ -1007,8 +1016,7 @@ package body Prj.Env is
Write_Eol;
end if;
-- If it has the same name as the original name,
-- return the original name
-- If name same as the original name, return original name
if Unit.Name = The_Original_Name
or else Current_Name = The_Original_Name
@ -1020,7 +1028,7 @@ package body Prj.Env is
return Get_Name_String (Current_Name);
-- If it has the same name as the extended spec name,
-- return the extended spec name
-- return the extended spec name.
elsif Current_Name = The_Spec_Name then
if Current_Verbosity = High then

View File

@ -40,9 +40,8 @@ package Prj.Env is
-- Output the list of sources, after Project files have been scanned
procedure Create_Mapping_File (Name : in out Temp_File_Name);
-- Create a temporary mapping file.
-- For each unit, put the mapping of its spec and or body to its
-- file name and path name in this file.
-- Create a temporary mapping file. For each unit, put the mapping of
-- its spec and or body to its file name and path name in this file.
procedure Create_Config_Pragmas_File
(For_Project : Project_Id;

View File

@ -38,11 +38,13 @@ with Table;
package Prj.Tree is
Project_Nodes_Initial : constant := 1_000;
-- Initial number of nodes in table Tree_Private_Part.Project_Nodes
Project_Nodes_Increment : constant := 100;
-- Allocation parameters for initializing and extending number
-- of nodes in table Tree_Private_Part.Project_Nodes
Project_Node_Low_Bound : constant := 0;
Project_Node_High_Bound : constant := 099_999_999; -- In practice, infinite
Project_Node_High_Bound : constant := 099_999_999;
-- Range of values for project node id's (in practice infinite)
type Project_Node_Id is range
Project_Node_Low_Bound .. Project_Node_High_Bound;
@ -50,15 +52,16 @@ package Prj.Tree is
Empty_Node : constant Project_Node_Id := Project_Node_Low_Bound;
-- Designates no node in table Project_Nodes
First_Node_Id : constant Project_Node_Id := Project_Node_Low_Bound;
subtype Variable_Node_Id is Project_Node_Id;
-- Used to designate a node whose expected kind is
-- Used to designate a node whose expected kind is one of
-- N_Typed_Variable_Declaration, N_Variable_Declaration or
-- N_Variable_Reference.
subtype Package_Declaration_Id is Project_Node_Id;
-- Used to designate a node whose expected kind is
-- N_Project_Declaration.
-- Used to designate a node whose expected kind is N_Proect_Declaration
type Project_Node_Kind is
(N_Project,
@ -516,7 +519,14 @@ package Prj.Tree is
-- First package declaration in a project
Pkg_Id : Package_Node_Id := Empty_Package;
-- Only use in Package_Declaration
-- Only used for N_Package_Declaration
-- The component Pkg_Id is an entry into the table Package_Attributes
-- (in Prj.Attr). It is used to indicate all the attributes of the
-- package with their characteristics.
--
-- The tables Prj.Attr.Attributes and Prj.Attr.Package_Attributes
-- are built once and for all through a call (from Prj.Initialize)
-- to procedure Prj.Attr.Initialize. It is never modified after that.
Name : Name_Id := No_Name;
-- See below for what Project_Node_Kind it is used
@ -537,6 +547,7 @@ package Prj.Tree is
-- See below the meaning for each Project_Node_Kind
Case_Insensitive : Boolean := False;
-- Significant only for N_Attribute_Declaration
-- Indicates, for an associative array attribute, that the
-- index is case insensitive.
@ -728,8 +739,10 @@ package Prj.Tree is
type Project_Name_And_Node is record
Name : Name_Id;
-- Name of the project
Node : Project_Node_Id;
-- Node of the project in table Project_Nodes
Modified : Boolean;
-- True when the project is being modified by another project
end record;

View File

@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
* $Revision: 1.1 $
* $Revision$
* *
* Copyright (C) 1992-2001, Free Software Foundation, Inc. *
* *
@ -84,3 +84,527 @@ __gnat_unhandled_terminate ()
__gnat_os_exit (1);
#endif
}
/* Below is the eh personality routine for Ada to be called when the GCC
mechanism is used.
??? It is currently inspired from the one for C++, needs cleanups and
additional comments. It also contains a big bunch of debugging code that
we shall get rid of at some point. */
#ifdef IN_RTS /* For eh personality routine */
/* ??? Does it make any sense to leave this for the compiler ? */
#include "dwarf2.h"
#include "unwind.h"
#include "unwind-dw2-fde.h"
#include "unwind-pe.h"
/* First define a set of useful structures and helper routines. */
typedef struct _Unwind_Context _Unwind_Context;
struct lsda_header_info
{
_Unwind_Ptr Start;
_Unwind_Ptr LPStart;
_Unwind_Ptr ttype_base;
const unsigned char *TType;
const unsigned char *action_table;
unsigned char ttype_encoding;
unsigned char call_site_encoding;
};
typedef struct lsda_header_info lsda_header_info;
typedef enum {false = 0, true = 1} bool;
static const unsigned char *
parse_lsda_header (_Unwind_Context *context, const unsigned char *p,
lsda_header_info *info)
{
_Unwind_Ptr tmp;
unsigned char lpstart_encoding;
info->Start = (context ? _Unwind_GetRegionStart (context) : 0);
/* Find @LPStart, the base to which landing pad offsets are relative. */
lpstart_encoding = *p++;
if (lpstart_encoding != DW_EH_PE_omit)
p = read_encoded_value (context, lpstart_encoding, p, &info->LPStart);
else
info->LPStart = info->Start;
/* Find @TType, the base of the handler and exception spec type data. */
info->ttype_encoding = *p++;
if (info->ttype_encoding != DW_EH_PE_omit)
{
p = read_uleb128 (p, &tmp);
info->TType = p + tmp;
}
else
info->TType = 0;
/* The encoding and length of the call-site table; the action table
immediately follows. */
info->call_site_encoding = *p++;
p = read_uleb128 (p, &tmp);
info->action_table = p + tmp;
return p;
}
static const _Unwind_Ptr
get_ttype_entry (_Unwind_Context *context, lsda_header_info *info, long i)
{
_Unwind_Ptr ptr;
i *= size_of_encoded_value (info->ttype_encoding);
read_encoded_value (context, info->ttype_encoding, info->TType - i, &ptr);
return ptr;
}
/* This is the structure of exception objects as built by the GNAT runtime
library (a-except.adb). The layouts should exactly match, and the "common"
header is mandated by the exception handling ABI. */
struct _GNAT_Exception {
struct _Unwind_Exception common;
_Unwind_Ptr id;
char handled_by_others;
char has_cleanup;
char select_cleanups;
};
/* The two constants below are specific ttype identifiers for special
exception ids. Their value is currently hardcoded at the gigi level
(see N_Exception_Handler). */
#define GNAT_OTHERS_ID ((_Unwind_Ptr) 0x0)
#define GNAT_ALL_OTHERS_ID ((_Unwind_Ptr) 0x1)
/* The DB stuff below is there for debugging purposes only. */
#define DB_PHASES 0x1
#define DB_SEARCH 0x2
#define DB_ECLASS 0x4
#define DB_MATCH 0x8
#define DB_SAW 0x10
#define DB_FOUND 0x20
#define DB_INSTALL 0x40
#define DB_CALLS 0x80
#define AEHP_DB_SPECS \
(DB_PHASES | DB_SEARCH | DB_SAW | DB_FOUND | DB_INSTALL | DB_CALLS | DB_MATCH)
#undef AEHP_DB_SPECS
#ifdef AEHP_DB_SPECS
static int db_specs = AEHP_DB_SPECS;
#else
static int db_specs = 0;
#endif
#define START_DB(what) do { if (what & db_specs) {
#define END_DB(what) } \
} while (0);
/* The "action" stuff below if also there for debugging purposes only. */
typedef struct {
_Unwind_Action action;
char * description;
} action_description_t;
action_description_t action_descriptions [] = {
{ _UA_SEARCH_PHASE, "SEARCH_PHASE" },
{ _UA_CLEANUP_PHASE, "CLEANUP_PHASE" },
{ _UA_HANDLER_FRAME, "HANDLER_FRAME" },
{ _UA_FORCE_UNWIND, "FORCE_UNWIND" },
{ -1, (char *)0 }
};
static void
decode_actions (actions)
_Unwind_Action actions;
{
int i;
action_description_t * a = action_descriptions;
printf ("\n");
while (a->description != (char *)0)
{
if (actions & a->action)
{
printf ("%s ", a->description);
}
a ++;
}
printf (" : ");
}
/* The following is defined from a-except.adb. It's purpose is to enable
automatic backtraces upon exception raise, as provided through the
GNAT.Traceback facilities. */
extern void
__gnat_notify_handled_exception (void * handler, bool others, bool db_notify);
/* Below is the eh personality routine per se. */
_Unwind_Reason_Code
__gnat_eh_personality (int version,
_Unwind_Action actions,
_Unwind_Exception_Class exception_class,
struct _Unwind_Exception *ue_header,
struct _Unwind_Context *context)
{
enum found_handler_type
{
found_nothing,
found_terminate,
found_cleanup,
found_handler
} found_type;
lsda_header_info info;
const unsigned char *language_specific_data;
const unsigned char *action_record;
const unsigned char *p;
_Unwind_Ptr landing_pad, ip;
int handler_switch_value;
bool hit_others_handler;
struct _GNAT_Exception * gnat_exception;
if (version != 1)
return _URC_FATAL_PHASE1_ERROR;
START_DB (DB_PHASES);
decode_actions (actions);
END_DB (DB_PHASES);
if (strcmp ( ((char *)&exception_class), "GNU") != 0
|| strcmp ( ((char *)&exception_class)+4, "Ada") != 0)
{
START_DB (DB_SEARCH);
printf (" Exception Class doesn't match for ip = %p\n", ip);
END_DB (DB_SEARCH);
START_DB (DB_FOUND);
printf (" => FOUND nothing\n");
END_DB (DB_FOUND);
return _URC_CONTINUE_UNWIND;
}
gnat_exception = (struct _GNAT_Exception *) ue_header;
START_DB (DB_PHASES);
if (gnat_exception->select_cleanups)
{
printf ("(select_cleanups) :\n");
}
else
{
printf (" :\n");
}
END_DB (DB_PHASES);
language_specific_data = (const unsigned char *)
_Unwind_GetLanguageSpecificData (context);
/* If no LSDA, then there are no handlers or cleanups. */
if (! language_specific_data)
{
ip = _Unwind_GetIP (context) - 1;
START_DB (DB_SEARCH);
printf (" No Language Specific Data for ip = %p\n", ip);
END_DB (DB_SEARCH);
START_DB (DB_FOUND);
printf (" => FOUND nothing\n");
END_DB (DB_FOUND);
return _URC_CONTINUE_UNWIND;
}
/* Parse the LSDA header. */
p = parse_lsda_header (context, language_specific_data, &info);
info.ttype_base = base_of_encoded_value (info.ttype_encoding, context);
ip = _Unwind_GetIP (context) - 1;
landing_pad = 0;
action_record = 0;
handler_switch_value = 0;
/* Search the call-site table for the action associated with this IP. */
while (p < info.action_table)
{
_Unwind_Ptr cs_start, cs_len, cs_lp, cs_action;
/* Note that all call-site encodings are "absolute" displacements. */
p = read_encoded_value (0, info.call_site_encoding, p, &cs_start);
p = read_encoded_value (0, info.call_site_encoding, p, &cs_len);
p = read_encoded_value (0, info.call_site_encoding, p, &cs_lp);
p = read_uleb128 (p, &cs_action);
/* The table is sorted, so if we've passed the ip, stop. */
if (ip < info.Start + cs_start)
p = info.action_table;
else if (ip < info.Start + cs_start + cs_len)
{
if (cs_lp)
landing_pad = info.LPStart + cs_lp;
if (cs_action)
action_record = info.action_table + cs_action - 1;
goto found_something;
}
}
START_DB (DB_SEARCH);
printf (" No Action entry for ip = %p\n", ip);
END_DB (DB_SEARCH);
/* If ip is not present in the table, call terminate. This is for
a destructor inside a cleanup, or a library routine the compiler
was not expecting to throw.
found_type =
(actions & _UA_FORCE_UNWIND ? found_nothing : found_terminate);
??? Does this have a mapping in Ada semantics ? */
found_type = found_nothing;
goto do_something;
found_something:
found_type = found_nothing;
if (landing_pad == 0)
{
/* If ip is present, and has a null landing pad, there are
no cleanups or handlers to be run. */
START_DB (DB_SEARCH);
printf (" No Landing Pad for ip = %p\n", ip);
END_DB (DB_SEARCH);
}
else if (action_record == 0)
{
START_DB (DB_SEARCH);
printf (" Null Action Record for ip = %p <===\n", ip);
END_DB (DB_SEARCH);
}
else
{
signed long ar_filter, ar_disp;
signed long cleanup_filter = 0;
signed long handler_filter = 0;
START_DB (DB_SEARCH);
printf (" Landing Pad + Action Record for ip = %p\n", ip);
END_DB (DB_SEARCH);
START_DB (DB_MATCH);
printf (" => Search for exception matching id %p\n",
gnat_exception->id);
END_DB (DB_MATCH);
/* Otherwise we have a catch handler or exception specification. */
while (1)
{
_Unwind_Ptr tmp;
p = action_record;
p = read_sleb128 (p, &tmp); ar_filter = tmp;
read_sleb128 (p, &tmp); ar_disp = tmp;
START_DB (DB_MATCH);
printf ("ar_filter %d\n", ar_filter);
END_DB (DB_MATCH);
if (ar_filter == 0)
{
/* Zero filter values are cleanups. We should not be seeing
this for GNU-Ada though
saw_cleanup = true; */
START_DB (DB_SEARCH);
printf (" Null Filter for ip = %p <===\n", ip);
END_DB (DB_SEARCH);
}
else if (ar_filter > 0)
{
_Unwind_Ptr lp_id = get_ttype_entry (context, &info, ar_filter);
START_DB (DB_MATCH);
printf ("catch_type ");
switch (lp_id)
{
case GNAT_ALL_OTHERS_ID:
printf ("GNAT_ALL_OTHERS_ID\n");
break;
case GNAT_OTHERS_ID:
printf ("GNAT_OTHERS_ID\n");
break;
default:
printf ("%p\n", lp_id);
break;
}
END_DB (DB_MATCH);
if (lp_id == GNAT_ALL_OTHERS_ID)
{
START_DB (DB_SAW);
printf (" => SAW cleanup\n");
END_DB (DB_SAW);
cleanup_filter = ar_filter;
gnat_exception->has_cleanup = true;
}
hit_others_handler =
(lp_id == GNAT_OTHERS_ID && gnat_exception->handled_by_others);
if (hit_others_handler || lp_id == gnat_exception->id)
{
START_DB (DB_SAW);
printf (" => SAW handler\n");
END_DB (DB_SAW);
handler_filter = ar_filter;
}
}
else
{
/* Negative filter values are for C++ exception specifications.
Should not be there for Ada :/ */
}
if (actions & _UA_SEARCH_PHASE)
{
if (handler_filter)
{
found_type = found_handler;
handler_switch_value = handler_filter;
break;
}
if (cleanup_filter)
{
found_type = found_cleanup;
}
}
if (actions & _UA_CLEANUP_PHASE)
{
if (handler_filter)
{
found_type = found_handler;
handler_switch_value = handler_filter;
break;
}
if (cleanup_filter)
{
found_type = found_cleanup;
handler_switch_value = cleanup_filter;
break;
}
}
if (ar_disp == 0)
break;
action_record = p + ar_disp;
}
}
do_something:
if (found_type == found_nothing) {
START_DB (DB_FOUND);
printf (" => FOUND nothing\n");
END_DB (DB_FOUND);
return _URC_CONTINUE_UNWIND;
}
if (actions & _UA_SEARCH_PHASE)
{
START_DB (DB_FOUND);
printf (" => Computing return for SEARCH\n");
END_DB (DB_FOUND);
if (found_type == found_cleanup
&& !gnat_exception->select_cleanups)
{
START_DB (DB_FOUND);
printf (" => FOUND cleanup\n");
END_DB (DB_FOUND);
return _URC_CONTINUE_UNWIND;
}
START_DB (DB_FOUND);
printf (" => FOUND handler\n");
END_DB (DB_FOUND);
return _URC_HANDLER_FOUND;
}
install_context:
START_DB (DB_INSTALL);
printf (" => INSTALLING context for filter %d\n",
handler_switch_value);
END_DB (DB_INSTALL);
if (found_type == found_terminate)
{
/* Should not have this for Ada ? */
START_DB (DB_INSTALL);
printf (" => FOUND terminate <===\n");
END_DB (DB_INSTALL);
}
/* Signal that we are going to enter a handler, which will typically
enable the debugger to take control and possibly output an automatic
backtrace. Note that we are supposed to provide the handler's entry
point here but we don't have it.
*/
__gnat_notify_handled_exception
((void *)landing_pad, hit_others_handler, true);
/* The GNU-Ada exception handlers know how to find the exception
occurrence without having to pass it as an argument so there
is no need to feed any specific register with this information.
This is why the two following lines are commented out. */
/* _Unwind_SetGR (context, __builtin_eh_return_data_regno (0),
(_Unwind_Ptr) &xh->unwindHeader); */
_Unwind_SetGR (context, __builtin_eh_return_data_regno (1),
handler_switch_value);
_Unwind_SetIP (context, landing_pad);
return _URC_INSTALL_CONTEXT;
}
#endif /* IN_RTS - For eh personality routine */

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- $Revision: 1.79 $
-- $Revision$
-- --
-- Copyright (C) 1991-2001 Florida State University --
-- --
@ -42,12 +42,8 @@ with System.Task_Primitives.Operations;
-- used for Write_Lock
-- Unlock
with Ada.Exceptions;
-- used for Raise_Exception
package body System.Tasking.Protected_Objects is
use Ada.Exceptions;
use System.Task_Primitives.Operations;
-------------------------
@ -97,7 +93,7 @@ package body System.Tasking.Protected_Objects is
Write_Lock (Object.L'Access, Ceiling_Violation);
if Ceiling_Violation then
Raise_Exception (Program_Error'Identity, "Ceiling Violation");
raise Program_Error;
end if;
end Lock;
@ -111,7 +107,7 @@ package body System.Tasking.Protected_Objects is
Read_Lock (Object.L'Access, Ceiling_Violation);
if Ceiling_Violation then
Raise_Exception (Program_Error'Identity, "Ceiling Violation");
raise Program_Error;
end if;
end Lock_Read_Only;

View File

@ -610,8 +610,9 @@ package body Switch is
when 'c' =>
Ptr := Ptr + 1;
if Ptr > Max then
Osint.Fail ("Invalid switch: ", "ec");
raise Bad_Switch;
end if;
Config_File_Name :=
@ -623,18 +624,17 @@ package body Switch is
when 'm' =>
Ptr := Ptr + 1;
if Ptr > Max then
Osint.Fail ("Invalid switch: ", "em");
raise Bad_Switch;
end if;
Mapping_File_Name :=
new String'(Switch_Chars (Ptr .. Max));
return;
when others =>
Osint.Fail ("Invalid switch: ",
(1 => 'e', 2 => Switch_Chars (Ptr)));
raise Bad_Switch;
end case;
-- Processing for E switch