aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/back_end.adb
diff options
context:
space:
mode:
authorVincent Celier <celier@adacore.com>2010-06-17 09:06:41 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2010-06-17 11:06:41 +0200
commit67e740fa3005211b72da34e28ec2a8a22dcc4797 (patch)
tree25c725c1b73e3d2b69447a18fb45899560dec4d2 /gcc/ada/back_end.adb
parentbce79204fbd55ec8f622979e582752e44498c76c (diff)
downloadgcc-67e740fa3005211b72da34e28ec2a8a22dcc4797.zip
gcc-67e740fa3005211b72da34e28ec2a8a22dcc4797.tar.gz
gcc-67e740fa3005211b72da34e28ec2a8a22dcc4797.tar.bz2
back_end.adb (Scan_Compiler_Arguments): Put all arguments in new local Argument_List variable Args.
2010-06-17 Vincent Celier <celier@adacore.com> * back_end.adb (Scan_Compiler_Arguments): Put all arguments in new local Argument_List variable Args. * switch-c.adb (Scan_Front_End_Switches): New Argument_List argument Args. (Switch_Subsequently_Cancelled): New Argument_List argument Args. Look for subsequent switches in Args. * switch-c.ads (Scan_Front_End_Switches): New Argument_List argument Args. * gcc-interface/Make-lang.in: Update dependencies. From-SVN: r160890
Diffstat (limited to 'gcc/ada/back_end.adb')
-rw-r--r--gcc/ada/back_end.adb32
1 files changed, 25 insertions, 7 deletions
diff --git a/gcc/ada/back_end.adb b/gcc/ada/back_end.adb
index 28ce1bd..41372fc 100644
--- a/gcc/ada/back_end.adb
+++ b/gcc/ada/back_end.adb
@@ -40,6 +40,8 @@ with Switch.C; use Switch.C;
with System; use System;
with Types; use Types;
+with System.OS_Lib; use System.OS_Lib;
+
package body Back_End is
type Arg_Array is array (Nat) of Big_String_Ptr;
@@ -162,7 +164,7 @@ package body Back_End is
procedure Scan_Compiler_Arguments is
- Next_Arg : Pos;
+ Next_Arg : Positive;
-- Next argument to be scanned
Output_File_Name_Seen : Boolean := False;
@@ -222,6 +224,11 @@ package body Back_End is
end if;
end Scan_Back_End_Switches;
+ -- Local variables
+
+ Arg_Count : constant Natural := Natural (save_argc - 1);
+ Args : Argument_List (1 .. Arg_Count);
+
-- Start of processing for Scan_Compiler_Arguments
begin
@@ -229,15 +236,26 @@ package body Back_End is
Opt.Stack_Checking_Enabled := (flag_stack_check /= 0);
+ -- Put the arguments in Args
+
+ for Arg in Pos range 1 .. save_argc - 1 loop
+ declare
+ Argv_Ptr : constant Big_String_Ptr := save_argv (Arg);
+ Argv_Len : constant Nat := Len_Arg (Arg);
+ Argv : constant String :=
+ Argv_Ptr (1 .. Natural (Argv_Len));
+
+ begin
+ Args (Positive (Arg)) := new String'(Argv);
+ end;
+ end loop;
+
-- Loop through command line arguments, storing them for later access
Next_Arg := 1;
- while Next_Arg < save_argc loop
+ while Next_Arg < Args'Last loop
Look_At_Arg : declare
- Argv_Ptr : constant Big_String_Ptr := save_argv (Next_Arg);
- Argv_Len : constant Nat := Len_Arg (Next_Arg);
- Argv : constant String :=
- Argv_Ptr (1 .. Natural (Argv_Len));
+ Argv : constant String := Args (Next_Arg).all;
begin
-- If the previous switch has set the Output_File_Name_Present
@@ -284,7 +302,7 @@ package body Back_End is
Opt.No_Stdlib := True;
elsif Is_Front_End_Switch (Argv) then
- Scan_Front_End_Switches (Argv, Integer (Next_Arg));
+ Scan_Front_End_Switches (Argv, Args, Next_Arg);
-- All non-front-end switches are back-end switches