From 67e740fa3005211b72da34e28ec2a8a22dcc4797 Mon Sep 17 00:00:00 2001 From: Vincent Celier Date: Thu, 17 Jun 2010 09:06:41 +0000 Subject: back_end.adb (Scan_Compiler_Arguments): Put all arguments in new local Argument_List variable Args. 2010-06-17 Vincent Celier * 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 --- gcc/ada/back_end.adb | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'gcc/ada/back_end.adb') 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 -- cgit v1.1