diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-06-17 09:06:41 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-06-17 09:06:41 +0000 |
commit | a050681322cb0bb78bfc0900406c132ede630f81 (patch) | |
tree | 25c725c1b73e3d2b69447a18fb45899560dec4d2 /gcc/ada/back_end.adb | |
parent | d3ef794cfe8397e3339bdefa952bb32e9874d22c (diff) | |
download | gcc-a050681322cb0bb78bfc0900406c132ede630f81.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160890 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/back_end.adb')
-rw-r--r-- | gcc/ada/back_end.adb | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/gcc/ada/back_end.adb b/gcc/ada/back_end.adb index 28ce1bd6c7e..41372fc33f3 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 |