Commit a1449c89 by Dmitriy Anisimkov Committed by Pierre-Marie de Rodat

[Ada] Improve end of command line arguments detection

2019-12-12  Dmitriy Anisimkov  <anisimko@adacore.com>

gcc/ada/

	* libgnat/g-comlin.ads (Get_Argument): New routine similar to
	original Get_Argument but with one more out parameter
	End_Of_Arguments.
	(Get_Arguments): Comment improved.
	* libgnat/g-comlin.adb (Get_Argument): Implementation taken from
	original Get_Argument and improved.
	(Get_Argument): Calls new routine Get_Argument with additional
	parameter.

From-SVN: r279277
parent c38d4670
2019-12-12 Dmitriy Anisimkov <anisimko@adacore.com>
* libgnat/g-comlin.ads (Get_Argument): New routine similar to
original Get_Argument but with one more out parameter
End_Of_Arguments.
(Get_Arguments): Comment improved.
* libgnat/g-comlin.adb (Get_Argument): Implementation taken from
original Get_Argument and improved.
(Get_Argument): Calls new routine Get_Argument with additional
parameter.
2019-12-03 Eric Botcazou <ebotcazou@adacore.com> 2019-12-03 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/utils.c (potential_alignment_gap): Delete. * gcc-interface/utils.c (potential_alignment_gap): Delete.
......
...@@ -385,10 +385,25 @@ package body GNAT.Command_Line is ...@@ -385,10 +385,25 @@ package body GNAT.Command_Line is
------------------ ------------------
function Get_Argument function Get_Argument
(Do_Expansion : Boolean := False; (Do_Expansion : Boolean := False;
Parser : Opt_Parser := Command_Line_Parser) return String Parser : Opt_Parser := Command_Line_Parser) return String
is is
End_Of_Args : Boolean;
begin begin
return Get_Argument (Do_Expansion, Parser, End_Of_Args);
end Get_Argument;
------------------
-- Get_Argument --
------------------
function Get_Argument
(Do_Expansion : Boolean := False;
Parser : Opt_Parser := Command_Line_Parser;
End_Of_Arguments : out Boolean) return String is
begin
End_Of_Arguments := False;
if Parser.In_Expansion then if Parser.In_Expansion then
declare declare
S : constant String := Expansion (Parser.Expansion_It); S : constant String := Expansion (Parser.Expansion_It);
...@@ -415,6 +430,7 @@ package body GNAT.Command_Line is ...@@ -415,6 +430,7 @@ package body GNAT.Command_Line is
end loop; end loop;
else else
End_Of_Arguments := True;
return String'(1 .. 0 => ' '); return String'(1 .. 0 => ' ');
end if; end if;
...@@ -436,9 +452,11 @@ package body GNAT.Command_Line is ...@@ -436,9 +452,11 @@ package body GNAT.Command_Line is
end loop; end loop;
if Parser.Current_Argument > Parser.Arg_Count then if Parser.Current_Argument > Parser.Arg_Count then
End_Of_Arguments := True;
return String'(1 .. 0 => ' '); return String'(1 .. 0 => ' ');
elsif Parser.Section (Parser.Current_Argument) = 0 then elsif Parser.Section (Parser.Current_Argument) = 0 then
return Get_Argument (Do_Expansion); return Get_Argument (Do_Expansion, Parser, End_Of_Arguments);
end if; end if;
Parser.Current_Argument := Parser.Current_Argument + 1; Parser.Current_Argument := Parser.Current_Argument + 1;
...@@ -451,13 +469,10 @@ package body GNAT.Command_Line is ...@@ -451,13 +469,10 @@ package body GNAT.Command_Line is
Argument (Parser, Parser.Current_Argument - 1); Argument (Parser, Parser.Current_Argument - 1);
begin begin
for Index in Arg'Range loop for Index in Arg'Range loop
if Arg (Index) = '*' if Arg (Index) in '*' | '?' | '[' then
or else Arg (Index) = '?'
or else Arg (Index) = '['
then
Parser.In_Expansion := True; Parser.In_Expansion := True;
Start_Expansion (Parser.Expansion_It, Arg); Start_Expansion (Parser.Expansion_It, Arg);
return Get_Argument (Do_Expansion, Parser); return Get_Argument (Do_Expansion, Parser, End_Of_Arguments);
end if; end if;
end loop; end loop;
end; end;
......
...@@ -462,8 +462,9 @@ package GNAT.Command_Line is ...@@ -462,8 +462,9 @@ package GNAT.Command_Line is
function Get_Argument function Get_Argument
(Do_Expansion : Boolean := False; (Do_Expansion : Boolean := False;
Parser : Opt_Parser := Command_Line_Parser) return String; Parser : Opt_Parser := Command_Line_Parser) return String;
-- Returns the next element on the command line that is not a switch. This -- Returns the next element on the command line that is not a switch. This
-- function should not be called before Getopt has returned ASCII.NUL. -- function should be called either after Getopt has returned ASCII.NUL or
-- after Getopt procedure call.
-- --
-- If Do_Expansion is True, then the parameter on the command line will -- If Do_Expansion is True, then the parameter on the command line will
-- be considered as a filename with wildcards, and will be expanded. The -- be considered as a filename with wildcards, and will be expanded. The
...@@ -472,6 +473,16 @@ package GNAT.Command_Line is ...@@ -472,6 +473,16 @@ package GNAT.Command_Line is
-- When there are no more arguments on the command line, this function -- When there are no more arguments on the command line, this function
-- returns an empty string. -- returns an empty string.
function Get_Argument
(Do_Expansion : Boolean := False;
Parser : Opt_Parser := Command_Line_Parser;
End_Of_Arguments : out Boolean) return String;
-- The same as above but able to distinguish empty element in argument list
-- from end of arguments.
-- End_Of_Arguments is True if the end of the command line has been reached
-- (i.e. all available arguments have been returned by previous calls to
-- Get_Argument).
function Parameter function Parameter
(Parser : Opt_Parser := Command_Line_Parser) return String; (Parser : Opt_Parser := Command_Line_Parser) return String;
-- Returns parameter associated with the last switch returned by Getopt. -- Returns parameter associated with the last switch returned by Getopt.
......
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