a-szuzti.adb, [...] (functions Get_Line): Improve memory usage to avoid use of stack.
authorVincent Celier <celier@adacore.com>
Wed, 26 Mar 2008 07:36:23 +0000 (08:36 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 26 Mar 2008 07:36:23 +0000 (08:36 +0100)
2008-03-26  Vincent Celier  <celier@adacore.com>

* a-szuzti.adb, a-swuwti.adb, a-suteio.adb (functions Get_Line):
Improve memory usage to avoid use of stack.

From-SVN: r133550

gcc/ada/a-suteio.adb
gcc/ada/a-swuwti.adb
gcc/ada/a-szuzti.adb

index 98034e2b110bb82e0ce12ec4db832080a2a8a0a1..ef01398a8150278d35a9f51c1e539ad851e2431f 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1997-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1997-2007, 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- --
@@ -51,7 +51,9 @@ package body Ada.Strings.Unbounded.Text_IO is
       Str1 := new String'(Buffer (1 .. Last));
       while Last = Buffer'Last loop
          Get_Line (Buffer, Last);
-         Str2 := new String'(Str1.all & Buffer (1 .. Last));
+         Str2 := new String (1 .. Str1'Last + Last);
+         Str2 (Str1'Range) := Str1.all;
+         Str2 (Str1'Last + 1 .. Str2'Last) := Buffer (1 .. Last);
          Free (Str1);
          Str1 := Str2;
       end loop;
@@ -73,7 +75,9 @@ package body Ada.Strings.Unbounded.Text_IO is
       Str1 := new String'(Buffer (1 .. Last));
       while Last = Buffer'Last loop
          Get_Line (File, Buffer, Last);
-         Str2 := new String'(Str1.all & Buffer (1 .. Last));
+         Str2 := new String (1 .. Str1'Last + Last);
+         Str2 (Str1'Range) := Str1.all;
+         Str2 (Str1'Last + 1 .. Str2'Last) := Buffer (1 .. Last);
          Free (Str1);
          Str1 := Str2;
       end loop;
index 1e6bb2e7eabf81bc7a522f46f0fd28965a628b8a..bd06eb18c39cb136a418dc9d114c116cea1e783c 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1997-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1997-2007, 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- --
@@ -51,7 +51,9 @@ package body Ada.Strings.Wide_Unbounded.Wide_Text_IO is
       Str1 := new Wide_String'(Buffer (1 .. Last));
       while Last = Buffer'Last loop
          Get_Line (Buffer, Last);
-         Str2 := new Wide_String'(Str1.all & Buffer (1 .. Last));
+         Str2 := new Wide_String (1 .. Str1'Last + Last);
+         Str2 (Str1'Range) := Str1.all;
+         Str2 (Str1'Last + 1 .. Str2'Last) := Buffer (1 .. Last);
          Free (Str1);
          Str1 := Str2;
       end loop;
@@ -75,7 +77,9 @@ package body Ada.Strings.Wide_Unbounded.Wide_Text_IO is
       Str1 := new Wide_String'(Buffer (1 .. Last));
       while Last = Buffer'Last loop
          Get_Line (File, Buffer, Last);
-         Str2 := new Wide_String'(Str1.all & Buffer (1 .. Last));
+         Str2 := new Wide_String (1 .. Str1'Last + Last);
+         Str2 (Str1'Range) := Str1.all;
+         Str2 (Str1'Last + 1 .. Str2'Last) := Buffer (1 .. Last);
          Free (Str1);
          Str1 := Str2;
       end loop;
index 850ae78cca2a8a23c8c89b9a469667dafea44f9d..7a8a31373fe7a763ec93f441176aa5b265078f72 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1997-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1997-2007, 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- --
@@ -51,7 +51,9 @@ package body Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO is
       Str1 := new Wide_Wide_String'(Buffer (1 .. Last));
       while Last = Buffer'Last loop
          Get_Line (Buffer, Last);
-         Str2 := new Wide_Wide_String'(Str1.all & Buffer (1 .. Last));
+         Str2 := new Wide_Wide_String (1 .. Str1'Last + Last);
+         Str2 (Str1'Range) := Str1.all;
+         Str2 (Str1'Last + 1 .. Str2'Last) := Buffer (1 .. Last);
          Free (Str1);
          Str1 := Str2;
       end loop;
@@ -76,7 +78,9 @@ package body Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO is
 
       while Last = Buffer'Last loop
          Get_Line (File, Buffer, Last);
-         Str2 := new Wide_Wide_String'(Str1.all & Buffer (1 .. Last));
+         Str2 := new Wide_Wide_String (1 .. Str1'Last + Last);
+         Str2 (Str1'Range) := Str1.all;
+         Str2 (Str1'Last + 1 .. Str2'Last) := Buffer (1 .. Last);
          Free (Str1);
          Str1 := Str2;
       end loop;