Commit 2d7756fa by Robert Dewar Committed by Arnaud Charlet

a-ztdeau.adb, [...] (Puts_Dec): Fix error in computing Fore when Exp > 0

2008-04-08  Robert Dewar  <dewar@adacore.com>

	* a-ztdeau.adb, a-tideau.adb, a-wtdeau.adb (Puts_Dec): Fix error in
	computing Fore when Exp > 0

From-SVN: r134021
parent f2cbd970
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1992-2006, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -201,16 +201,24 @@ package body Ada.Text_IO.Decimal_Aux is ...@@ -201,16 +201,24 @@ package body Ada.Text_IO.Decimal_Aux is
Ptr : Natural := 0; Ptr : Natural := 0;
begin begin
if Exp = 0 then -- Compute Fore, allowing for Aft digits and the decimal dot
Fore := To'Length - 1 - Aft;
else Fore := To'Length - Field'Max (1, Aft) - 1;
Fore := To'Length - 2 - Aft - Exp;
-- Allow for Exp and two more for E+ or E- if exponent present
if Exp /= 0 then
Fore := Fore - 2 - Exp;
end if; end if;
-- Make sure we have enough room
if Fore < 1 then if Fore < 1 then
raise Layout_Error; raise Layout_Error;
end if; end if;
-- Do the conversion and check length of result
Set_Image_Decimal (Item, Buf, Ptr, Scale, Fore, Aft, Exp); Set_Image_Decimal (Item, Buf, Ptr, Scale, Fore, Aft, Exp);
if Ptr > To'Length then if Ptr > To'Length then
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1992-2006, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -203,16 +203,24 @@ package body Ada.Wide_Text_IO.Decimal_Aux is ...@@ -203,16 +203,24 @@ package body Ada.Wide_Text_IO.Decimal_Aux is
Ptr : Natural := 0; Ptr : Natural := 0;
begin begin
if Exp = 0 then -- Compute Fore, allowing for Aft digits and the decimal dot
Fore := To'Length - 1 - Aft;
else Fore := To'Length - Field'Max (1, Aft) - 1;
Fore := To'Length - 2 - Aft - Exp;
-- Allow for Exp and two more for E+ or E- if exponent present
if Exp /= 0 then
Fore := Fore - 2 - Exp;
end if; end if;
-- Make sure we have enough room
if Fore < 1 then if Fore < 1 then
raise Layout_Error; raise Layout_Error;
end if; end if;
-- Do the conversion and check length of result
Set_Image_Decimal (Item, Buf, Ptr, Scale, Fore, Aft, Exp); Set_Image_Decimal (Item, Buf, Ptr, Scale, Fore, Aft, Exp);
if Ptr > To'Length then if Ptr > To'Length then
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1992-2006, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -203,16 +203,24 @@ package body Ada.Wide_Wide_Text_IO.Decimal_Aux is ...@@ -203,16 +203,24 @@ package body Ada.Wide_Wide_Text_IO.Decimal_Aux is
Ptr : Natural := 0; Ptr : Natural := 0;
begin begin
if Exp = 0 then -- Compute Fore, allowing for Aft digits and the decimal dot
Fore := To'Length - 1 - Aft;
else Fore := To'Length - Field'Max (1, Aft) - 1;
Fore := To'Length - 2 - Aft - Exp;
-- Allow for Exp and two more for E+ or E- if exponent present
if Exp /= 0 then
Fore := Fore - 2 - Exp;
end if; end if;
-- Make sure we have enough room
if Fore < 1 then if Fore < 1 then
raise Layout_Error; raise Layout_Error;
end if; end if;
-- Do the conversion and check length of result
Set_Image_Decimal (Item, Buf, Ptr, Scale, Fore, Aft, Exp); Set_Image_Decimal (Item, Buf, Ptr, Scale, Fore, Aft, Exp);
if Ptr > To'Length then if Ptr > To'Length then
......
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