diff options
author | Dan Hipschman <dsh@google.com> | 2007-07-31 14:16:26 -0700 |
---|---|---|
committer | Dan Hipschman <dsh@gcc.gnu.org> | 2007-07-31 14:16:26 -0700 |
commit | 13e7cedb76dd9a0749e1fd739ddcc188fd6dfde5 (patch) | |
tree | 98733f90e31f6d11e2772431d21926a10d198281 /gcc | |
parent | 7d520b9b1220582ebd84badc309b6cbe0d074797 (diff) | |
download | gcc-13e7cedb76dd9a0749e1fd739ddcc188fd6dfde5.zip gcc-13e7cedb76dd9a0749e1fd739ddcc188fd6dfde5.tar.gz gcc-13e7cedb76dd9a0749e1fd739ddcc188fd6dfde5.tar.bz2 |
This factors the code in xgcc that is used to terminate an accumulated
argument.
From-SVN: r127107
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gcc.c | 101 |
2 files changed, 34 insertions, 73 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e39bbe2..ede2584 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-07-31 Dan Hipschman <dsh@google.com> + + * gcc.c (end_going_arg): New function. + (do_spec_2): Use it. + (do_spec_1): Use it. + 2007-07-31 H.J. Lu <hongjiu.lu@intel.com> * ddg.c (add_cross_iteration_register_deps): Declare bb_info @@ -4373,6 +4373,26 @@ static int input_from_pipe; arguments. */ static const char *suffix_subst; +/* If there is an argument being accumulated, terminate it and store it. */ + +static void +end_going_arg (void) +{ + if (arg_going) + { + const char *string; + + obstack_1grow (&obstack, 0); + string = XOBFINISH (&obstack, const char *); + if (this_is_library_file) + string = find_file (string); + store_arg (string, delete_this_arg, this_is_output_file); + if (this_is_output_file) + outfiles[input_file_number] = string; + arg_going = 0; + } +} + /* Process the spec SPEC and run the commands specified therein. Returns 0 if the spec is successfully processed; -1 if failed. */ @@ -4402,7 +4422,6 @@ do_spec (const char *spec) static int do_spec_2 (const char *spec) { - const char *string; int result; clear_args (); @@ -4415,18 +4434,7 @@ do_spec_2 (const char *spec) result = do_spec_1 (spec, 0, NULL); - /* End any pending argument. */ - if (arg_going) - { - obstack_1grow (&obstack, 0); - string = XOBFINISH (&obstack, const char *); - if (this_is_library_file) - string = find_file (string); - store_arg (string, delete_this_arg, this_is_output_file); - if (this_is_output_file) - outfiles[input_file_number] = string; - arg_going = 0; - } + end_going_arg (); return result; } @@ -4587,7 +4595,6 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) const char *p = spec; int c; int i; - const char *string; int value; while ((c = *p++)) @@ -4596,19 +4603,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) switch (inswitch ? 'a' : c) { case '\n': - /* End of line: finish any pending argument, - then run the pending command if one has been started. */ - if (arg_going) - { - obstack_1grow (&obstack, 0); - string = XOBFINISH (&obstack, const char *); - if (this_is_library_file) - string = find_file (string); - store_arg (string, delete_this_arg, this_is_output_file); - if (this_is_output_file) - outfiles[input_file_number] = string; - } - arg_going = 0; + end_going_arg (); if (argbuf_index > 0 && !strcmp (argbuf[argbuf_index - 1], "|")) { @@ -4642,17 +4637,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) break; case '|': - /* End any pending argument. */ - if (arg_going) - { - obstack_1grow (&obstack, 0); - string = XOBFINISH (&obstack, const char *); - if (this_is_library_file) - string = find_file (string); - store_arg (string, delete_this_arg, this_is_output_file); - if (this_is_output_file) - outfiles[input_file_number] = string; - } + end_going_arg (); /* Use pipe */ obstack_1grow (&obstack, c); @@ -4661,19 +4646,9 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) case '\t': case ' ': - /* Space or tab ends an argument if one is pending. */ - if (arg_going) - { - obstack_1grow (&obstack, 0); - string = XOBFINISH (&obstack, const char *); - if (this_is_library_file) - string = find_file (string); - store_arg (string, delete_this_arg, this_is_output_file); - if (this_is_output_file) - outfiles[input_file_number] = string; - } + end_going_arg (); + /* Reinitialize for a new argument. */ - arg_going = 0; delete_this_arg = 0; this_is_output_file = 0; this_is_library_file = 0; @@ -5101,18 +5076,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) p = handle_braces (p + 1); if (p == 0) return -1; - /* End any pending argument. */ - if (arg_going) - { - obstack_1grow (&obstack, 0); - string = XOBFINISH (&obstack, const char *); - if (this_is_library_file) - string = find_file (string); - store_arg (string, delete_this_arg, this_is_output_file); - if (this_is_output_file) - outfiles[input_file_number] = string; - arg_going = 0; - } + end_going_arg (); /* If any args were output, mark the last one for deletion on failure. */ if (argbuf_index != cur_index) @@ -5431,17 +5395,8 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) /* End of string. If we are processing a spec function, we need to end any pending argument. */ - if (processing_spec_function && arg_going) - { - obstack_1grow (&obstack, 0); - string = XOBFINISH (&obstack, const char *); - if (this_is_library_file) - string = find_file (string); - store_arg (string, delete_this_arg, this_is_output_file); - if (this_is_output_file) - outfiles[input_file_number] = string; - arg_going = 0; - } + if (processing_spec_function) + end_going_arg (); return 0; } |