Commit 7b086b11 by Neil Booth Committed by Neil Booth

c-opts.c (c_common_handle_option): s/on/value/.

	* c-opts.c (c_common_handle_option): s/on/value/.
	(OPT_fabi_version_, OPT_ftabstop_, OPT_ftemplate_depth_): Use value
	directly rather than converting the argument.
	* c.opt: Update docs.  Use UInteger where appropriate.
	* common.opt: Use UInteger where appropriate.
	* opts.c (integral_argument): New.
	(handle_argument): Handle integral arguments, and optional
	joined arguments.
	(common_handle_option): Update.
	* opts.h (CL_MISSING_OK, CL_UINTEGER): New.
	* opts.sh: Handle JoinedOrMissing and UInteger flags.
java:
	* lang.c (java_handle_option): Special-casing of optional
	joined arguments no longer needed.
	* lang.opt: Update switches that take optional argument.

From-SVN: r67999
parent 89aa997a
2003-06-16 Neil Booth <neil@daikokuya.co.uk> 2003-06-16 Neil Booth <neil@daikokuya.co.uk>
* c-opts.c (c_common_handle_option): s/on/value/.
(OPT_fabi_version_, OPT_ftabstop_, OPT_ftemplate_depth_): Use value
directly rather than converting the argument.
* c.opt: Update docs. Use UInteger where appropriate.
* common.opt: Use UInteger where appropriate.
* opts.c (integral_argument): New.
(handle_argument): Handle integral arguments, and optional
joined arguments.
(common_handle_option): Update.
* opts.h (CL_MISSING_OK, CL_UINTEGER): New.
* opts.sh: Handle JoinedOrMissing and UInteger flags.
2003-06-16 Neil Booth <neil@daikokuya.co.uk>
* config/rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_LOCAL): Remove * config/rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_LOCAL): Remove
unnecessary extern declaration. unnecessary extern declaration.
......
...@@ -244,7 +244,7 @@ c_common_init_options (lang) ...@@ -244,7 +244,7 @@ c_common_init_options (lang)
invalid, a negative number to prevent language-independent invalid, a negative number to prevent language-independent
processing in toplev.c (a hack necessary for the short-term). */ processing in toplev.c (a hack necessary for the short-term). */
int int
c_common_handle_option (size_t scode, const char *arg, int on) c_common_handle_option (size_t scode, const char *arg, int value)
{ {
const struct cl_option *option = &cl_options[scode]; const struct cl_option *option = &cl_options[scode];
enum opt_code code = (enum opt_code) scode; enum opt_code code = (enum opt_code) scode;
...@@ -265,7 +265,7 @@ c_common_handle_option (size_t scode, const char *arg, int on) ...@@ -265,7 +265,7 @@ c_common_handle_option (size_t scode, const char *arg, int on)
lang_mask = lang_flags[(c_language << 1) + flag_objc]; lang_mask = lang_flags[(c_language << 1) + flag_objc];
if (!(option->flags & lang_mask)) if (!(option->flags & lang_mask))
{ {
complain_wrong_lang (code, on); complain_wrong_lang (code, value);
return 1; return 1;
} }
...@@ -372,95 +372,95 @@ c_common_handle_option (size_t scode, const char *arg, int on) ...@@ -372,95 +372,95 @@ c_common_handle_option (size_t scode, const char *arg, int on)
break; break;
case OPT_Wabi: case OPT_Wabi:
warn_abi = on; warn_abi = value;
break; break;
case OPT_Wall: case OPT_Wall:
set_Wunused (on); set_Wunused (value);
set_Wformat (on); set_Wformat (value);
set_Wimplicit (on); set_Wimplicit (value);
warn_char_subscripts = on; warn_char_subscripts = value;
warn_missing_braces = on; warn_missing_braces = value;
warn_parentheses = on; warn_parentheses = value;
warn_return_type = on; warn_return_type = value;
warn_sequence_point = on; /* Was C only. */ warn_sequence_point = value; /* Was C only. */
if (c_language == clk_cplusplus) if (c_language == clk_cplusplus)
warn_sign_compare = on; warn_sign_compare = value;
warn_switch = on; warn_switch = value;
warn_strict_aliasing = on; warn_strict_aliasing = value;
/* Only warn about unknown pragmas that are not in system /* Only warn about unknown pragmas that are not in system
headers. */ headers. */
warn_unknown_pragmas = on; warn_unknown_pragmas = value;
/* We save the value of warn_uninitialized, since if they put /* We save the value of warn_uninitialized, since if they put
-Wuninitialized on the command line, we need to generate a -Wuninitialized on the command line, we need to generate a
warning about not using it without also specifying -O. */ warning about not using it without also specifying -O. */
if (warn_uninitialized != 1) if (warn_uninitialized != 1)
warn_uninitialized = (on ? 2 : 0); warn_uninitialized = (value ? 2 : 0);
if (c_language == clk_c) if (c_language == clk_c)
/* We set this to 2 here, but 1 in -Wmain, so -ffreestanding /* We set this to 2 here, but 1 in -Wmain, so -ffreestanding
can turn it off only if it's not explicit. */ can turn it off only if it's not explicit. */
warn_main = on * 2; warn_main = value * 2;
else else
{ {
/* C++-specific warnings. */ /* C++-specific warnings. */
warn_nonvdtor = on; warn_nonvdtor = value;
warn_reorder = on; warn_reorder = value;
warn_nontemplate_friend = on; warn_nontemplate_friend = value;
} }
cpp_opts->warn_trigraphs = on; cpp_opts->warn_trigraphs = value;
cpp_opts->warn_comments = on; cpp_opts->warn_comments = value;
cpp_opts->warn_num_sign_change = on; cpp_opts->warn_num_sign_change = value;
cpp_opts->warn_multichar = on; /* Was C++ only. */ cpp_opts->warn_multichar = value; /* Was C++ only. */
break; break;
case OPT_Wbad_function_cast: case OPT_Wbad_function_cast:
warn_bad_function_cast = on; warn_bad_function_cast = value;
break; break;
case OPT_Wcast_qual: case OPT_Wcast_qual:
warn_cast_qual = on; warn_cast_qual = value;
break; break;
case OPT_Wchar_subscripts: case OPT_Wchar_subscripts:
warn_char_subscripts = on; warn_char_subscripts = value;
break; break;
case OPT_Wcomment: case OPT_Wcomment:
case OPT_Wcomments: case OPT_Wcomments:
cpp_opts->warn_comments = on; cpp_opts->warn_comments = value;
break; break;
case OPT_Wconversion: case OPT_Wconversion:
warn_conversion = on; warn_conversion = value;
break; break;
case OPT_Wctor_dtor_privacy: case OPT_Wctor_dtor_privacy:
warn_ctor_dtor_privacy = on; warn_ctor_dtor_privacy = value;
break; break;
case OPT_Wdeprecated: case OPT_Wdeprecated:
warn_deprecated = on; warn_deprecated = value;
cpp_opts->warn_deprecated = on; cpp_opts->warn_deprecated = value;
break; break;
case OPT_Wdiv_by_zero: case OPT_Wdiv_by_zero:
warn_div_by_zero = on; warn_div_by_zero = value;
break; break;
case OPT_Weffc__: case OPT_Weffc__:
warn_ecpp = on; warn_ecpp = value;
break; break;
case OPT_Wendif_labels: case OPT_Wendif_labels:
cpp_opts->warn_endif_labels = on; cpp_opts->warn_endif_labels = value;
break; break;
case OPT_Werror: case OPT_Werror:
cpp_opts->warnings_are_errors = on; cpp_opts->warnings_are_errors = value;
break; break;
case OPT_Werror_implicit_function_declaration: case OPT_Werror_implicit_function_declaration:
...@@ -468,11 +468,11 @@ c_common_handle_option (size_t scode, const char *arg, int on) ...@@ -468,11 +468,11 @@ c_common_handle_option (size_t scode, const char *arg, int on)
break; break;
case OPT_Wfloat_equal: case OPT_Wfloat_equal:
warn_float_equal = on; warn_float_equal = value;
break; break;
case OPT_Wformat: case OPT_Wformat:
set_Wformat (on); set_Wformat (value);
break; break;
case OPT_Wformat_: case OPT_Wformat_:
...@@ -480,192 +480,192 @@ c_common_handle_option (size_t scode, const char *arg, int on) ...@@ -480,192 +480,192 @@ c_common_handle_option (size_t scode, const char *arg, int on)
break; break;
case OPT_Wformat_extra_args: case OPT_Wformat_extra_args:
warn_format_extra_args = on; warn_format_extra_args = value;
break; break;
case OPT_Wformat_nonliteral: case OPT_Wformat_nonliteral:
warn_format_nonliteral = on; warn_format_nonliteral = value;
break; break;
case OPT_Wformat_security: case OPT_Wformat_security:
warn_format_security = on; warn_format_security = value;
break; break;
case OPT_Wformat_y2k: case OPT_Wformat_y2k:
warn_format_y2k = on; warn_format_y2k = value;
break; break;
case OPT_Wformat_zero_length: case OPT_Wformat_zero_length:
warn_format_zero_length = on; warn_format_zero_length = value;
break; break;
case OPT_Wimplicit: case OPT_Wimplicit:
set_Wimplicit (on); set_Wimplicit (value);
break; break;
case OPT_Wimplicit_function_declaration: case OPT_Wimplicit_function_declaration:
mesg_implicit_function_declaration = on; mesg_implicit_function_declaration = value;
break; break;
case OPT_Wimplicit_int: case OPT_Wimplicit_int:
warn_implicit_int = on; warn_implicit_int = value;
break; break;
case OPT_Wimport: case OPT_Wimport:
cpp_opts->warn_import = on; cpp_opts->warn_import = value;
break; break;
case OPT_Winvalid_offsetof: case OPT_Winvalid_offsetof:
warn_invalid_offsetof = on; warn_invalid_offsetof = value;
break; break;
case OPT_Winvalid_pch: case OPT_Winvalid_pch:
cpp_opts->warn_invalid_pch = on; cpp_opts->warn_invalid_pch = value;
break; break;
case OPT_Wlong_long: case OPT_Wlong_long:
warn_long_long = on; warn_long_long = value;
break; break;
case OPT_Wmain: case OPT_Wmain:
if (on) if (value)
warn_main = 1; warn_main = 1;
else else
warn_main = -1; warn_main = -1;
break; break;
case OPT_Wmissing_braces: case OPT_Wmissing_braces:
warn_missing_braces = on; warn_missing_braces = value;
break; break;
case OPT_Wmissing_declarations: case OPT_Wmissing_declarations:
warn_missing_declarations = on; warn_missing_declarations = value;
break; break;
case OPT_Wmissing_format_attribute: case OPT_Wmissing_format_attribute:
warn_missing_format_attribute = on; warn_missing_format_attribute = value;
break; break;
case OPT_Wmissing_prototypes: case OPT_Wmissing_prototypes:
warn_missing_prototypes = on; warn_missing_prototypes = value;
break; break;
case OPT_Wmultichar: case OPT_Wmultichar:
cpp_opts->warn_multichar = on; cpp_opts->warn_multichar = value;
break; break;
case OPT_Wnested_externs: case OPT_Wnested_externs:
warn_nested_externs = on; warn_nested_externs = value;
break; break;
case OPT_Wnon_template_friend: case OPT_Wnon_template_friend:
warn_nontemplate_friend = on; warn_nontemplate_friend = value;
break; break;
case OPT_Wnon_virtual_dtor: case OPT_Wnon_virtual_dtor:
warn_nonvdtor = on; warn_nonvdtor = value;
break; break;
case OPT_Wnonnull: case OPT_Wnonnull:
warn_nonnull = on; warn_nonnull = value;
break; break;
case OPT_Wold_style_cast: case OPT_Wold_style_cast:
warn_old_style_cast = on; warn_old_style_cast = value;
break; break;
case OPT_Woverloaded_virtual: case OPT_Woverloaded_virtual:
warn_overloaded_virtual = on; warn_overloaded_virtual = value;
break; break;
case OPT_Wparentheses: case OPT_Wparentheses:
warn_parentheses = on; warn_parentheses = value;
break; break;
case OPT_Wpmf_conversions: case OPT_Wpmf_conversions:
warn_pmf2ptr = on; warn_pmf2ptr = value;
break; break;
case OPT_Wpointer_arith: case OPT_Wpointer_arith:
warn_pointer_arith = on; warn_pointer_arith = value;
break; break;
case OPT_Wprotocol: case OPT_Wprotocol:
warn_protocol = on; warn_protocol = value;
break; break;
case OPT_Wselector: case OPT_Wselector:
warn_selector = on; warn_selector = value;
break; break;
case OPT_Wredundant_decls: case OPT_Wredundant_decls:
warn_redundant_decls = on; warn_redundant_decls = value;
break; break;
case OPT_Wreorder: case OPT_Wreorder:
warn_reorder = on; warn_reorder = value;
break; break;
case OPT_Wreturn_type: case OPT_Wreturn_type:
warn_return_type = on; warn_return_type = value;
break; break;
case OPT_Wsequence_point: case OPT_Wsequence_point:
warn_sequence_point = on; warn_sequence_point = value;
break; break;
case OPT_Wsign_compare: case OPT_Wsign_compare:
warn_sign_compare = on; warn_sign_compare = value;
break; break;
case OPT_Wsign_promo: case OPT_Wsign_promo:
warn_sign_promo = on; warn_sign_promo = value;
break; break;
case OPT_Wstrict_prototypes: case OPT_Wstrict_prototypes:
warn_strict_prototypes = on; warn_strict_prototypes = value;
break; break;
case OPT_Wsynth: case OPT_Wsynth:
warn_synth = on; warn_synth = value;
break; break;
case OPT_Wsystem_headers: case OPT_Wsystem_headers:
cpp_opts->warn_system_headers = on; cpp_opts->warn_system_headers = value;
break; break;
case OPT_Wtraditional: case OPT_Wtraditional:
warn_traditional = on; warn_traditional = value;
cpp_opts->warn_traditional = on; cpp_opts->warn_traditional = value;
break; break;
case OPT_Wtrigraphs: case OPT_Wtrigraphs:
cpp_opts->warn_trigraphs = on; cpp_opts->warn_trigraphs = value;
break; break;
case OPT_Wundeclared_selector: case OPT_Wundeclared_selector:
warn_undeclared_selector = on; warn_undeclared_selector = value;
break; break;
case OPT_Wundef: case OPT_Wundef:
cpp_opts->warn_undef = on; cpp_opts->warn_undef = value;
break; break;
case OPT_Wunknown_pragmas: case OPT_Wunknown_pragmas:
/* Set to greater than 1, so that even unknown pragmas in /* Set to greater than 1, so that even unknown pragmas in
system headers will be warned about. */ system headers will be warned about. */
warn_unknown_pragmas = on * 2; warn_unknown_pragmas = value * 2;
break; break;
case OPT_Wunused_macros: case OPT_Wunused_macros:
warn_unused_macros = on; warn_unused_macros = value;
break; break;
case OPT_Wwrite_strings: case OPT_Wwrite_strings:
if (c_language == clk_c) if (c_language == clk_c)
flag_const_strings = on; flag_const_strings = value;
else else
warn_write_strings = on; warn_write_strings = value;
break; break;
case OPT_ansi: case OPT_ansi:
...@@ -682,7 +682,7 @@ c_common_handle_option (size_t scode, const char *arg, int on) ...@@ -682,7 +682,7 @@ c_common_handle_option (size_t scode, const char *arg, int on)
case OPT_fcond_mismatch: case OPT_fcond_mismatch:
if (c_language == clk_c) if (c_language == clk_c)
{ {
flag_cond_mismatch = on; flag_cond_mismatch = value;
break; break;
} }
/* Fall through. */ /* Fall through. */
...@@ -705,38 +705,38 @@ c_common_handle_option (size_t scode, const char *arg, int on) ...@@ -705,38 +705,38 @@ c_common_handle_option (size_t scode, const char *arg, int on)
break; break;
case OPT_fabi_version_: case OPT_fabi_version_:
flag_abi_version = read_integral_parameter (arg, option->opt_text, 1); flag_abi_version = value;
break; break;
case OPT_faccess_control: case OPT_faccess_control:
flag_access_control = on; flag_access_control = value;
break; break;
case OPT_falt_external_templates: case OPT_falt_external_templates:
flag_alt_external_templates = on; flag_alt_external_templates = value;
if (on) if (value)
flag_external_templates = true; flag_external_templates = true;
cp_deprecated: cp_deprecated:
warning ("switch \"%s\" is deprecated, please see documentation for details", option->opt_text); warning ("switch \"%s\" is deprecated, please see documentation for details", option->opt_text);
break; break;
case OPT_fasm: case OPT_fasm:
flag_no_asm = !on; flag_no_asm = !value;
break; break;
case OPT_fbuiltin: case OPT_fbuiltin:
flag_no_builtin = !on; flag_no_builtin = !value;
break; break;
case OPT_fbuiltin_: case OPT_fbuiltin_:
if (on) if (value)
result = 0; result = 0;
else else
disable_builtin_function (arg); disable_builtin_function (arg);
break; break;
case OPT_fdollars_in_identifiers: case OPT_fdollars_in_identifiers:
cpp_opts->dollars_in_ident = on; cpp_opts->dollars_in_ident = value;
break; break;
case OPT_fdump_: case OPT_fdump_:
...@@ -745,56 +745,56 @@ c_common_handle_option (size_t scode, const char *arg, int on) ...@@ -745,56 +745,56 @@ c_common_handle_option (size_t scode, const char *arg, int on)
break; break;
case OPT_ffreestanding: case OPT_ffreestanding:
on = !on; value = !value;
/* Fall through... */ /* Fall through... */
case OPT_fhosted: case OPT_fhosted:
flag_hosted = on; flag_hosted = value;
flag_no_builtin = !on; flag_no_builtin = !value;
/* warn_main will be 2 if set by -Wall, 1 if set by -Wmain */ /* warn_main will be 2 if set by -Wall, 1 if set by -Wmain */
if (!on && warn_main == 2) if (!value && warn_main == 2)
warn_main = 0; warn_main = 0;
break; break;
case OPT_fshort_double: case OPT_fshort_double:
flag_short_double = on; flag_short_double = value;
break; break;
case OPT_fshort_enums: case OPT_fshort_enums:
flag_short_enums = on; flag_short_enums = value;
break; break;
case OPT_fshort_wchar: case OPT_fshort_wchar:
flag_short_wchar = on; flag_short_wchar = value;
break; break;
case OPT_fsigned_bitfields: case OPT_fsigned_bitfields:
flag_signed_bitfields = on; flag_signed_bitfields = value;
explicit_flag_signed_bitfields = 1; explicit_flag_signed_bitfields = 1;
break; break;
case OPT_fsigned_char: case OPT_fsigned_char:
flag_signed_char = on; flag_signed_char = value;
break; break;
case OPT_funsigned_bitfields: case OPT_funsigned_bitfields:
flag_signed_bitfields = !on; flag_signed_bitfields = !value;
explicit_flag_signed_bitfields = 1; explicit_flag_signed_bitfields = 1;
break; break;
case OPT_funsigned_char: case OPT_funsigned_char:
flag_signed_char = !on; flag_signed_char = !value;
break; break;
case OPT_fcheck_new: case OPT_fcheck_new:
flag_check_new = on; flag_check_new = value;
break; break;
case OPT_fconserve_space: case OPT_fconserve_space:
flag_conserve_space = on; flag_conserve_space = value;
break; break;
case OPT_fconst_strings: case OPT_fconst_strings:
flag_const_strings = on; flag_const_strings = value;
break; break;
case OPT_fconstant_string_class_: case OPT_fconstant_string_class_:
...@@ -802,19 +802,19 @@ c_common_handle_option (size_t scode, const char *arg, int on) ...@@ -802,19 +802,19 @@ c_common_handle_option (size_t scode, const char *arg, int on)
break; break;
case OPT_fdefault_inline: case OPT_fdefault_inline:
flag_default_inline = on; flag_default_inline = value;
break; break;
case OPT_felide_constructors: case OPT_felide_constructors:
flag_elide_constructors = on; flag_elide_constructors = value;
break; break;
case OPT_fenforce_eh_specs: case OPT_fenforce_eh_specs:
flag_enforce_eh_specs = on; flag_enforce_eh_specs = value;
break; break;
case OPT_fexternal_templates: case OPT_fexternal_templates:
flag_external_templates = on; flag_external_templates = value;
goto cp_deprecated; goto cp_deprecated;
case OPT_ffixed_form: case OPT_ffixed_form:
...@@ -825,108 +825,104 @@ c_common_handle_option (size_t scode, const char *arg, int on) ...@@ -825,108 +825,104 @@ c_common_handle_option (size_t scode, const char *arg, int on)
break; break;
case OPT_ffor_scope: case OPT_ffor_scope:
flag_new_for_scope = on; flag_new_for_scope = value;
break; break;
case OPT_fgnu_keywords: case OPT_fgnu_keywords:
flag_no_gnu_keywords = !on; flag_no_gnu_keywords = !value;
break; break;
case OPT_fgnu_runtime: case OPT_fgnu_runtime:
flag_next_runtime = !on; flag_next_runtime = !value;
break; break;
case OPT_fhandle_exceptions: case OPT_fhandle_exceptions:
warning ("-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"); warning ("-fhandle-exceptions has been renamed -fexceptions (and is now on by default)");
flag_exceptions = on; flag_exceptions = value;
break; break;
case OPT_fimplement_inlines: case OPT_fimplement_inlines:
flag_implement_inlines = on; flag_implement_inlines = value;
break; break;
case OPT_fimplicit_inline_templates: case OPT_fimplicit_inline_templates:
flag_implicit_inline_templates = on; flag_implicit_inline_templates = value;
break; break;
case OPT_fimplicit_templates: case OPT_fimplicit_templates:
flag_implicit_templates = on; flag_implicit_templates = value;
break; break;
case OPT_fms_extensions: case OPT_fms_extensions:
flag_ms_extensions = on; flag_ms_extensions = value;
break; break;
case OPT_fnext_runtime: case OPT_fnext_runtime:
flag_next_runtime = on; flag_next_runtime = value;
break; break;
case OPT_fnonansi_builtins: case OPT_fnonansi_builtins:
flag_no_nonansi_builtin = !on; flag_no_nonansi_builtin = !value;
break; break;
case OPT_foperator_names: case OPT_foperator_names:
cpp_opts->operator_names = on; cpp_opts->operator_names = value;
break; break;
case OPT_foptional_diags: case OPT_foptional_diags:
flag_optional_diags = on; flag_optional_diags = value;
break; break;
case OPT_fpch_deps: case OPT_fpch_deps:
cpp_opts->restore_pch_deps = on; cpp_opts->restore_pch_deps = value;
break; break;
case OPT_fpermissive: case OPT_fpermissive:
flag_permissive = on; flag_permissive = value;
break; break;
case OPT_fpreprocessed: case OPT_fpreprocessed:
cpp_opts->preprocessed = on; cpp_opts->preprocessed = value;
break; break;
case OPT_frepo: case OPT_frepo:
flag_use_repository = on; flag_use_repository = value;
if (on) if (value)
flag_implicit_templates = 0; flag_implicit_templates = 0;
break; break;
case OPT_frtti: case OPT_frtti:
flag_rtti = on; flag_rtti = value;
break; break;
case OPT_fshow_column: case OPT_fshow_column:
cpp_opts->show_column = on; cpp_opts->show_column = value;
break; break;
case OPT_fstats: case OPT_fstats:
flag_detailed_statistics = on; flag_detailed_statistics = value;
break; break;
case OPT_ftabstop_: case OPT_ftabstop_:
/* It is documented that we silently ignore silly values. */ /* It is documented that we silently ignore silly values. */
{ if (value >= 1 && value <= 100)
char *endptr; cpp_opts->tabstop = value;
long tabstop = strtol (arg, &endptr, 10);
if (*endptr == '\0' && tabstop >= 1 && tabstop <= 100)
cpp_opts->tabstop = tabstop;
}
break; break;
case OPT_ftemplate_depth_: case OPT_ftemplate_depth_:
max_tinst_depth = read_integral_parameter (arg, option->opt_text, 0); max_tinst_depth = value;
break; break;
case OPT_fvtable_gc: case OPT_fvtable_gc:
flag_vtable_gc = on; flag_vtable_gc = value;
break; break;
case OPT_fuse_cxa_atexit: case OPT_fuse_cxa_atexit:
flag_use_cxa_atexit = on; flag_use_cxa_atexit = value;
break; break;
case OPT_fweak: case OPT_fweak:
flag_weak = on; flag_weak = value;
break; break;
case OPT_gen_decls: case OPT_gen_decls:
......
...@@ -32,7 +32,11 @@ ...@@ -32,7 +32,11 @@
; compiler recognize the switch, as declared by "Language" entries. ; compiler recognize the switch, as declared by "Language" entries.
; If the switch takes an argument, then you should also specify ; If the switch takes an argument, then you should also specify
; "Joined" and/or "Separate" to indicate where the argument can ; "Joined" and/or "Separate" to indicate where the argument can
; appear. ; appear. If a Joined argument can legitimately be omitted, specify
; "JoinedOrMissing" instead of "Joined". If the argument to a switch
; is a non-negative integer, you can specify "UInteger" and the switch
; decoder will convert the argument for you, or complain to the user
; if the argument is invalid.
; Comments can appear on their own line anwhere in the file, preceded ; Comments can appear on their own line anwhere in the file, preceded
; by a semicolon. Whitespace is permitted before the semicolon. ; by a semicolon. Whitespace is permitted before the semicolon.
...@@ -311,7 +315,7 @@ d ...@@ -311,7 +315,7 @@ d
C ObjC C++ ObjC++ Joined C ObjC C++ ObjC++ Joined
fabi-version= fabi-version=
C++ ObjC++ Joined C++ ObjC++ Joined UInteger
faccess-control faccess-control
C++ ObjC++ C++ ObjC++
...@@ -479,10 +483,10 @@ fstrict-prototype ...@@ -479,10 +483,10 @@ fstrict-prototype
C++ ObjC++ C++ ObjC++
ftabstop= ftabstop=
C ObjC C++ ObjC++ Joined RejectNegative C ObjC C++ ObjC++ Joined RejectNegative UInteger
ftemplate-depth- ftemplate-depth-
C++ ObjC++ Joined C++ ObjC++ Joined RejectNegative UInteger
fthis-is-variable fthis-is-variable
C++ ObjC++ C++ ObjC++
......
...@@ -18,26 +18,7 @@ ...@@ -18,26 +18,7 @@
; Software Foundation, 59 Temple Place - Suite 330, Boston, MA ; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
; 02111-1307, USA. ; 02111-1307, USA.
; See c.opt for a description of this file's format.
; This file is processed by the script opts.sh. It is a database of
; command line options, with each record separated by a blank line,
; and each field appearing on its own line. The first field is the
; command-line switch with the leading "-" removed. All options
; beginning with "f" or "W" are implicitly assumed to take a "no-"
; form; this form should not be listed. If you do not want this
; negative form and you want it to be automatically rejected, add
; RejectNegative to the second field.
; The second field should contain "Common". If the switch takes an
; argument, then you should also specify "Joined" and/or "Separate" to
; indicate where the argument can appear.
; Comments can appear on their own line anwhere in the file, preceded
; by a semicolon. Whitespace is permitted before the semicolon.
; For each switch XXX below, an enumeration constant is created by the
; script opts.sh spelt OPT_XXX, but with all non-alphanumeric
; characters replaced with an underscore.
; Please try to keep this file in ASCII collating order. ; Please try to keep this file in ASCII collating order.
...@@ -51,7 +32,7 @@ Common ...@@ -51,7 +32,7 @@ Common
Common Common
G G
Common Joined Separate Common Joined Separate UInteger
aux-info aux-info
Common Separate Common Separate
......
2003-06-16 Neil Booth <neil@daikokuya.co.uk>
* lang.c (java_handle_option): Special-casing of optional
joined arguments no longer needed.
* lang.opt: Update switches that take optional argument.
2003-06-15 Neil Booth <neil@daikokuya.co.uk> 2003-06-15 Neil Booth <neil@daikokuya.co.uk>
* lang.opt: Declare Java. * lang.opt: Declare Java.
......
...@@ -274,17 +274,8 @@ java_handle_option (size_t scode, const char *arg, int value) ...@@ -274,17 +274,8 @@ java_handle_option (size_t scode, const char *arg, int value)
if (arg == NULL && (option->flags & (CL_JOINED | CL_SEPARATE))) if (arg == NULL && (option->flags & (CL_JOINED | CL_SEPARATE)))
{ {
/* These can take an empty argument. */ error ("missing argument to \"-%s\"", option->opt_text);
if (code == OPT_fassume_compiled_ return 1;
|| code == OPT_fclasspath_
|| code == OPT_fCLASSPATH_
|| code == OPT_fbootclasspath_)
arg = "";
else
{
error ("missing argument to \"-%s\"", option->opt_text);
return 1;
}
} }
switch (code) switch (code)
......
...@@ -65,7 +65,7 @@ Wredundant-modifiers ...@@ -65,7 +65,7 @@ Wredundant-modifiers
Java Java
fCLASSPATH= fCLASSPATH=
Java Joined RejectNegative Java JoinedOrMissing RejectNegative
fassert fassert
Java Java
...@@ -74,16 +74,16 @@ fassume-compiled ...@@ -74,16 +74,16 @@ fassume-compiled
Java Java
fassume-compiled= fassume-compiled=
Java Joined Java JoinedOrMissing
fbootclasspath= fbootclasspath=
Java Joined RejectNegative Java JoinedOrMissing RejectNegative
fcheck-references fcheck-references
Java Java
fclasspath= fclasspath=
Java Joined RejectNegative Java JoinedOrMissing RejectNegative
fcompile-resource= fcompile-resource=
Java Joined RejectNegative Java Joined RejectNegative
......
...@@ -130,6 +130,22 @@ find_opt (const char *input, int lang_mask) ...@@ -130,6 +130,22 @@ find_opt (const char *input, int lang_mask)
return result; return result;
} }
/* If ARG is a postive integer made up solely of digits, return its
value, otherwise return -1. */
static int
integral_argument (const char *arg)
{
const char *p = arg;
while (*p && ISDIGIT (*p))
p++;
if (*p == '\0')
return atoi (arg);
return -1;
}
/* Handle the switch beginning at ARGV, with ARGC remaining. */ /* Handle the switch beginning at ARGV, with ARGC remaining. */
int int
handle_option (int argc ATTRIBUTE_UNUSED, char **argv, int lang_mask) handle_option (int argc ATTRIBUTE_UNUSED, char **argv, int lang_mask)
...@@ -137,7 +153,7 @@ handle_option (int argc ATTRIBUTE_UNUSED, char **argv, int lang_mask) ...@@ -137,7 +153,7 @@ handle_option (int argc ATTRIBUTE_UNUSED, char **argv, int lang_mask)
size_t opt_index; size_t opt_index;
const char *opt, *arg = 0; const char *opt, *arg = 0;
char *dup = 0; char *dup = 0;
bool on = true; int value = 1;
int result = 0, temp; int result = 0, temp;
const struct cl_option *option; const struct cl_option *option;
...@@ -149,7 +165,7 @@ handle_option (int argc ATTRIBUTE_UNUSED, char **argv, int lang_mask) ...@@ -149,7 +165,7 @@ handle_option (int argc ATTRIBUTE_UNUSED, char **argv, int lang_mask)
opt_index = cl_options_count; opt_index = cl_options_count;
arg = opt; arg = opt;
main_input_filename = opt; main_input_filename = opt;
result = (*lang_hooks.handle_option) (opt_index, arg, on); result = (*lang_hooks.handle_option) (opt_index, arg, value);
} }
else else
{ {
...@@ -164,7 +180,7 @@ handle_option (int argc ATTRIBUTE_UNUSED, char **argv, int lang_mask) ...@@ -164,7 +180,7 @@ handle_option (int argc ATTRIBUTE_UNUSED, char **argv, int lang_mask)
dup[1] = opt[1]; dup[1] = opt[1];
memcpy (dup + 2, opt + 5, len - 2 + 1); memcpy (dup + 2, opt + 5, len - 2 + 1);
opt = dup; opt = dup;
on = false; value = 0;
} }
opt_index = find_opt (opt + 1, lang_mask | CL_COMMON); opt_index = find_opt (opt + 1, lang_mask | CL_COMMON);
...@@ -174,48 +190,62 @@ handle_option (int argc ATTRIBUTE_UNUSED, char **argv, int lang_mask) ...@@ -174,48 +190,62 @@ handle_option (int argc ATTRIBUTE_UNUSED, char **argv, int lang_mask)
option = &cl_options[opt_index]; option = &cl_options[opt_index];
/* Reject negative form of switches that don't take negatives. */ /* Reject negative form of switches that don't take negatives. */
if (!on && (option->flags & CL_REJECT_NEGATIVE)) if (!value && (option->flags & CL_REJECT_NEGATIVE))
goto done; goto done;
/* We've recognized this switch. */ /* We've recognized this switch. */
result = 1; result = 1;
/* Sort out any argument the switch takes. */ /* Sort out any argument the switch takes. */
if (option->flags & (CL_JOINED | CL_SEPARATE)) if (option->flags & CL_JOINED)
{ {
if (option->flags & CL_JOINED) /* Have arg point to the original switch. This is because
some code, such as disable_builtin_function, expects its
argument to be persistent until the program exits. */
arg = argv[0] + cl_options[opt_index].opt_len + 1;
if (!value)
arg += strlen ("no-");
if (*arg == '\0' && !(option->flags & CL_MISSING_OK))
{ {
/* Have arg point to the original switch. This is because if (option->flags & CL_SEPARATE)
some code, such as disable_builtin_function, expects its {
argument to be persistent until the program exits. */ arg = argv[1];
arg = argv[0] + cl_options[opt_index].opt_len + 1; result = 2;
if (!on) }
arg += strlen ("no-"); else
/* Missing argument. */
arg = NULL;
} }
}
else if (option->flags & CL_SEPARATE)
{
arg = argv[1];
result = 2;
}
/* If we don't have an argument, and CL_SEPARATE, try the next /* If the switch takes an integer, convert it. */
argument in the vector. */ if (arg && (option->flags & CL_UINTEGER))
if (!arg || (*arg == '\0' && option->flags & CL_SEPARATE)) {
value = integral_argument (arg);
if (value == -1)
{ {
arg = argv[1]; error ("argument to \"-%s\" should be a non-negative integer",
result = 2; option->opt_text);
goto done;
} }
/* Canonicalize missing arguments as NULL for the handler. */
if (*arg == '\0')
arg = NULL;
} }
if (option->flags & lang_mask) if (option->flags & lang_mask)
{ {
temp = (*lang_hooks.handle_option) (opt_index, arg, on); temp = (*lang_hooks.handle_option) (opt_index, arg, value);
if (temp <= 0) if (temp <= 0)
result = temp; result = temp;
} }
if (result > 0 && (option->flags & CL_COMMON)) if (result > 0 && (option->flags & CL_COMMON))
{ {
if (common_handle_option (opt_index, arg, on) == 0) if (common_handle_option (opt_index, arg, value) == 0)
result = 0; result = 0;
} }
} }
...@@ -262,9 +292,7 @@ common_handle_option (size_t scode, const char *arg, ...@@ -262,9 +292,7 @@ common_handle_option (size_t scode, const char *arg,
break; break;
case OPT_G: case OPT_G:
g_switch_value = read_integral_parameter (arg, 0, -1); g_switch_value = value;
if (g_switch_value == (unsigned HOST_WIDE_INT) -1)
return 0;
g_switch_set = true; g_switch_set = true;
break; break;
......
...@@ -36,6 +36,8 @@ extern const unsigned int cl_options_count; ...@@ -36,6 +36,8 @@ extern const unsigned int cl_options_count;
#define CL_JOINED (1 << 24) /* If takes joined argument. */ #define CL_JOINED (1 << 24) /* If takes joined argument. */
#define CL_SEPARATE (1 << 25) /* If takes a separate argument. */ #define CL_SEPARATE (1 << 25) /* If takes a separate argument. */
#define CL_REJECT_NEGATIVE (1 << 26) /* Reject no- form. */ #define CL_REJECT_NEGATIVE (1 << 26) /* Reject no- form. */
#define CL_COMMON (1 << 27) /* Language-independent. */ #define CL_MISSING_OK (1 << 27) /* Missing argument OK (joined). */
#define CL_UINTEGER (1 << 28) /* Argument is an integer >=0. */
#define CL_COMMON (1 << 29) /* Language-independent. */
#endif #endif
...@@ -55,8 +55,11 @@ ${AWK} ' ...@@ -55,8 +55,11 @@ ${AWK} '
} }
if (flags ~ " Common ") result = result " | CL_COMMON" if (flags ~ " Common ") result = result " | CL_COMMON"
if (flags ~ " Joined ") result = result " | CL_JOINED" if (flags ~ " Joined ") result = result " | CL_JOINED"
if (flags ~ " JoinedOrMissing ") \
result = result " | CL_JOINED | CL_MISSING_OK"
if (flags ~ " Separate ") result = result " | CL_SEPARATE" if (flags ~ " Separate ") result = result " | CL_SEPARATE"
if (flags ~ " RejectNegative ") result = result " | CL_REJECT_NEGATIVE" if (flags ~ " RejectNegative ") result = result " | CL_REJECT_NEGATIVE"
if (flags ~ " UInteger ") result = result " | CL_UINTEGER"
sub( "^0 \\| ", "", result ) sub( "^0 \\| ", "", result )
return result return result
} }
......
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