[multiple changes]

2009-05-06  Gary Dismukes  <dismukes@adacore.com>

	* sem_aggr.adb (Resolve_Record_Aggregate): In step 5, get the
	Underlying_Type before retrieving the type definition for gathering
	components, to account for the case where the type is private.

2009-05-06  Tristan Gingold  <gingold@adacore.com>

	* g-comlin.ads: Fix minor typos (Getopt instead of Get_Opt).

2009-05-06  Thomas Quinot  <quinot@adacore.com>

	* g-socthi-vms.adb, g-socthi-vms.ads, g-socthi-vxworks.adb,
	g-socthi-vxworks.ads, g-socthi-mingw.adb g-socthi-mingw.ads,
	g-socthi.adb, g-stsifd-sockets.adb, g-socthi.ads, g-socket.adb
	(GNAT.Sockets.Thin.C_Sendmsg, GNAT.Sockets.Thin.C_Recvmsg,
	Windows versions): Fix incorrect base
	address of Iovec (it's Msg_Iov, not Msg_Iov'Address).
	(GNAT.Sockets.Thin.C_Sendto, GNAT.Sockets.Thin.C_Recvfrom): Use a
	System.Address for the To parameter instead of a Sockaddr_In_Access, to
	achieve independance from AF_INET family, and also to allow this
	parameter to be retrieved from a Msghdr for the Windows case where
	these routines are used to implement C_Sendmsg and C_Recvmsg.

2009-05-06  Bob Duff  <duff@adacore.com>

	* g-expect.adb, g-expect.ads: Minor reformatting

	* sdefault.ads: Minor comment fix

	* g-expect-vms.adb: Minor reformatting

	* table.ads, table.adb (Append_All): New convenience procedure for
	appending a whole array.

	* comperr.adb (Compiler_Abort): Mention the -gnatd.n switch in the bug
	box message. Call Osint.Dump_Source_File_Names to print out the file
	list, instead of rummaging around in various data structures.

	* debug.adb: New switch -gnatd.n, to print source file names as they
	are read.

	* alloc.ads: Add parameters for Osint.File_Name_Chars.

	* osint.ads, osint.adb (Dump_Source_File_Names): New procedure to print
	out source file names during a "bug box".
	(Include_Dir_Default_Prefix): Use memo-izing to avoid repeated new/free.
	(Read_Source_File): Print out the file name, if requested via -gnatd.n.
	If it's not part of the runtimes, store it for later printing by
	Dump_Source_File_Names.

2009-05-06  Javier Miranda  <miranda@adacore.com>

	* gnat_rm.texi (CPP_Constructor): Avoid duplication of the
	documentation and add reference to the GNAT user guide for further
	details.

2009-05-06  Javier Miranda  <miranda@adacore.com>

	* gnat_ugn.texi: Complete documentation for CPP_Constructor and remove
	also wrong examples that use extension aggregates.

2009-05-06  Albert Lee  <lee@adacore.com>

	* s-oscons-tmplt.c (System.OS_Constants): Do not use special definition
	of Msg_Iovlen_T for VMS.

From-SVN: r147148
This commit is contained in:
Arnaud Charlet 2009-05-06 10:11:41 +02:00
parent 95914172e6
commit 3743d5bde6
27 changed files with 288 additions and 175 deletions

View file

@ -1,3 +1,70 @@
2009-05-06 Gary Dismukes <dismukes@adacore.com>
* sem_aggr.adb (Resolve_Record_Aggregate): In step 5, get the
Underlying_Type before retrieving the type definition for gathering
components, to account for the case where the type is private.
2009-05-06 Tristan Gingold <gingold@adacore.com>
* g-comlin.ads: Fix minor typos (Getopt instead of Get_Opt).
2009-05-06 Thomas Quinot <quinot@adacore.com>
* g-socthi-vms.adb, g-socthi-vms.ads, g-socthi-vxworks.adb,
g-socthi-vxworks.ads, g-socthi-mingw.adb g-socthi-mingw.ads,
g-socthi.adb, g-stsifd-sockets.adb, g-socthi.ads, g-socket.adb
(GNAT.Sockets.Thin.C_Sendmsg, GNAT.Sockets.Thin.C_Recvmsg,
Windows versions): Fix incorrect base
address of Iovec (it's Msg_Iov, not Msg_Iov'Address).
(GNAT.Sockets.Thin.C_Sendto, GNAT.Sockets.Thin.C_Recvfrom): Use a
System.Address for the To parameter instead of a Sockaddr_In_Access, to
achieve independance from AF_INET family, and also to allow this
parameter to be retrieved from a Msghdr for the Windows case where
these routines are used to implement C_Sendmsg and C_Recvmsg.
2009-05-06 Bob Duff <duff@adacore.com>
* g-expect.adb, g-expect.ads: Minor reformatting
* sdefault.ads: Minor comment fix
* g-expect-vms.adb: Minor reformatting
* table.ads, table.adb (Append_All): New convenience procedure for
appending a whole array.
* comperr.adb (Compiler_Abort): Mention the -gnatd.n switch in the bug
box message. Call Osint.Dump_Source_File_Names to print out the file
list, instead of rummaging around in various data structures.
* debug.adb: New switch -gnatd.n, to print source file names as they
are read.
* alloc.ads: Add parameters for Osint.File_Name_Chars.
* osint.ads, osint.adb (Dump_Source_File_Names): New procedure to print
out source file names during a "bug box".
(Include_Dir_Default_Prefix): Use memo-izing to avoid repeated new/free.
(Read_Source_File): Print out the file name, if requested via -gnatd.n.
If it's not part of the runtimes, store it for later printing by
Dump_Source_File_Names.
2009-05-06 Javier Miranda <miranda@adacore.com>
* gnat_rm.texi (CPP_Constructor): Avoid duplication of the
documentation and add reference to the GNAT user guide for further
details.
2009-05-06 Javier Miranda <miranda@adacore.com>
* gnat_ugn.texi: Complete documentation for CPP_Constructor and remove
also wrong examples that use extension aggregates.
2009-05-06 Albert Lee <lee@adacore.com>
* s-oscons-tmplt.c (System.OS_Constants): Do not use special definition
of Msg_Iovlen_T for VMS.
2009-05-04 Laurent GUERBY <laurent@guerby.net>
PR ada/38874

View file

@ -61,6 +61,9 @@ package Alloc is
Elmts_Initial : constant := 1_200; -- Elists
Elmts_Increment : constant := 100;
File_Name_Chars_Initial : constant := 10_000; -- Osint
File_Name_Chars_Increment : constant := 100;
Inlined_Bodies_Initial : constant := 50; -- Inline
Inlined_Bodies_Increment : constant := 200;

View file

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2009, 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- --
@ -30,9 +30,7 @@
with Atree; use Atree;
with Debug; use Debug;
with Errout; use Errout;
with Fname; use Fname;
with Gnatvsn; use Gnatvsn;
with Lib; use Lib;
with Namet; use Namet;
with Osint; use Osint;
with Output; use Output;
@ -395,26 +393,19 @@ package body Comperr is
Write_Line ("Note that list may not be accurate in some cases, ");
Write_Line ("so please double check that the problem can still ");
Write_Line ("be reproduced with the set of files listed.");
Write_Line ("Consider also -gnatd.n switch (see debug.adb).");
Write_Eol;
for U in Main_Unit .. Last_Unit loop
begin
if not Is_Internal_File_Name
(File_Name (Source_Index (U)))
then
Write_Name (Full_File_Name (Source_Index (U)));
Write_Eol;
end if;
Dump_Source_File_Names;
-- No point in double bug box if we blow up trying to print
-- the list of file names! Output informative msg and quit.
-- If we blow up trying to print the list of file names, just output
-- informative msg and continue.
exception
when others =>
Write_Str ("list may be incomplete");
exit;
end;
end loop;
Write_Eol;
Set_Standard_Output;

View file

@ -104,7 +104,7 @@ package body Debug is
-- d.k
-- d.l Use Ada 95 semantics for limited function returns
-- d.m For -gnatl, print full source only for main unit
-- d.n
-- d.n Print source file names
-- d.o
-- d.p
-- d.q
@ -523,6 +523,10 @@ package body Debug is
-- main source (this corresponds to a previous behavior of -gnatl and
-- is used for running the ACATS tests).
-- d.n Print source file names as they are loaded. This is useful if the
-- compiler has a bug -- these are the files that need to be included
-- in a bug report.
-- d.r Forces the flag OK_To_Reorder_Components to be set in all record
-- base types that have no discriminants.

View file

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 1999-2008, AdaCore --
-- Copyright (C) 1999-2009, AdaCore --
-- --
-- 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- --
@ -96,13 +96,13 @@
-- Goto_Section ("bargs");
-- loop
-- -- Same loop as above to get switches and arguments
-- -- The supported switches in Get_Opt might be different
-- -- The supported switches in Getopt might be different
-- end loop;
-- Goto_Section ("cargs");
-- loop
-- -- Same loop as above to get switches and arguments
-- -- The supported switches in Get_Opt might be different
-- -- The supported switches in Getopt might be different
-- end loop;
-- end;
@ -125,7 +125,7 @@
-- GNAT.OS_Lib.Argument_String_To_List ("-g -O1 -Ipath");
-- begin
-- Initialize_Option_Scan (Parser, Args);
-- while Get_Opt ("* g O! I=", Parser) /= ASCII.NUL loop
-- while Getopt ("* g O! I=", Parser) /= ASCII.NUL loop
-- Put_Line ("Switch " & Full_Switch (Parser)
-- & " param=" & Parameter (Parser));
-- end loop;

View file

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 2002-2008, AdaCore --
-- Copyright (C) 2002-2009, AdaCore --
-- --
-- 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- --
@ -249,7 +249,7 @@ package body GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexp : String;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
begin
@ -265,7 +265,7 @@ package body GNAT.Expect is
Result : out Expect_Match;
Regexp : String;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
begin
@ -284,7 +284,7 @@ package body GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexp : GNAT.Regpat.Pattern_Matcher;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
Matched : GNAT.Regpat.Match_Array (0 .. 0);
@ -298,7 +298,7 @@ package body GNAT.Expect is
Result : out Expect_Match;
Regexp : GNAT.Regpat.Pattern_Matcher;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
N : Expect_Match;
@ -370,7 +370,7 @@ package body GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexps : Regexp_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
Patterns : Compiled_Regexp_Array (Regexps'Range);
@ -392,7 +392,7 @@ package body GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexps : Compiled_Regexp_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
Matched : GNAT.Regpat.Match_Array (0 .. 0);
@ -404,7 +404,7 @@ package body GNAT.Expect is
procedure Expect
(Result : out Expect_Match;
Regexps : Multiprocess_Regexp_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
Matched : GNAT.Regpat.Match_Array (0 .. 0);
@ -418,7 +418,7 @@ package body GNAT.Expect is
Result : out Expect_Match;
Regexps : Regexp_Array;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
Patterns : Compiled_Regexp_Array (Regexps'Range);
@ -442,7 +442,7 @@ package body GNAT.Expect is
Result : out Expect_Match;
Regexps : Compiled_Regexp_Array;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
N : Expect_Match;
@ -489,7 +489,7 @@ package body GNAT.Expect is
(Result : out Expect_Match;
Regexps : Multiprocess_Regexp_Array;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
N : Expect_Match;
@ -646,7 +646,7 @@ package body GNAT.Expect is
else
-- Add what we read to the buffer
if Descriptors (J).Buffer_Index + N - 1 >
if Descriptors (J).Buffer_Index + N >
Descriptors (J).Buffer_Size
then
-- If the user wants to know when we have

View file

@ -261,7 +261,7 @@ package body GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexp : String;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
begin
@ -277,7 +277,7 @@ package body GNAT.Expect is
Result : out Expect_Match;
Regexp : String;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
begin
@ -296,7 +296,7 @@ package body GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexp : GNAT.Regpat.Pattern_Matcher;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
Matched : GNAT.Regpat.Match_Array (0 .. 0);
@ -310,7 +310,7 @@ package body GNAT.Expect is
Result : out Expect_Match;
Regexp : GNAT.Regpat.Pattern_Matcher;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
N : Expect_Match;
@ -382,7 +382,7 @@ package body GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexps : Regexp_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
Patterns : Compiled_Regexp_Array (Regexps'Range);
@ -406,7 +406,7 @@ package body GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexps : Compiled_Regexp_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
Matched : GNAT.Regpat.Match_Array (0 .. 0);
@ -418,7 +418,7 @@ package body GNAT.Expect is
procedure Expect
(Result : out Expect_Match;
Regexps : Multiprocess_Regexp_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
Matched : GNAT.Regpat.Match_Array (0 .. 0);
@ -432,7 +432,7 @@ package body GNAT.Expect is
Result : out Expect_Match;
Regexps : Regexp_Array;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
Patterns : Compiled_Regexp_Array (Regexps'Range);
@ -456,7 +456,7 @@ package body GNAT.Expect is
Result : out Expect_Match;
Regexps : Compiled_Regexp_Array;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
N : Expect_Match;
@ -503,7 +503,7 @@ package body GNAT.Expect is
(Result : out Expect_Match;
Regexps : Multiprocess_Regexp_Array;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False)
is
N : Expect_Match;

View file

@ -51,7 +51,7 @@
-- Non_Blocking_Spawn
-- (Fd, "ftp",
-- (1 => new String' ("machine@domain")));
-- Timeout := 10000; -- 10 seconds
-- Timeout := 10_000; -- 10 seconds
-- Expect (Fd, Result, Regexp_Array'(+"\(user\)", +"\(passwd\)"),
-- Timeout);
-- case Result is
@ -328,7 +328,7 @@ package GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexp : String;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
-- Wait till a string matching Fd can be read from Fd, and return 1
-- if a match was found.
@ -359,7 +359,7 @@ package GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexp : GNAT.Regpat.Pattern_Matcher;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
-- Same as the previous one, but with a precompiled regular expression.
-- This is more efficient however, especially if you are using this
@ -371,7 +371,7 @@ package GNAT.Expect is
Result : out Expect_Match;
Regexp : String;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
-- Same as above, but it is now possible to get the indexes of the
-- substrings for the parentheses in the regexp (see the example at the
@ -391,7 +391,7 @@ package GNAT.Expect is
Result : out Expect_Match;
Regexp : GNAT.Regpat.Pattern_Matcher;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
-- Same as above, but with a precompiled regular expression
@ -416,7 +416,7 @@ package GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexps : Regexp_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
-- Wait till a string matching one of the regular expressions in Regexps
-- is found. This function returns the index of the regexp that matched.
@ -427,7 +427,7 @@ package GNAT.Expect is
(Descriptor : in out Process_Descriptor;
Result : out Expect_Match;
Regexps : Compiled_Regexp_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
-- Same as the previous one, but with precompiled regular expressions.
-- This can be much faster if you are using them multiple times.
@ -437,7 +437,7 @@ package GNAT.Expect is
Result : out Expect_Match;
Regexps : Regexp_Array;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
-- Same as above, except that you can also access the parenthesis
-- groups inside the matching regular expression.
@ -451,7 +451,7 @@ package GNAT.Expect is
Result : out Expect_Match;
Regexps : Compiled_Regexp_Array;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
-- Same as above, but with precompiled regular expressions.
-- The first index in Matched must be 0, or Constraint_Error will be
@ -472,14 +472,14 @@ package GNAT.Expect is
(Result : out Expect_Match;
Regexps : Multiprocess_Regexp_Array;
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
-- Same as above, but for multi processes
procedure Expect
(Result : out Expect_Match;
Regexps : Multiprocess_Regexp_Array;
Timeout : Integer := 10000;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
-- Same as the previous one, but for multiple processes.
-- This procedure finds the first regexp that match the associated process.

View file

@ -1644,7 +1644,7 @@ package body GNAT.Sockets is
Item'Address,
Item'Length,
To_Int (Flags),
Sin'Unchecked_Access,
Sin'Address,
Len'Access);
if Res = Failure then
@ -1861,7 +1861,7 @@ package body GNAT.Sockets is
Res : C.int;
Sin : aliased Sockaddr_In;
C_To : Sockaddr_In_Access;
C_To : System.Address;
Len : C.int;
begin
@ -1871,11 +1871,11 @@ package body GNAT.Sockets is
Set_Port
(Sin'Unchecked_Access,
Short_To_Network (C.unsigned_short (To.Port)));
C_To := Sin'Unchecked_Access;
C_To := Sin'Address;
Len := Sin'Size / 8;
else
C_To := null;
C_To := System.Null_Address;
Len := 0;
end if;

View file

@ -263,24 +263,20 @@ package body GNAT.Sockets.Thin is
for MH'Address use Msg;
Iovec : array (0 .. MH.Msg_Iovlen - 1) of Vector_Element;
for Iovec'Address use MH.Msg_Iov'Address;
for Iovec'Address use MH.Msg_Iov;
pragma Import (Ada, Iovec);
pragma Unreferenced (Flags);
begin
-- Windows does not provide an implementation of recvmsg(). The
-- spec for WSARecvMsg() is incompatible with the data types we
-- define, and is not available in all versions of Windows. So,
-- we'll use C_Recv instead. Note that this means the Flags
-- argument is ignored.
-- Windows does not provide an implementation of recvmsg(). The spec for
-- WSARecvMsg() is incompatible with the data types we define, and is
-- not available in all versions of Windows. So, we use C_Recv instead.
for J in Iovec'Range loop
Res := C_Recv
(S,
Iovec (J).Base.all'Address,
C.int (Iovec (J).Length),
0);
Flags);
if Res < 0 then
return ssize_t (Res);
@ -359,7 +355,10 @@ package body GNAT.Sockets.Thin is
-- Check out-of-band data
Length := C_Recvfrom
(S, Buffer'Address, 1, Flag, null, Fromlen'Unchecked_Access);
(S, Buffer'Address, 1, Flag,
From => System.Null_Address,
Fromlen => Fromlen'Unchecked_Access);
-- Is Fromlen necessary if From is Null_Address???
-- If the signal is not an out-of-band data, then it
-- is a connection failure notification.
@ -399,26 +398,23 @@ package body GNAT.Sockets.Thin is
for MH'Address use Msg;
Iovec : array (0 .. MH.Msg_Iovlen - 1) of Vector_Element;
for Iovec'Address use MH.Msg_Iov'Address;
for Iovec'Address use MH.Msg_Iov;
pragma Import (Ada, Iovec);
pragma Unreferenced (Flags);
begin
-- Windows does not provide an implementation of sendmsg(). The
-- spec for WSASendMsg() is incompatible with the data types we
-- define, and is not available in all versions of Windows. So,
-- we'll use C_Sendto instead. Note that this means the Flags
-- argument is ignored.
-- Windows does not provide an implementation of sendmsg(). The spec for
-- WSASendMsg() is incompatible with the data types we define, and is
-- not available in all versions of Windows. So, we'll use C_Sendto
-- instead.
for J in Iovec'Range loop
Res := C_Sendto
(S,
Iovec (J).Base.all'Address,
C.int (Iovec (J).Length),
Flags => 0,
To => null,
Tolen => 0);
Flags => Flags,
To => MH.Msg_Name,
Tolen => C.int (MH.Msg_Namelen));
if Res < 0 then
return ssize_t (Res);

View file

@ -140,7 +140,7 @@ package GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
From : Sockaddr_In_Access;
From : System.Address;
Fromlen : not null access C.int) return C.int;
function C_Recvmsg
@ -165,7 +165,7 @@ package GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
To : Sockaddr_In_Access;
To : System.Address;
Tolen : C.int) return C.int;
function C_Setsockopt

View file

@ -87,7 +87,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
From : Sockaddr_In_Access;
From : System.Address;
Fromlen : not null access C.int) return C.int;
pragma Import (C, Syscall_Recvfrom, "recvfrom");
@ -108,7 +108,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
To : Sockaddr_In_Access;
To : System.Address;
Tolen : C.int) return C.int;
pragma Import (C, Syscall_Sendto, "sendto");
@ -271,7 +271,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
From : Sockaddr_In_Access;
From : System.Address;
Fromlen : not null access C.int) return C.int
is
Res : C.int;
@ -346,7 +346,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
To : Sockaddr_In_Access;
To : System.Address;
Tolen : C.int) return C.int
is
Res : C.int;

View file

@ -143,7 +143,7 @@ package GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
From : Sockaddr_In_Access;
From : System.Address;
Fromlen : not null access C.int) return C.int;
function C_Recvmsg
@ -168,7 +168,7 @@ package GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
To : Sockaddr_In_Access;
To : System.Address;
Tolen : C.int) return C.int;
function C_Setsockopt

View file

@ -98,7 +98,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
From : Sockaddr_In_Access;
From : System.Address;
Fromlen : not null access C.int) return C.int;
pragma Import (C, Syscall_Recvfrom, "recvfrom");
@ -119,7 +119,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
To : Sockaddr_In_Access;
To : System.Address;
Tolen : C.int) return C.int;
pragma Import (C, Syscall_Sendto, "sendto");
@ -285,7 +285,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
From : Sockaddr_In_Access;
From : System.Address;
Fromlen : not null access C.int) return C.int
is
Res : C.int;
@ -360,7 +360,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
To : Sockaddr_In_Access;
To : System.Address;
Tolen : C.int) return C.int
is
Res : C.int;

View file

@ -141,7 +141,7 @@ package GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
From : Sockaddr_In_Access;
From : System.Address;
Fromlen : not null access C.int) return C.int;
function C_Recvmsg
@ -166,7 +166,7 @@ package GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
To : Sockaddr_In_Access;
To : System.Address;
Tolen : C.int) return C.int;
function C_Setsockopt

View file

@ -94,7 +94,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
From : Sockaddr_In_Access;
From : System.Address;
Fromlen : not null access C.int) return C.int;
pragma Import (C, Syscall_Recvfrom, "recvfrom");
@ -115,7 +115,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
To : Sockaddr_In_Access;
To : System.Address;
Tolen : C.int) return C.int;
pragma Import (C, Syscall_Sendto, "sendto");
@ -290,7 +290,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
From : Sockaddr_In_Access;
From : System.Address;
Fromlen : not null access C.int) return C.int
is
Res : C.int;
@ -365,7 +365,7 @@ package body GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
To : Sockaddr_In_Access;
To : System.Address;
Tolen : C.int) return C.int
is
Res : C.int;

View file

@ -142,7 +142,7 @@ package GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
From : Sockaddr_In_Access;
From : System.Address;
Fromlen : not null access C.int) return C.int;
function C_Recvmsg
@ -167,7 +167,7 @@ package GNAT.Sockets.Thin is
Msg : System.Address;
Len : C.int;
Flags : C.int;
To : Sockaddr_In_Access;
To : System.Address;
Tolen : C.int) return C.int;
function C_Setsockopt

View file

@ -229,7 +229,7 @@ package body Signalling_Fds is
return C_Sendto
(Wsig, Buf'Address, 1,
Flags => SOSC.MSG_Forced_Flags,
To => null,
To => System.Null_Address,
Tolen => 0);
end Write;

View file

@ -1502,7 +1502,7 @@ equality operators defined (such operations can be imported or declared
as subprograms as required). Initialization is allowed only by constructor
functions (see pragma @code{CPP_Constructor}). Such types are implicitly
limited if not explicitly declared as limited or derived from a limited
type, and a warning is issued in that case.
type, and an error is issued in that case.
Pragma @code{CPP_Class} is intended primarily for automatic generation
using an automatic binding generator tool.
@ -1547,50 +1547,8 @@ where @var{T} is a tagged limited type imported from C++ with pragma
The first form is the default constructor, used when an object of type
@var{T} is created on the Ada side with no explicit constructor. The
second form covers all the non-default constructors of the type.
Constructors (including the copy constructor, which is simply a special
case of the second form in which the one and only argument is of type
@var{T}), can only appear in the following contexts:
@itemize @bullet
@item
On the right side of an initialization of an object of type @var{T}.
@item
On the right side of an initialization of a record component of type @var{T}.
@item
In an extension aggregate for an object of a type derived from @var{T}.
@item
In an Ada 2005 limited aggregate.
@item
In an Ada 2005 nested limited aggregate.
@item
In an Ada 2005 limited aggregate that initializes an object built in
place by an extended return statement.
@end itemize
@noindent
Although the constructor is described as a function that returns a value
on the Ada side, it is typically a procedure with an extra implicit
argument (the object being initialized) at the implementation
level. GNAT issues the appropriate call, whatever it is, to get the
object properly initialized.
In the case of objects of derived types, in addition to the use of Ada
2005 limited aggregates and extended return statements, you may also
use one of the following two possible forms for declaring and creating
an object:
@itemize @bullet
@item @code{New_Object : Derived_T}
@item @code{New_Object : Derived_T := (@var{constructor-call with} @dots{})}
@end itemize
@noindent
In the first case the default constructor is called and extension fields
if any are initialized according to the default initialization
expressions in the Ada declaration. In the second case, the given
constructor is called and the extension aggregate indicates the explicit
values of the extension fields.
second form covers all the non-default constructors of the type. See
the GNAT users guide for details.
If no constructors are imported, it is impossible to create any objects
on the Ada side and the type is implicitly declared abstract.

View file

@ -3291,8 +3291,29 @@ end Pkg_Root;
On the Ada side the constructor is represented by a function (whose
name is arbitrary) that returns the classwide type corresponding to
the imported C++ class.
the imported C++ class. Although the constructor is described as a
function, it is typically a procedure with an extra implicit argument
(the object being initialized) at the implementation level. GNAT
issues the appropriate call, whatever it is, to get the object
properly initialized.
Constructors can only appear in the following contexts:
@itemize @bullet
@item
On the right side of an initialization of an object of type @var{T}.
@item
On the right side of an initialization of a record component of type @var{T}.
@item
In an Ada 2005 limited aggregate.
@item
In an Ada 2005 nested limited aggregate.
@item
In an Ada 2005 limited aggregate that initializes an object built in
place by an extended return statement.
@end itemize
@noindent
In a declaration of an object whose type is a class imported from C++,
either the default C++ constructor is implicitly called by GNAT, or
else the required C++ constructor must be explicitly called in the
@ -3324,12 +3345,11 @@ In this case the components DT inherited from the C++ side must be
initialized by a C++ constructor, and the additional Ada components
of type DT are initialized by GNAT. The initialization of such an
object is done either by default, or by means of a function returning
an aggregate of type DT, or by means of an extended aggregate.
an aggregate of type DT.
@smallexample @c ada
Obj5 : DT;
Obj6 : DT := Function_Returning_DT (50);
Obj7 : DT := (Constructor (30,40) with (C_Value => 50));
@end smallexample
The declaration of @code{Obj5} invokes the default constructors: the
@ -3361,7 +3381,7 @@ non-default C++ constructors specified for the imported components.
For example:
@smallexample @c ada
Obj8 : Rec2 (40);
Obj7 : Rec2 (40);
@end smallexample
Using Ada 2005 we can use limited aggregates to initialize an object
@ -3369,13 +3389,13 @@ invoking C++ constructors that differ from those specified in the type
declarations. For example:
@smallexample @c ada
Obj9 : Rec2 := (Rec => (Data1 => Constructor (15, 16),
Obj8 : Rec2 := (Rec => (Data1 => Constructor (15, 16),
others => <>),
others => <>);
@end smallexample
The above declaration uses an Ada 2005 limited aggregate to
initialize @code{Obj9}, and the C++ constructor that has two integer
initialize @code{Obj8}, and the C++ constructor that has two integer
arguments is invoked to initialize the @code{Data1} component instead
of the constructor specified in the declaration of type @code{Rec1}. In
Ada 2005 the box in the aggregate indicates that unspecified components

View file

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2009, 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- --
@ -29,6 +29,8 @@ with System.Case_Util; use System.Case_Util;
with GNAT.HTable;
with Alloc;
with Debug;
with Fmap; use Fmap;
with Gnatvsn; use Gnatvsn;
with Hostparm;
@ -111,6 +113,9 @@ package body Osint is
-- Converts a C String to an Ada String. Are we doing this to avoid withing
-- Interfaces.C.Strings ???
function Include_Dir_Default_Prefix return String_Access;
-- Same as exported version, except returns a String_Access
------------------------------
-- Other Local Declarations --
------------------------------
@ -137,6 +142,20 @@ package body Osint is
-- latest source, library and object files opened by Read_Source_File and
-- Read_Library_Info.
package File_Name_Chars is new Table.Table (
Table_Component_Type => Character,
Table_Index_Type => Int,
Table_Low_Bound => 1,
Table_Initial => Alloc.File_Name_Chars_Initial,
Table_Increment => Alloc.File_Name_Chars_Increment,
Table_Name => "File_Name_Chars");
-- Table to store text to be printed by Dump_Source_File_Names
The_Include_Dir_Default_Prefix : String_Access := null;
-- Value returned by Include_Dir_Default_Prefix. We don't initialize it
-- here, because that causes an elaboration cycle with Sdefault; we
-- initialize it lazily instead.
------------------
-- Search Paths --
------------------
@ -717,6 +736,16 @@ package body Osint is
end if;
end Dir_In_Src_Search_Path;
----------------------------
-- Dump_Source_File_Names --
----------------------------
procedure Dump_Source_File_Names is
subtype Rng is Int range File_Name_Chars.First .. File_Name_Chars.Last;
begin
Write_Str (String (File_Name_Chars.Table (Rng)));
end Dump_Source_File_Names;
---------------------
-- Executable_Name --
---------------------
@ -1392,22 +1421,19 @@ package body Osint is
-- Include_Dir_Default_Prefix --
--------------------------------
function Include_Dir_Default_Prefix return String is
Include_Dir : String_Access :=
function Include_Dir_Default_Prefix return String_Access is
begin
if The_Include_Dir_Default_Prefix = null then
The_Include_Dir_Default_Prefix :=
String_Access (Update_Path (Include_Dir_Default_Name));
begin
if Include_Dir = null then
return "";
else
declare
Result : constant String := Include_Dir.all;
begin
Free (Include_Dir);
return Result;
end;
end if;
return The_Include_Dir_Default_Prefix;
end Include_Dir_Default_Prefix;
function Include_Dir_Default_Prefix return String is
begin
return Include_Dir_Default_Prefix.all;
end Include_Dir_Default_Prefix;
----------------
@ -2268,6 +2294,29 @@ package body Osint is
return;
end if;
-- Print out the file name, if requested, and if it's not part of the
-- runtimes, store it in File_Name_Chars.
declare
Name : String renames Name_Buffer (1 .. Name_Len);
Inc : String renames Include_Dir_Default_Prefix.all;
begin
if Debug.Debug_Flag_Dot_N then
Write_Line (Name);
end if;
if Inc /= ""
and then Inc'Length < Name_Len
and then Name_Buffer (1 .. Inc'Length) = Inc
then
null; -- Part of runtimes, so ignore it
else
File_Name_Chars.Append_All (File_Name_Chars.Table_Type (Name));
File_Name_Chars.Append (ASCII.LF);
end if;
end;
-- Prepare to read data from the file
Len := Integer (File_Length (Source_File_FD));

View file

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2009, 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- --
@ -410,6 +410,12 @@ package Osint is
-- Cache => True access to source file data does not incur a penalty if
-- this data was previously retrieved.
procedure Dump_Source_File_Names;
-- Prints out the names of all source files that have been read by
-- Read_Source_File, except those that come from the run-time library
-- (i.e. Include_Dir_Default_Prefix). The text is sent to whatever Output
-- is currently using (e.g. standard output or standard error).
-------------------------------------------
-- Representation of Library Information --
-------------------------------------------

View file

@ -1184,7 +1184,7 @@ TXT(" subtype H_Length_T is Interfaces.C." h_length_t ";")
-- Fields of struct msghdr
*/
#if defined (__VMS) || defined (__sun__) || defined (__hpux__)
#if defined (__sun__) || defined (__hpux__)
# define msg_iovlen_t "int"
#else
# define msg_iovlen_t "size_t"

View file

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-2007, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2009, 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- --
@ -25,7 +25,8 @@
-- This package contains functions that return the default values for the
-- include and object file directories, target name, default library
-- subdirectory (libsubdir) prefix, and the target OS.
-- subdirectory (libsubdir) prefix, and the target OS. The body is generated
-- automatically by the build process.
with Types; use Types;

View file

@ -3156,7 +3156,11 @@ package body Sem_Aggr is
end loop;
else
Record_Def := Type_Definition (Parent (Base_Type (Typ)));
-- We take the underlying type to account for private types when
-- the original association had a box default.
Record_Def :=
Type_Definition (Parent (Underlying_Type (Base_Type (Typ))));
if Null_Present (Record_Def) then
null;

View file

@ -83,6 +83,17 @@ package body Table is
Set_Item (Table_Index_Type (Last_Val + 1), New_Val);
end Append;
----------------
-- Append_All --
----------------
procedure Append_All (New_Vals : Table_Type) is
begin
for J in New_Vals'Range loop
Append (New_Vals (J));
end loop;
end Append_All;
--------------------
-- Decrement_Last --
--------------------

View file

@ -187,6 +187,9 @@ package Table is
-- i.e. the table size is increased by one, and the given new item
-- stored in the newly created table element.
procedure Append_All (New_Vals : Table_Type);
-- Appends all components of New_Vals
procedure Set_Item
(Index : Table_Index_Type;
Item : Table_Component_Type);