[m-rev.] for review: "Did you mean ..." mesages for long options

Julien Fischer jfischer at opturion.com
Sat Apr 6 01:41:45 AEDT 2024


"Did you mean ..." messages for long options.

Generate "Did you mean ..." messages for unrecognized long options.
For example:

     unrecognized option `--no-half-at-wrn'.
     (Did you mean `--no-halt-at-warn'?)

compiler/mercury_compile_main.m:
     If we have an unrecognized long option or negated long option,
     then attempt to generate a "Did you mean ..." message for it.

compiler/error_spec.m:
     Add a version of maybe_construct_did_you_mean_pieces that lets
     you add prefix to the strings before including them in the pieces.
     This is required for handling the "--" and "--no-" long option
     prefixes. Both versions of maybe_construct_did_you_mean pieces
     are implemented using the same underlying piece of code.

compiler/options.m:
      Add predicates for returning the set of all long options and all negatable
      long options. To make this possible, shift the long option table into a
      new predicate and add an (out, out) is multi mode for it.

library/getopt.m:
     Update the documentation to include maybe_string_special options
     among the option types that are negatable.

Julien.

diff --git a/compiler/error_spec.m b/compiler/error_spec.m
index a012667..173b1a1 100644
--- a/compiler/error_spec.m
+++ b/compiler/error_spec.m
@@ -626,6 +626,9 @@
  :- pred maybe_construct_did_you_mean_pieces(string::in, list(string)::in,
      list(format_piece)::out) is det.

+:- pred maybe_construct_prefixed_did_you_mean_pieces(string::in, string::in,
+    list(string)::in, list(format_piece)::out) is det.
+
  %---------------------------------------------------------------------------%

  :- pred extract_spec_phase(error_spec::in, error_phase::out) is det.
@@ -647,6 +650,7 @@
  :- import_module edit_distance.
  :- import_module getopt.
  :- import_module require.
+:- import_module std_util.
  :- import_module string.
  :- import_module term_context.
  :- import_module uint.
@@ -775,6 +779,19 @@ add_quotes(Str) = "`" ++ Str ++ "'".

  maybe_construct_did_you_mean_pieces(BaseName, CandidateNames,
          DidYouMeanPieces) :-
+    do_maybe_construct_did_you_mean_pieces(BaseName, CandidateNames,
+        std_util.id, DidYouMeanPieces).
+
+maybe_construct_prefixed_did_you_mean_pieces(Prefix, BaseName, CandidateNames,
+        DidYouMeanPieces) :-
+    do_maybe_construct_did_you_mean_pieces(BaseName, CandidateNames,
+        add_prefix(Prefix), DidYouMeanPieces).
+
+:- pred do_maybe_construct_did_you_mean_pieces(string::in, list(string)::in,
+    (func(string) = string)::in, list(format_piece)::out) is det.
+
+do_maybe_construct_did_you_mean_pieces(BaseName, CandidateNames,
+        TransformFunc, DidYouMeanPieces) :-
      % Note: name_is_close_enough below depends on all costs here
      % except for case changes being 2u.
      Params = edit_params(2u, 2u, case_sensitive_replacement_cost, 2u),
@@ -824,12 +841,13 @@ maybe_construct_did_you_mean_pieces(BaseName, CandidateNames,
              SuggestedNames0, NonSuggestedNames),
          (
              NonSuggestedNames = [],
-            SuggestedNames = SuggestedNames0
+            SuggestedNames = list.map(TransformFunc, SuggestedNames0)
          ;
              NonSuggestedNames = [_ | _],
              % This should cause the message we create below
              % to end with "or `...'?".
-            SuggestedNames = SuggestedNames0 ++ ["..."]
+            SuggestedNames =
+                list.map(TransformFunc, SuggestedNames0) ++ ["..."]
          ),
          SuggestionPieces = list_to_quoted_pieces_or(SuggestedNames),
          DidYouMeanPieces =
@@ -839,6 +857,12 @@ maybe_construct_did_you_mean_pieces(BaseName, CandidateNames,
          DidYouMeanPieces = []
      ).

+    % Add to stdlib? string.append has wrong mode for list map.
+    %
+:- func add_prefix(string, string) = string.
+
+add_prefix(Prefix, String) = Prefix ++ String.
+
  :- pred name_is_close_enough(uint::in, string::in, uint::in, string::in)
      is semidet.

diff --git a/compiler/mercury_compile_main.m b/compiler/mercury_compile_main.m
index 08325be..a58eaf2 100644
--- a/compiler/mercury_compile_main.m
+++ b/compiler/mercury_compile_main.m
@@ -392,10 +392,8 @@ process_options_std(ProgressStream, ErrorStream, DefaultOptionTable,
          DefaultOptionTable, ArgsOptionTable, cord.init, _UserData, !IO),
      (
          MaybeError = yes(OptionError),
-        OptionErrorStr = option_error_to_string(OptionError),
-        Spec = simplest_no_context_spec($pred, severity_error,
-            phase_options, [words(OptionErrorStr), suffix("."), nl]),
-        Result = opr_failure([Spec])
+        Specs = make_option_error(OptionError),
+        Result = opr_failure(Specs)
      ;
          MaybeError = no,
          getopt.lookup_accumulating_option(ArgsOptionTable,
@@ -576,6 +574,45 @@ maybe_dump_options_file(OutStream, ArgsOptionTable, OptionsVariables, !IO) :-

  %---------------------------------------------------------------------------%

+:- func make_option_error(option_error(option)) = list(error_spec).
+
+make_option_error(OptionError) = Specs :-
+    OptionErrorStr = option_error_to_string(OptionError),
+    ( if
+        OptionError = unrecognized_option(OptionStr),
+        ( if string.remove_prefix("--no-", OptionStr, BaseOptionStr0) then
+            IsNegatedOption = yes,
+            BaseOptionStr = BaseOptionStr0
+        else if string.remove_prefix("--", OptionStr, BaseOptionStr0) then
+            IsNegatedOption = no,
+            BaseOptionStr = BaseOptionStr0
+        else
+            false
+        ),
+        not is_empty(BaseOptionStr)
+    then
+        (
+            IsNegatedOption = yes,
+            Prefix = "--no-",
+            all_negatable_long_option_strings(OptionStrs)
+        ;
+            IsNegatedOption = no,
+            Prefix = "--",
+            all_long_option_strings(OptionStrs)
+        ),
+        maybe_construct_prefixed_did_you_mean_pieces(Prefix, BaseOptionStr,
+            OptionStrs, DidYouMeanPieces0),
+        DidYouMeanPieces = [nl_indent_delta(-1) | DidYouMeanPieces0]
+    else
+        DidYouMeanPieces = []
+    ),
+    Spec = simplest_no_context_spec($pred, severity_error,
+        phase_options,
+        [words(OptionErrorStr), suffix("."), nl | DidYouMeanPieces]),
+    Specs = [Spec].
+
+%---------------------------------------------------------------------------%
+
  main_for_make(ProgressStream, ErrorStream, Globals, Args, !IO) :-
      DetectedGradeFlags = [],
      io.environment.get_environment_var_map(EnvVarMap, !IO),
diff --git a/compiler/options.m b/compiler/options.m
index 20f91eb..cd2962e 100644
--- a/compiler/options.m
+++ b/compiler/options.m
@@ -36,7 +36,7 @@
  %   option is a style warning option, in the second that handles
  %   inhibit_style_warnings.
  %
-% - Every option should have a clause in the long_options predicate
+% - Every option should have a clause in the long_option_table predicate
  %   that converts the user-visible name of the option into its internal
  %   representation as a value in the options type. For options whose names
  %   include words that whose spelling differs in American vs British English,
@@ -78,6 +78,16 @@
  :- pred short_option(char::in, option::out) is semidet.
  :- pred long_option(string::in, option::out) is semidet.

+    % Return the list of all long option strings excluding the "--"
+    % or "--no-" prefixes.
+    %
+:- pred all_long_option_strings(list(string)::out) is det.
+
+    % Return the list of all long options strings that can be preceded
+    % with the "--no-" prefix. The strings do not include the prefix.
+    %
+:- pred all_negatable_long_option_strings(list(string)::out) is det.
+
      % special_handler(Option, ValueForThatOption, OptionTableIn,
      %   MaybeOptionTableOut):
      %
@@ -154,7 +164,7 @@
      %
      % - in this definition of the `option' type
      % - in the clauses of the `optdef' predicate
-    % - in the clauses of `long_option' predicate
+    % - in the clauses of `long_option_table' predicate
      %   (not in the clauses of the `short_option' predicate, since
      %   that is sorted alphabetically on the option letter)
      % - in the special_handler predicate, if they appear there
@@ -2146,1136 +2156,1223 @@ short_option('w', inhibit_warnings).
  short_option('x', only_opmode_make_xml_documentation).
  short_option('?', help).

+long_option(String, Option) :-
+    long_option_table(String, Option).
+
+all_long_option_strings(OptionStrings) :-
+    Pred = (pred(OptionString::out) is multi :-
+        long_option_table(OptionString, _)
+    ),
+    solutions(Pred, OptionStrings).
+
+all_negatable_long_option_strings(OptionStrings) :-
+    Pred = (pred(OptionString::out) is nondet :-
+        long_option_table(OptionString, Option),
+        optdef(_, Option, OptionData),
+        ( OptionData = bool(_)
+        ; OptionData = maybe_int(_)
+        ; OptionData = maybe_string(_)
+        ; OptionData = accumulating(_)
+        ; OptionData = bool_special
+        ; OptionData = maybe_string_special
+        )
+    ),
+    solutions(Pred, OptionStrings).
+
+:- pred long_option_table(string, option).
+:- mode long_option_table(in, out) is semidet.
+:- mode long_option_table(out, out) is multi.
+
  % warning options
-long_option("inhibit-warnings",         inhibit_warnings).
-long_option("inhibit-style-warnings",   inhibit_style_warnings).
-long_option("warn-accumulator-swaps",   warn_accumulator_swaps).
-long_option("halt-at-warn",             halt_at_warn).
-long_option("halt-at-warn-make-int",    halt_at_warn_make_int).
-long_option("halt-at-warn-make-interface",  halt_at_warn_make_int).
-long_option("halt-at-warn-make-opt",    halt_at_warn_make_opt).
-long_option("halt-at-syntax-errors",    halt_at_syntax_errors).
-long_option("halt-at-auto-parallel-failure", halt_at_auto_parallel_failure).
-long_option("halt-at-invalid-interface",    halt_at_invalid_interface).
-long_option("warn-singleton-variables", warn_singleton_vars).
-long_option("warn-singleton-vars",      warn_singleton_vars).
-long_option("warn-overlapping-scopes",  warn_overlapping_scopes).
-long_option("warn-det-decls-too-lax",   warn_det_decls_too_lax).
-long_option("warn-inferred-erroneous",  warn_inferred_erroneous).
-long_option("warn-nothing-exported",    warn_nothing_exported).
-long_option("warn-unused-args",         warn_unused_args).
-long_option("warn-interface-imports",   warn_interface_imports).
-long_option("warn-interface-imports-in-parents",
+long_option_table("inhibit-warnings",         inhibit_warnings).
+long_option_table("inhibit-style-warnings",   inhibit_style_warnings).
+long_option_table("warn-accumulator-swaps",   warn_accumulator_swaps).
+long_option_table("halt-at-warn",             halt_at_warn).
+long_option_table("halt-at-warn-make-int",    halt_at_warn_make_int).
+long_option_table("halt-at-warn-make-interface",  halt_at_warn_make_int).
+long_option_table("halt-at-warn-make-opt",    halt_at_warn_make_opt).
+long_option_table("halt-at-syntax-errors",    halt_at_syntax_errors).
+long_option_table("halt-at-auto-parallel-failure",
+                    halt_at_auto_parallel_failure).
+long_option_table("halt-at-invalid-interface",    halt_at_invalid_interface).
+long_option_table("warn-singleton-variables", warn_singleton_vars).
+long_option_table("warn-singleton-vars",      warn_singleton_vars).
+long_option_table("warn-overlapping-scopes",  warn_overlapping_scopes).
+long_option_table("warn-det-decls-too-lax",   warn_det_decls_too_lax).
+long_option_table("warn-inferred-erroneous",  warn_inferred_erroneous).
+long_option_table("warn-nothing-exported",    warn_nothing_exported).
+long_option_table("warn-unused-args",         warn_unused_args).
+long_option_table("warn-interface-imports",   warn_interface_imports).
+long_option_table("warn-interface-imports-in-parents",
                                          warn_interface_imports_in_parents).
-long_option("warn-inconsistent-pred-order",
+long_option_table("warn-inconsistent-pred-order",
                      warn_inconsistent_pred_order_clauses).
-long_option("warn-inconsistent-pred-order-clauses",
+long_option_table("warn-inconsistent-pred-order-clauses",
                      warn_inconsistent_pred_order_clauses).
-long_option("warn-inconsistent-pred-order-foreign-procs",
+long_option_table("warn-inconsistent-pred-order-foreign-procs",
                      warn_inconsistent_pred_order_foreign_procs).
-long_option("warn-non-contiguous-decls",    warn_non_contiguous_decls).
-long_option("warn-non-contiguous-clauses",  warn_non_contiguous_clauses).
-long_option("warn-non-contiguous-foreign-procs",
+long_option_table("warn-non-contiguous-decls",    warn_non_contiguous_decls).
+long_option_table("warn-non-contiguous-clauses",  warn_non_contiguous_clauses).
+long_option_table("warn-non-contiguous-foreign-procs",
                                          warn_non_contiguous_foreign_procs).
-long_option("warn-non-stratification",  warn_non_stratification).
-long_option("warn-missing-opt-files",   warn_missing_opt_files).
-long_option("warn-missing-trans-opt-files", warn_missing_trans_opt_files).
-long_option("warn-missing-trans-opt-deps",  warn_missing_trans_opt_deps).
-long_option("warn-unification-cannot-succeed",
+long_option_table("warn-non-stratification",  warn_non_stratification).
+long_option_table("warn-missing-opt-files",   warn_missing_opt_files).
+long_option_table("warn-missing-trans-opt-files",
+                                        warn_missing_trans_opt_files).
+long_option_table("warn-missing-trans-opt-deps",  warn_missing_trans_opt_deps).
+long_option_table("warn-unification-cannot-succeed",
                                          warn_unification_cannot_succeed).
-long_option("warn-simple-code",         warn_simple_code).
-long_option("warn-duplicate-calls",     warn_duplicate_calls).
-long_option("warn-implicit-stream-calls",   warn_implicit_stream_calls).
-long_option("warn-missing-module-name", warn_missing_module_name).
-long_option("warn-wrong-module-name",   warn_wrong_module_name).
-long_option("warn-smart-recompilation", warn_smart_recompilation).
-long_option("warn-undefined-options-variables",
+long_option_table("warn-simple-code",         warn_simple_code).
+long_option_table("warn-duplicate-calls",     warn_duplicate_calls).
+long_option_table("warn-implicit-stream-calls",   warn_implicit_stream_calls).
+long_option_table("warn-missing-module-name", warn_missing_module_name).
+long_option_table("warn-wrong-module-name",   warn_wrong_module_name).
+long_option_table("warn-smart-recompilation", warn_smart_recompilation).
+long_option_table("warn-undefined-options-variables",
                                          warn_undefined_options_variables).
-long_option("warn-undefined-options-vars",
+long_option_table("warn-undefined-options-vars",
                                          warn_undefined_options_variables).
-long_option("warn-suspicious-recursion", warn_suspicious_recursion).
-long_option("warn-non-tail-recursion-self",
+long_option_table("warn-suspicious-recursion", warn_suspicious_recursion).
+long_option_table("warn-non-tail-recursion-self",
                                          warn_non_tail_recursion_self).
-long_option("warn-non-tail-recursion-mutual",
+long_option_table("warn-non-tail-recursion-mutual",
                                          warn_non_tail_recursion_mutual).
-long_option("warn-non-tail-recursion",  warn_non_tail_recursion).
-long_option("warn-obvious-non-tail-recursion",
+long_option_table("warn-non-tail-recursion",  warn_non_tail_recursion).
+long_option_table("warn-obvious-non-tail-recursion",
                                          warn_obvious_non_tail_recursion).
-long_option("warn-target-code",         warn_target_code).
-long_option("warn-up-to-date",          warn_up_to_date).
-long_option("warn-stubs",               warn_stubs).
-long_option("warn-dead-procs",          warn_dead_procs).
-long_option("warn-dead-procedures",     warn_dead_procs).
-long_option("warn-dead-preds",          warn_dead_preds).
-long_option("warn-dead-predicates",     warn_dead_preds).
-long_option("warn-table-with-inline",   warn_table_with_inline).
-long_option("warn-non-term-special-preds", warn_non_term_special_preds).
-long_option("warn-known-bad-format-calls", warn_known_bad_format_calls).
-long_option("warn-only-one-format-string-error",
+long_option_table("warn-target-code",         warn_target_code).
+long_option_table("warn-up-to-date",          warn_up_to_date).
+long_option_table("warn-stubs",               warn_stubs).
+long_option_table("warn-dead-procs",          warn_dead_procs).
+long_option_table("warn-dead-procedures",     warn_dead_procs).
+long_option_table("warn-dead-preds",          warn_dead_preds).
+long_option_table("warn-dead-predicates",     warn_dead_preds).
+long_option_table("warn-table-with-inline",   warn_table_with_inline).
+long_option_table("warn-non-term-special-preds", warn_non_term_special_preds).
+long_option_table("warn-known-bad-format-calls", warn_known_bad_format_calls).
+long_option_table("warn-only-one-format-string-error",
                      warn_only_one_format_string_error).
-long_option("warn-unknown-format-calls", warn_unknown_format_calls).
-long_option("warn-obsolete",            warn_obsolete).
-long_option("warn-insts-without-matching-type",
-                                        warn_insts_without_matching_type).
-long_option("warn-insts-with-functors-without-type",
+long_option_table("warn-unknown-format-calls", warn_unknown_format_calls).
+long_option_table("warn-obsolete",            warn_obsolete).
+long_option_table("warn-insts-without-matching-type",
+                    warn_insts_without_matching_type).
+long_option_table("warn-insts-with-functors-without-type",
                      warn_insts_with_functors_without_type).
-long_option("warn-unused-imports",      warn_unused_imports).
-long_option("warn-unused-interface-imports",    warn_unused_interface_imports).
-long_option("inform-ite-instead-of-switch", inform_ite_instead_of_switch).
-long_option("inform-incomplete-switch", inform_incomplete_switch).
-long_option("inform-incomplete-switch-threshold",
+long_option_table("warn-unused-imports",      warn_unused_imports).
+long_option_table("warn-unused-interface-imports",
+                    warn_unused_interface_imports).
+long_option_table("inform-ite-instead-of-switch",
+                    inform_ite_instead_of_switch).
+long_option_table("inform-incomplete-switch", inform_incomplete_switch).
+long_option_table("inform-incomplete-switch-threshold",
                      inform_incomplete_switch_threshold).
-long_option("warn-unresolved-polymorphism", warn_unresolved_polymorphism).
-long_option("warn-suspicious-foreign-procs", warn_suspicious_foreign_procs).
-long_option("warn-suspicious-foreign-code", warn_suspicious_foreign_code).
-long_option("warn-state-var-shadowing", warn_state_var_shadowing).
-long_option("warn-unneeded-mode-specific-clause",
+long_option_table("warn-unresolved-polymorphism",
+                    warn_unresolved_polymorphism).
+long_option_table("warn-suspicious-foreign-procs",
+                    warn_suspicious_foreign_procs).
+long_option_table("warn-suspicious-foreign-code",
+                    warn_suspicious_foreign_code).
+long_option_table("warn-state-var-shadowing", warn_state_var_shadowing).
+long_option_table("warn-unneeded-mode-specific-clause",
                                          warn_unneeded_mode_specific_clause).
-long_option("warn-suspected-occurs-failure",
+long_option_table("warn-suspected-occurs-failure",
                                          warn_suspected_occurs_check_failure).
-long_option("warn-suspected-occurs-check-failure",
+long_option_table("warn-suspected-occurs-check-failure",
                                          warn_suspected_occurs_check_failure).
-long_option("warn-potentially-ambiguous-pragma",
+long_option_table("warn-potentially-ambiguous-pragma",
                                          warn_potentially_ambiguous_pragma).
-long_option("warn-potentially-ambiguous-pragmas",
+long_option_table("warn-potentially-ambiguous-pragmas",
                                          warn_potentially_ambiguous_pragma).
-long_option("warn-ambiguous-pragma",    warn_ambiguous_pragma).
-long_option("warn-ambiguous-pragmas",   warn_ambiguous_pragma).
-long_option("warn-stdlib-shadowing",    warn_stdlib_shadowing).
-long_option("inform-inferred",          inform_inferred).
-long_option("inform-inferred-types",    inform_inferred_types).
-long_option("inform-inferred-modes",    inform_inferred_modes).
-long_option("inform-suboptimal-packing",    inform_suboptimal_packing).
-long_option("print-error-spec-id",      print_error_spec_id).
-long_option("inform-ignored-pragma-errors", inform_ignored_pragma_errors).
-long_option("inform-generated-type-spec-pragmas",
+long_option_table("warn-ambiguous-pragma",    warn_ambiguous_pragma).
+long_option_table("warn-ambiguous-pragmas",   warn_ambiguous_pragma).
+long_option_table("warn-stdlib-shadowing",    warn_stdlib_shadowing).
+long_option_table("inform-inferred",          inform_inferred).
+long_option_table("inform-inferred-types",    inform_inferred_types).
+long_option_table("inform-inferred-modes",    inform_inferred_modes).
+long_option_table("inform-suboptimal-packing",    inform_suboptimal_packing).
+long_option_table("print-error-spec-id",      print_error_spec_id).
+long_option_table("inform-ignored-pragma-errors",
+                                        inform_ignored_pragma_errors).
+long_option_table("inform-generated-type-spec-pragmas",
                                          inform_generated_type_spec_pragmas).

  % verbosity options
-long_option("verbose",                  verbose).
-long_option("very-verbose",             very_verbose).
-long_option("verbose-error-messages",   verbose_errors).
-long_option("verbose-recompilation",    verbose_recompilation).
-long_option("find-all-recompilation-reasons",
+long_option_table("verbose",                  verbose).
+long_option_table("very-verbose",             very_verbose).
+long_option_table("verbose-error-messages",   verbose_errors).
+long_option_table("verbose-recompilation",    verbose_recompilation).
+long_option_table("find-all-recompilation-reasons",
                                          find_all_recompilation_reasons).
-long_option("verbose-make",             verbose_make).
-long_option("verbose-commands",         verbose_commands).
-long_option("output-compile-error-lines",   output_compile_error_lines).
-long_option("report-cmd-line-args",     report_cmd_line_args).
-long_option("report-cmd-line-args-in-doterr",
+long_option_table("verbose-make",             verbose_make).
+long_option_table("verbose-commands",         verbose_commands).
+long_option_table("output-compile-error-lines",   output_compile_error_lines).
+long_option_table("report-cmd-line-args",     report_cmd_line_args).
+long_option_table("report-cmd-line-args-in-doterr",
                                          report_cmd_line_args_in_doterr).
-long_option("statistics",               statistics).
-long_option("detailed-statistics",      detailed_statistics).
-long_option("proc-size-statistics",     proc_size_statistics).
-long_option("inst-statistics",          inst_statistics).
-long_option("limit-error-contexts",     limit_error_contexts).
-long_option("debug-types",              debug_types).
-long_option("debug-types-pred-name",    debug_types_pred_name).
-long_option("debug-modes",              debug_modes).
-long_option("debug-modes-statistics",   debug_modes_statistics).
-long_option("debug-modes-minimal",      debug_modes_minimal).
-long_option("debug-modes-verbose",      debug_modes_verbose).
-long_option("debug-modes-pred-id",      debug_modes_pred_id).
-long_option("debug-dep-par-conj",       debug_dep_par_conj).
-long_option("debug-determinism",        debug_det).
-long_option("debug-det",                debug_det).
-long_option("debug-code-gen-pred-id",   debug_code_gen_pred_id).
-long_option("debug-termination",        debug_term).
-long_option("debug-term",               debug_term).
-long_option("debug-dead-proc-elim",     debug_dead_proc_elim).
-long_option("debug-higher-order-specialization",
+long_option_table("statistics",               statistics).
+long_option_table("detailed-statistics",      detailed_statistics).
+long_option_table("proc-size-statistics",     proc_size_statistics).
+long_option_table("inst-statistics",          inst_statistics).
+long_option_table("limit-error-contexts",     limit_error_contexts).
+long_option_table("debug-types",              debug_types).
+long_option_table("debug-types-pred-name",    debug_types_pred_name).
+long_option_table("debug-modes",              debug_modes).
+long_option_table("debug-modes-statistics",   debug_modes_statistics).
+long_option_table("debug-modes-minimal",      debug_modes_minimal).
+long_option_table("debug-modes-verbose",      debug_modes_verbose).
+long_option_table("debug-modes-pred-id",      debug_modes_pred_id).
+long_option_table("debug-dep-par-conj",       debug_dep_par_conj).
+long_option_table("debug-determinism",        debug_det).
+long_option_table("debug-det",                debug_det).
+long_option_table("debug-code-gen-pred-id",   debug_code_gen_pred_id).
+long_option_table("debug-termination",        debug_term).
+long_option_table("debug-term",               debug_term).
+long_option_table("debug-dead-proc-elim",     debug_dead_proc_elim).
+long_option_table("debug-higher-order-specialization",
                                          debug_higher_order_specialization).
-long_option("debug-opt",                debug_opt).
-long_option("debug-opt-pred-id",        debug_opt_pred_id).
-long_option("debug-opt-pred-name",      debug_opt_pred_name).
-long_option("debug-pd",                 debug_pd).
-long_option("debug-liveness",           debug_liveness).
-long_option("debug-stack-opt",          debug_stack_opt).
-long_option("debug-make",               debug_make).
-long_option("debug-closure",            debug_closure).
-long_option("debug-trail-usage",        debug_trail_usage).
-long_option("debug-mode-constraints",   debug_mode_constraints).
-long_option("debug-intermodule-analysis",   debug_intermodule_analysis).
-long_option("debug-mm-tabling-analysis",    debug_mm_tabling_analysis).
-long_option("debug-indirect-reuse",         debug_indirect_reuse).
-long_option("debug-type-rep",               debug_type_rep).
+long_option_table("debug-opt",                debug_opt).
+long_option_table("debug-opt-pred-id",        debug_opt_pred_id).
+long_option_table("debug-opt-pred-name",      debug_opt_pred_name).
+long_option_table("debug-pd",                 debug_pd).
+long_option_table("debug-liveness",           debug_liveness).
+long_option_table("debug-stack-opt",          debug_stack_opt).
+long_option_table("debug-make",               debug_make).
+long_option_table("debug-closure",            debug_closure).
+long_option_table("debug-trail-usage",        debug_trail_usage).
+long_option_table("debug-mode-constraints",   debug_mode_constraints).
+long_option_table("debug-intermodule-analysis",   debug_intermodule_analysis).
+long_option_table("debug-mm-tabling-analysis",    debug_mm_tabling_analysis).
+long_option_table("debug-indirect-reuse",         debug_indirect_reuse).
+long_option_table("debug-type-rep",               debug_type_rep).

  % output options (mutually exclusive)
-long_option("generate-source-file-mapping",
+long_option_table("generate-source-file-mapping",
      only_opmode_generate_source_file_mapping).
-long_option("generate-dependency-file", only_opmode_generate_dependency_file).
-long_option("generate-dependencies",    only_opmode_generate_dependencies).
-long_option("generate-dependencies-ints",
+long_option_table("generate-dependency-file",
+    only_opmode_generate_dependency_file).
+long_option_table("generate-dependencies",  only_opmode_generate_dependencies).
+long_option_table("generate-dependencies-ints",
                                      only_opmode_generate_dependencies_ints).
-long_option("generate-module-order",    generate_module_order).
-long_option("generate-standalone-interface", generate_standalone_interface).
-long_option("make-short-interface",     only_opmode_make_short_interface).
-long_option("make-short-int",           only_opmode_make_short_interface).
-long_option("make-interface",           only_opmode_make_interface).
-long_option("make-int",                 only_opmode_make_interface).
-long_option("make-private-interface",   only_opmode_make_private_interface).
-long_option("make-priv-int",            only_opmode_make_private_interface).
-long_option("make-optimization-interface",
+long_option_table("generate-module-order",    generate_module_order).
+long_option_table("generate-standalone-interface",
+    generate_standalone_interface).
+long_option_table("make-short-interface",   only_opmode_make_short_interface).
+long_option_table("make-short-int",         only_opmode_make_short_interface).
+long_option_table("make-interface",         only_opmode_make_interface).
+long_option_table("make-int",               only_opmode_make_interface).
+long_option_table("make-private-interface",
+    only_opmode_make_private_interface).
+long_option_table("make-priv-int",
+    only_opmode_make_private_interface).
+long_option_table("make-optimization-interface",
      only_opmode_make_optimization_interface).
-long_option("make-optimisation-interface",
+long_option_table("make-optimisation-interface",
      only_opmode_make_optimization_interface).
-long_option("make-opt-int",
+long_option_table("make-opt-int",
      only_opmode_make_optimization_interface).
-long_option("make-transitive-optimization-interface",
+long_option_table("make-transitive-optimization-interface",
      only_opmode_make_transitive_opt_interface).
-long_option("make-transitive-optimisation-interface",
+long_option_table("make-transitive-optimisation-interface",
      only_opmode_make_transitive_opt_interface).
-long_option("make-trans-opt",
+long_option_table("make-trans-opt",
      only_opmode_make_transitive_opt_interface).
-long_option("make-analysis-registry",   only_opmode_make_analysis_registry).
-long_option("make-xml-doc",             only_opmode_make_xml_documentation).
-long_option("make-xml-documentation",   only_opmode_make_xml_documentation).
-long_option("convert-to-mercury",       only_opmode_convert_to_mercury).
-long_option("convert-to-Mercury",       only_opmode_convert_to_mercury).
-long_option("pretty-print",             only_opmode_convert_to_mercury).
-long_option("typecheck-only",           only_opmode_typecheck_only).
-long_option("errorcheck-only",          only_opmode_errorcheck_only).
-long_option("target-code-only",         only_opmode_target_code_only).
-long_option("compile-only",             only_opmode_compile_only).
-long_option("compile-to-shared-lib",    compile_to_shared_lib).
-long_option("output-grade-string",      only_opmode_output_grade_string).
-long_option("output-link-command",      only_opmode_output_link_command).
-long_option("output-shared-lib-link-command",
+long_option_table("make-analysis-registry",
+    only_opmode_make_analysis_registry).
+long_option_table("make-xml-doc",
+    only_opmode_make_xml_documentation).
+long_option_table("make-xml-documentation",
+    only_opmode_make_xml_documentation).
+long_option_table("convert-to-mercury",       only_opmode_convert_to_mercury).
+long_option_table("convert-to-Mercury",       only_opmode_convert_to_mercury).
+long_option_table("pretty-print",             only_opmode_convert_to_mercury).
+long_option_table("typecheck-only",           only_opmode_typecheck_only).
+long_option_table("errorcheck-only",          only_opmode_errorcheck_only).
+long_option_table("target-code-only",         only_opmode_target_code_only).
+long_option_table("compile-only",             only_opmode_compile_only).
+long_option_table("compile-to-shared-lib",    compile_to_shared_lib).
+long_option_table("output-grade-string",      only_opmode_output_grade_string).
+long_option_table("output-link-command",      only_opmode_output_link_command).
+long_option_table("output-shared-lib-link-command",
      only_opmode_output_shared_lib_link_command).
-long_option("output-stdlib-grades",     only_opmode_output_stdlib_grades).
-long_option("output-libgrades",         only_opmode_output_libgrades).
-long_option("output-cc",                only_opmode_output_cc).
-long_option("output-cc-type",           only_opmode_output_c_compiler_type).
-long_option("output-c-compiler-type",   only_opmode_output_c_compiler_type).
-long_option("output-csharp-compiler",   only_opmode_output_csharp_compiler).
-long_option("output-csharp-compiler-type",
+long_option_table("output-stdlib-grades",
+    only_opmode_output_stdlib_grades).
+long_option_table("output-libgrades",         only_opmode_output_libgrades).
+long_option_table("output-cc",                only_opmode_output_cc).
+long_option_table("output-cc-type",
+    only_opmode_output_c_compiler_type).
+long_option_table("output-c-compiler-type",
+    only_opmode_output_c_compiler_type).
+long_option_table("output-csharp-compiler",
+    only_opmode_output_csharp_compiler).
+long_option_table("output-csharp-compiler-type",
      only_opmode_output_csharp_compiler_type).
-long_option("output-cflags",            only_opmode_output_cflags).
-long_option("output-library-link-flags",
+long_option_table("output-cflags",            only_opmode_output_cflags).
+long_option_table("output-library-link-flags",
      only_opmode_output_library_link_flags).
-long_option("output-grade-defines",     only_opmode_output_grade_defines).
-long_option("output-c-include-directory-flags",
+long_option_table("output-grade-defines",
+    only_opmode_output_grade_defines).
+long_option_table("output-c-include-directory-flags",
      only_opmode_output_c_include_directory_flags).
-long_option("output-c-include-dir-flags",
+long_option_table("output-c-include-dir-flags",
      only_opmode_output_c_include_directory_flags).
-long_option("output-target-arch",       only_opmode_output_target_arch).
-long_option("output-class-directory",   only_opmode_output_java_class_dir).
-long_option("output-class-dir",         only_opmode_output_java_class_dir).
-long_option("output-java-class-directory",  only_opmode_output_java_class_dir).
-long_option("output-java-class-dir",        only_opmode_output_java_class_dir).
-long_option("output-stdlib-modules",    only_opmode_output_stdlib_modules).
+long_option_table("output-target-arch",       only_opmode_output_target_arch).
+long_option_table("output-class-directory",   only_opmode_output_java_class_dir).
+long_option_table("output-class-dir",         only_opmode_output_java_class_dir).
+long_option_table("output-java-class-directory",
+    only_opmode_output_java_class_dir).
+long_option_table("output-java-class-dir",    only_opmode_output_java_class_dir).
+long_option_table("output-stdlib-modules",    only_opmode_output_stdlib_modules).

  % aux output options
-long_option("smart-recompilation",      smart_recompilation).
-long_option("generate-mmc-make-module-dependencies",
+long_option_table("smart-recompilation",      smart_recompilation).
+long_option_table("generate-mmc-make-module-dependencies",
+                                        generate_mmc_make_module_dependencies).
+long_option_table("generate-mmc-deps",
                                          generate_mmc_make_module_dependencies).
-long_option("generate-mmc-deps",        generate_mmc_make_module_dependencies).
-long_option("ssdb-trace",               ssdb_trace_level).
-long_option("link-ssdb-libs",           link_ssdb_libs).
-long_option("link-ssdebug-libs",        link_ssdb_libs).
-long_option("trace",                    trace_level).
-long_option("trace-optimised",          trace_optimized).
-long_option("trace-optimized",          trace_optimized).
-long_option("trace-prof",               trace_prof).
-long_option("trace-table-io",           trace_table_io).
-long_option("trace-table-io-only-retry",    trace_table_io_only_retry).
-long_option("trace-table-io-states",    trace_table_io_states).
-long_option("trace-table-io-require",   trace_table_io_require).
-long_option("trace-table-io-all",       trace_table_io_all).
-long_option("trace-flag",               trace_goal_flags).
-long_option("profile-optimised",        prof_optimized).
-long_option("profile-optimized",        prof_optimized).
-long_option("exec-trace-tail-rec",      exec_trace_tail_rec).
-long_option("suppress-trace",           suppress_trace).
-long_option("force-disable-tracing",    force_disable_tracing).
-long_option("delay-death",              delay_death).
-long_option("delay-death-max-vars",     delay_death_max_vars).
-long_option("stack-trace-higher-order", stack_trace_higher_order).
-long_option("force-disable-ssdebug",    force_disable_ssdebug).
-long_option("generate-bytecode",        generate_bytecode).
-long_option("line-numbers",             line_numbers).
-long_option("line-numbers-around-foreign-code",
+long_option_table("ssdb-trace",               ssdb_trace_level).
+long_option_table("link-ssdb-libs",           link_ssdb_libs).
+long_option_table("link-ssdebug-libs",        link_ssdb_libs).
+long_option_table("trace",                    trace_level).
+long_option_table("trace-optimised",          trace_optimized).
+long_option_table("trace-optimized",          trace_optimized).
+long_option_table("trace-prof",               trace_prof).
+long_option_table("trace-table-io",           trace_table_io).
+long_option_table("trace-table-io-only-retry",    trace_table_io_only_retry).
+long_option_table("trace-table-io-states",    trace_table_io_states).
+long_option_table("trace-table-io-require",   trace_table_io_require).
+long_option_table("trace-table-io-all",       trace_table_io_all).
+long_option_table("trace-flag",               trace_goal_flags).
+long_option_table("profile-optimised",        prof_optimized).
+long_option_table("profile-optimized",        prof_optimized).
+long_option_table("exec-trace-tail-rec",      exec_trace_tail_rec).
+long_option_table("suppress-trace",           suppress_trace).
+long_option_table("force-disable-tracing",    force_disable_tracing).
+long_option_table("delay-death",              delay_death).
+long_option_table("delay-death-max-vars",     delay_death_max_vars).
+long_option_table("stack-trace-higher-order", stack_trace_higher_order).
+long_option_table("force-disable-ssdebug",    force_disable_ssdebug).
+long_option_table("generate-bytecode",        generate_bytecode).
+long_option_table("line-numbers",             line_numbers).
+long_option_table("line-numbers-around-foreign-code",
                                          line_numbers_around_foreign_code).
-long_option("line-numbers-for-c-headers", line_numbers_for_c_headers).
-long_option("type-repns-for-humans",    type_repns_for_humans).
-long_option("auto-comments",            auto_comments).
-long_option("frameopt-comments",        frameopt_comments).
-long_option("max-error-line-width",     max_error_line_width).
-long_option("reverse-error-order",      reverse_error_order).
-long_option("show-definitions",         show_definitions).
-long_option("show-definition-line-counts",  show_definition_line_counts).
-long_option("show-definition-extents",  show_definition_extents).
-long_option("show-local-call-tree",     show_local_call_tree).
-long_option("show-all-type-repns",              show_all_type_repns).
-long_option("show-all-type-representations",    show_all_type_repns).
-long_option("show-local-type-repns",            show_local_type_repns).
-long_option("show-local-type-representations",  show_local_type_repns).
-long_option("show-developer-type-repns",            show_developer_type_repns).
-long_option("show-developer-type-representations",  show_developer_type_repns).
-long_option("show-dependency-graph",    show_dependency_graph).
-long_option("show-pred-movability",     show_pred_movability).
-long_option("imports-graph",            imports_graph).
-long_option("trans-opt-deps-spec",      trans_opt_deps_spec).
-long_option("dump-trace-counts",        dump_trace_counts).
-long_option("dump-hlds",                dump_hlds).
-long_option("hlds-dump",                dump_hlds).
-long_option("dump-hlds-pred-id",        dump_hlds_pred_id).
-long_option("dump-hlds-pred-name",      dump_hlds_pred_name).
-long_option("dump-hlds-pred-name-order", dump_hlds_pred_name_order).
-long_option("dump-hlds-alias",          dump_hlds_alias).
-long_option("dump-hlds-spec-preds",     dump_hlds_spec_preds).
-long_option("dump-hlds-spec-preds-for", dump_hlds_spec_preds_for).
-long_option("dump-hlds-options",        dump_hlds_options).
-long_option("dump-hlds-inst-limit",     dump_hlds_inst_limit).
-long_option("dump-hlds-inst-size-limit", dump_hlds_inst_size_limit).
-long_option("dump-hlds-file-suffix",    dump_hlds_file_suffix).
-long_option("dump-same-hlds",           dump_same_hlds).
-long_option("dump-mlds",                dump_mlds).
-long_option("dump-mlds-pred-name",      dump_mlds_pred_name).
-long_option("mlds-dump",                dump_mlds).
-long_option("verbose-dump-mlds",        verbose_dump_mlds).
-long_option("verbose-mlds-dump",        verbose_dump_mlds).
-long_option("dump-options-file",        dump_options_file).
-long_option("mode-constraints",         mode_constraints).
-long_option("simple-mode-constraints",  simple_mode_constraints).
-long_option("prop-mode-constraints",    prop_mode_constraints).
-long_option("compute-goal-modes",       compute_goal_modes).
-long_option("propagate-mode-constraints",   prop_mode_constraints).
-long_option("benchmark-modes",          benchmark_modes).
-long_option("benchmark-modes-repeat",   benchmark_modes_repeat).
-long_option("unneeded-code-debug",      unneeded_code_debug).
-long_option("unneeded-code-debug-pred-name",  unneeded_code_debug_pred_name).
-long_option("common-struct-preds",      common_struct_preds).
+long_option_table("line-numbers-for-c-headers", line_numbers_for_c_headers).
+long_option_table("type-repns-for-humans",    type_repns_for_humans).
+long_option_table("auto-comments",            auto_comments).
+long_option_table("frameopt-comments",        frameopt_comments).
+long_option_table("max-error-line-width",     max_error_line_width).
+long_option_table("reverse-error-order",      reverse_error_order).
+long_option_table("show-definitions",         show_definitions).
+long_option_table("show-definition-line-counts",  show_definition_line_counts).
+long_option_table("show-definition-extents",  show_definition_extents).
+long_option_table("show-local-call-tree",     show_local_call_tree).
+long_option_table("show-all-type-repns",              show_all_type_repns).
+long_option_table("show-all-type-representations",    show_all_type_repns).
+long_option_table("show-local-type-repns",            show_local_type_repns).
+long_option_table("show-local-type-representations",  show_local_type_repns).
+long_option_table("show-developer-type-repns",
+        show_developer_type_repns).
+long_option_table("show-developer-type-representations",
+        show_developer_type_repns).
+long_option_table("show-dependency-graph",    show_dependency_graph).
+long_option_table("show-pred-movability",     show_pred_movability).
+long_option_table("imports-graph",            imports_graph).
+long_option_table("trans-opt-deps-spec",      trans_opt_deps_spec).
+long_option_table("dump-trace-counts",        dump_trace_counts).
+long_option_table("dump-hlds",                dump_hlds).
+long_option_table("hlds-dump",                dump_hlds).
+long_option_table("dump-hlds-pred-id",        dump_hlds_pred_id).
+long_option_table("dump-hlds-pred-name",      dump_hlds_pred_name).
+long_option_table("dump-hlds-pred-name-order", dump_hlds_pred_name_order).
+long_option_table("dump-hlds-alias",          dump_hlds_alias).
+long_option_table("dump-hlds-spec-preds",     dump_hlds_spec_preds).
+long_option_table("dump-hlds-spec-preds-for", dump_hlds_spec_preds_for).
+long_option_table("dump-hlds-options",        dump_hlds_options).
+long_option_table("dump-hlds-inst-limit",     dump_hlds_inst_limit).
+long_option_table("dump-hlds-inst-size-limit", dump_hlds_inst_size_limit).
+long_option_table("dump-hlds-file-suffix",    dump_hlds_file_suffix).
+long_option_table("dump-same-hlds",           dump_same_hlds).
+long_option_table("dump-mlds",                dump_mlds).
+long_option_table("dump-mlds-pred-name",      dump_mlds_pred_name).
+long_option_table("mlds-dump",                dump_mlds).
+long_option_table("verbose-dump-mlds",        verbose_dump_mlds).
+long_option_table("verbose-mlds-dump",        verbose_dump_mlds).
+long_option_table("dump-options-file",        dump_options_file).
+long_option_table("mode-constraints",         mode_constraints).
+long_option_table("simple-mode-constraints",  simple_mode_constraints).
+long_option_table("prop-mode-constraints",    prop_mode_constraints).
+long_option_table("compute-goal-modes",       compute_goal_modes).
+long_option_table("propagate-mode-constraints",   prop_mode_constraints).
+long_option_table("benchmark-modes",          benchmark_modes).
+long_option_table("benchmark-modes-repeat",   benchmark_modes_repeat).
+long_option_table("unneeded-code-debug",      unneeded_code_debug).
+long_option_table("unneeded-code-debug-pred-name",
+    unneeded_code_debug_pred_name).
+long_option_table("common-struct-preds",      common_struct_preds).

  % language semantics options
-long_option("reorder-conj",         reorder_conj).
-long_option("reorder-disj",         reorder_disj).
-long_option("fully-strict",         fully_strict).
-long_option("strict-sequential",    strict_sequential).
-long_option("allow-stubs",          allow_stubs).
-long_option("infer-all",            infer_all).
-long_option("infer-types",          infer_types).
-long_option("infer-modes",          infer_modes).
-long_option("infer-determinism",    infer_det).
-long_option("infer-det",            infer_det).
-long_option("type-inference-iteration-limit", type_inference_iteration_limit).
-long_option("mode-inference-iteration-limit", mode_inference_iteration_limit).
-long_option("event-set-file-name",  event_set_file_name).
+long_option_table("reorder-conj",         reorder_conj).
+long_option_table("reorder-disj",         reorder_disj).
+long_option_table("fully-strict",         fully_strict).
+long_option_table("strict-sequential",    strict_sequential).
+long_option_table("allow-stubs",          allow_stubs).
+long_option_table("infer-all",            infer_all).
+long_option_table("infer-types",          infer_types).
+long_option_table("infer-modes",          infer_modes).
+long_option_table("infer-determinism",    infer_det).
+long_option_table("infer-det",            infer_det).
+long_option_table("type-inference-iteration-limit",
+    type_inference_iteration_limit).
+long_option_table("mode-inference-iteration-limit",
+    mode_inference_iteration_limit).
+long_option_table("event-set-file-name",  event_set_file_name).

  % compilation model options
-long_option("grade",                grade).
+long_option_table("grade",                grade).
  % target selection options
-long_option("target",               target).
-long_option("compile-to-c",         compile_to_c).
-long_option("compile-to-C",         compile_to_c).
-long_option("java",                 java).
-long_option("Java",                 java).
-long_option("java-only",            java_only).
-long_option("Java-only",            java_only).
-long_option("csharp",               csharp).
-long_option("C#",                   csharp).
-long_option("csharp-only",          csharp_only).
-long_option("C#-only",              csharp_only).
+long_option_table("target",               target).
+long_option_table("compile-to-c",         compile_to_c).
+long_option_table("compile-to-C",         compile_to_c).
+long_option_table("java",                 java).
+long_option_table("Java",                 java).
+long_option_table("java-only",            java_only).
+long_option_table("Java-only",            java_only).
+long_option_table("csharp",               csharp).
+long_option_table("C#",                   csharp).
+long_option_table("csharp-only",          csharp_only).
+long_option_table("C#-only",              csharp_only).
  % Optional features compilation model options:
  % (a) debugging
-long_option("debug",                exec_trace).
-long_option("decl-debug",           decl_debug).
-long_option("ssdb",                 source_to_source_debug).
-long_option("ss-debug",             source_to_source_debug).
-long_option("source-to-source-debug", source_to_source_debug).
+long_option_table("debug",                exec_trace).
+long_option_table("decl-debug",           decl_debug).
+long_option_table("ssdb",                 source_to_source_debug).
+long_option_table("ss-debug",             source_to_source_debug).
+long_option_table("source-to-source-debug", source_to_source_debug).
  % (b) profiling
-long_option("profiling",            profiling).
-long_option("time-profiling",       time_profiling).
-long_option("memory-profiling",     memory_profiling).
-long_option("deep-profiling",       deep_profiling).
-long_option("profile-calls",        profile_calls).
-long_option("profile-time",         profile_time).
-long_option("profile-memory",       profile_memory).
-long_option("profile-deep",         profile_deep).
-long_option("use-activation-counts",    use_activation_counts).
-long_option("pre-prof-transforms-simplify", pre_prof_transforms_simplify).
-long_option("pre-implicit-parallelism-simplify",
+long_option_table("profiling",            profiling).
+long_option_table("time-profiling",       time_profiling).
+long_option_table("memory-profiling",     memory_profiling).
+long_option_table("deep-profiling",       deep_profiling).
+long_option_table("profile-calls",        profile_calls).
+long_option_table("profile-time",         profile_time).
+long_option_table("profile-memory",       profile_memory).
+long_option_table("profile-deep",         profile_deep).
+long_option_table("use-activation-counts",    use_activation_counts).
+long_option_table("pre-prof-transforms-simplify",
+    pre_prof_transforms_simplify).
+long_option_table("pre-implicit-parallelism-simplify",
      pre_implicit_parallelism_simplify).
-long_option("coverage-profiling",   coverage_profiling).
-long_option("coverage-profiling-via-calls",
+long_option_table("coverage-profiling",   coverage_profiling).
+long_option_table("coverage-profiling-via-calls",
      coverage_profiling_via_calls).
-long_option("coverage-profiling-static",
+long_option_table("coverage-profiling-static",
      coverage_profiling_static).
-long_option("profile-deep-coverage-after-goal",
+long_option_table("profile-deep-coverage-after-goal",
      profile_deep_coverage_after_goal).
-long_option("profile-deep-coverage-branch-ite",
+long_option_table("profile-deep-coverage-branch-ite",
      profile_deep_coverage_branch_ite).
-long_option("profile-deep-coverage-branch-switch",
+long_option_table("profile-deep-coverage-branch-switch",
      profile_deep_coverage_branch_switch).
-long_option("profile-deep-coverage-branch-disj",
+long_option_table("profile-deep-coverage-branch-disj",
      profile_deep_coverage_branch_disj).
-long_option("profile-deep-coverage-use-portcounts",
+long_option_table("profile-deep-coverage-use-portcounts",
      profile_deep_coverage_use_portcounts).
-long_option("profile-deep-coverage-use-trivial",
+long_option_table("profile-deep-coverage-use-trivial",
      profile_deep_coverage_use_trivial).
-long_option("profile-for-implicit-parallelism",
+long_option_table("profile-for-implicit-parallelism",
      profile_for_feedback).
-long_option("profile-for-feedback",
+long_option_table("profile-for-feedback",
      profile_for_feedback).
-long_option("use-zeroing-for-ho-cycles",
+long_option_table("use-zeroing-for-ho-cycles",
      use_zeroing_for_ho_cycles).
-long_option("use-lots-of-ho-specialization",
+long_option_table("use-lots-of-ho-specialization",
      use_lots_of_ho_specialization).
-long_option("deep-profile-tail-recursion",
+long_option_table("deep-profile-tail-recursion",
      deep_profile_tail_recursion).
-long_option("record-term-sizes-as-words", record_term_sizes_as_words).
-long_option("record-term-sizes-as-cells", record_term_sizes_as_cells).
-long_option("experimental-complexity",  experimental_complexity).
+long_option_table("record-term-sizes-as-words", record_term_sizes_as_words).
+long_option_table("record-term-sizes-as-cells", record_term_sizes_as_cells).
+long_option_table("experimental-complexity",  experimental_complexity).
  % (c) miscellaneous optional features
-long_option("gc",                   gc).
-long_option("garbage-collection",   gc).
-long_option("parallel",             parallel).
-long_option("use-trail",            use_trail).
-long_option("type-layout",          type_layout).
-long_option("maybe-thread-safe",    maybe_thread_safe_opt).
-long_option("extend-stacks-when-needed",    extend_stacks_when_needed).
-long_option("stack-segments",       stack_segments).
-long_option("use-regions",          use_regions).
-long_option("use-alloc-regions",    use_alloc_regions).
-long_option("use-regions-debug",    use_regions_debug).
-long_option("use-regions-profiling",use_regions_profiling).
+long_option_table("gc",                   gc).
+long_option_table("garbage-collection",   gc).
+long_option_table("parallel",             parallel).
+long_option_table("use-trail",            use_trail).
+long_option_table("type-layout",          type_layout).
+long_option_table("maybe-thread-safe",    maybe_thread_safe_opt).
+long_option_table("extend-stacks-when-needed",    extend_stacks_when_needed).
+long_option_table("stack-segments",       stack_segments).
+long_option_table("use-regions",          use_regions).
+long_option_table("use-alloc-regions",    use_alloc_regions).
+long_option_table("use-regions-debug",    use_regions_debug).
+long_option_table("use-regions-profiling",use_regions_profiling).
  % Data representation options
-long_option("use-minimal-model-stack-copy", use_minimal_model_stack_copy).
-long_option("use-minimal-model-own-stacks", use_minimal_model_own_stacks).
-long_option("minimal-model-debug",  minimal_model_debug).
-long_option("pregenerated-dist",    pregenerated_dist).
-long_option("single-prec-float",    single_prec_float).
-long_option("single-precision-float",   single_prec_float).
-long_option("num-tag-bits",         num_ptag_bits). % for historical reasons
-long_option("num-ptag-bits",        num_ptag_bits).
-long_option("bits-per-word",        bits_per_word).
-long_option("bytes-per-word",       bytes_per_word).
-long_option("conf-low-tag-bits",    conf_low_ptag_bits). % for historical ...
-long_option("conf-low-ptag-bits",   conf_low_ptag_bits).
-long_option("unboxed-float",        unboxed_float).
-long_option("unboxed-int64s",       unboxed_int64s).
-long_option("unboxed-no-tag-types", unboxed_no_tag_types).
-long_option("arg-pack-bits",        arg_pack_bits).
-long_option("pack-everything",      pack_everything).
-long_option("allow-direct-args",    allow_direct_args).
-long_option("allow-double-word-fields", allow_double_word_fields).
-long_option("allow-double-word-ints", allow_double_word_ints).
-long_option("allow-packing-dummies", allow_packing_dummies).
-long_option("allow-packing-ints",   allow_packing_ints).
-long_option("allow-packing-chars",  allow_packing_chars).
-long_option("allow-packing-local-sectags",  allow_packing_local_sectags).
-long_option("allow-packing-remote-sectags", allow_packing_remote_sectags).
-long_option("allow-packing-mini-types",     allow_packing_mini_types).
-long_option("allow-packed-unify-compare",   allow_packed_unify_compare).
-long_option("sync-term-size",       sync_term_size).
+long_option_table("use-minimal-model-stack-copy",
+        use_minimal_model_stack_copy).
+long_option_table("use-minimal-model-own-stacks",
+        use_minimal_model_own_stacks).
+long_option_table("minimal-model-debug",  minimal_model_debug).
+long_option_table("pregenerated-dist",    pregenerated_dist).
+long_option_table("single-prec-float",    single_prec_float).
+long_option_table("single-precision-float",   single_prec_float).
+long_option_table("num-tag-bits",         num_ptag_bits). % for historical reasons
+long_option_table("num-ptag-bits",        num_ptag_bits).
+long_option_table("bits-per-word",        bits_per_word).
+long_option_table("bytes-per-word",       bytes_per_word).
+long_option_table("conf-low-tag-bits",    conf_low_ptag_bits). % for historical ...
+long_option_table("conf-low-ptag-bits",   conf_low_ptag_bits).
+long_option_table("unboxed-float",        unboxed_float).
+long_option_table("unboxed-int64s",       unboxed_int64s).
+long_option_table("unboxed-no-tag-types", unboxed_no_tag_types).
+long_option_table("arg-pack-bits",        arg_pack_bits).
+long_option_table("pack-everything",      pack_everything).
+long_option_table("allow-direct-args",    allow_direct_args).
+long_option_table("allow-double-word-fields", allow_double_word_fields).
+long_option_table("allow-double-word-ints", allow_double_word_ints).
+long_option_table("allow-packing-dummies", allow_packing_dummies).
+long_option_table("allow-packing-ints",   allow_packing_ints).
+long_option_table("allow-packing-chars",  allow_packing_chars).
+long_option_table("allow-packing-local-sectags",  allow_packing_local_sectags).
+long_option_table("allow-packing-remote-sectags",
+        allow_packing_remote_sectags).
+long_option_table("allow-packing-mini-types",     allow_packing_mini_types).
+long_option_table("allow-packed-unify-compare",   allow_packed_unify_compare).
+long_option_table("sync-term-size",       sync_term_size).
  % LLDS back-end compilation model options
-long_option("gcc-non-local-gotos",  gcc_non_local_gotos).
-long_option("gcc-global-registers", gcc_global_registers).
-long_option("asm-labels",           asm_labels).
-long_option("use-float-registers",  use_float_registers).
+long_option_table("gcc-non-local-gotos",  gcc_non_local_gotos).
+long_option_table("gcc-global-registers", gcc_global_registers).
+long_option_table("asm-labels",           asm_labels).
+long_option_table("use-float-registers",  use_float_registers).
  % MLDS back-end compilation model options
-long_option("highlevel-code",       highlevel_code).
-long_option("high-level-code",      highlevel_code).
-long_option("highlevel-C",          highlevel_code).
-long_option("highlevel-c",          highlevel_code).
-long_option("high-level-C",         highlevel_code).
-long_option("high-level-c",         highlevel_code).
-long_option("c-debug-grade",        c_debug_grade).
-long_option("det-copy-out",         det_copy_out).
-long_option("nondet-copy-out",      nondet_copy_out).
-long_option("put-commit-in-own-func",   put_commit_in_own_func).
+long_option_table("highlevel-code",       highlevel_code).
+long_option_table("high-level-code",      highlevel_code).
+long_option_table("highlevel-C",          highlevel_code).
+long_option_table("highlevel-c",          highlevel_code).
+long_option_table("high-level-C",         highlevel_code).
+long_option_table("high-level-c",         highlevel_code).
+long_option_table("c-debug-grade",        c_debug_grade).
+long_option_table("det-copy-out",         det_copy_out).
+long_option_table("nondet-copy-out",      nondet_copy_out).
+long_option_table("put-commit-in-own-func",   put_commit_in_own_func).

  % internal use options
-long_option("backend-foreign-languages", backend_foreign_languages).
-long_option("agc-stack-layout",     agc_stack_layout).
-long_option("basic-stack-layout",   basic_stack_layout).
-long_option("procid-stack-layout",  procid_stack_layout).
-long_option("trace-stack-layout",   trace_stack_layout).
-long_option("body-typeinfo-liveness",   body_typeinfo_liveness).
-long_option("can-compare-constants-as-ints",  can_compare_constants_as_ints).
-long_option("pretest-equality-cast-pointers", pretest_equality_cast_pointers).
-long_option("delay-partial-instantiations",   delay_partial_instantiations).
-long_option("allow-defn-of-builtins",         allow_defn_of_builtins).
-long_option("type-ctor-info",       type_ctor_info).
-long_option("type-ctor-layout",     type_ctor_layout).
-long_option("type-ctor-functors",   type_ctor_functors).
-long_option("new-type-class-rtti",  new_type_class_rtti).
-long_option("rtti-line-numbers",    rtti_line_numbers).
-long_option("disable-mm-pneg",      disable_minimal_model_stack_copy_pneg).
-long_option("disable-mm-cut",       disable_minimal_model_stack_copy_cut).
-long_option("disable-trail-ops",    disable_trail_ops).
-long_option("size-region-ite-fixed",            size_region_ite_fixed).
-long_option("size-region-disj-fixed",           size_region_disj_fixed).
-long_option("size-region-commit-fixed",         size_region_commit_fixed).
-long_option("size-region-ite-protect",          size_region_ite_protect).
-long_option("size-region-ite-snapshot",         size_region_ite_snapshot).
-long_option("size-region-semi-disj-protect",    size_region_semi_disj_protect).
-long_option("size-region-disj-snapshot",        size_region_disj_snapshot).
-long_option("size-region-commit-entry",         size_region_commit_entry).
-long_option("allow-multi-arm-switches", allow_multi_arm_switches).
-long_option("type-check-constraints",   type_check_constraints).
+long_option_table("backend-foreign-languages", backend_foreign_languages).
+long_option_table("agc-stack-layout",     agc_stack_layout).
+long_option_table("basic-stack-layout",   basic_stack_layout).
+long_option_table("procid-stack-layout",  procid_stack_layout).
+long_option_table("trace-stack-layout",   trace_stack_layout).
+long_option_table("body-typeinfo-liveness",   body_typeinfo_liveness).
+long_option_table("can-compare-constants-as-ints",
+        can_compare_constants_as_ints).
+long_option_table("pretest-equality-cast-pointers",
+        pretest_equality_cast_pointers).
+long_option_table("delay-partial-instantiations",
+        delay_partial_instantiations).
+long_option_table("allow-defn-of-builtins",
+        allow_defn_of_builtins).
+long_option_table("type-ctor-info",       type_ctor_info).
+long_option_table("type-ctor-layout",     type_ctor_layout).
+long_option_table("type-ctor-functors",   type_ctor_functors).
+long_option_table("new-type-class-rtti",  new_type_class_rtti).
+long_option_table("rtti-line-numbers",    rtti_line_numbers).
+long_option_table("disable-mm-pneg",   disable_minimal_model_stack_copy_pneg).
+long_option_table("disable-mm-cut",    disable_minimal_model_stack_copy_cut).
+long_option_table("disable-trail-ops", disable_trail_ops).
+long_option_table("size-region-ite-fixed",        size_region_ite_fixed).
+long_option_table("size-region-disj-fixed",       size_region_disj_fixed).
+long_option_table("size-region-commit-fixed",     size_region_commit_fixed).
+long_option_table("size-region-ite-protect",      size_region_ite_protect).
+long_option_table("size-region-ite-snapshot",     size_region_ite_snapshot).
+long_option_table("size-region-semi-disj-protect",
+        size_region_semi_disj_protect).
+long_option_table("size-region-disj-snapshot",
+        size_region_disj_snapshot).
+long_option_table("size-region-commit-entry",
+        size_region_commit_entry).
+long_option_table("allow-multi-arm-switches", allow_multi_arm_switches).
+long_option_table("type-check-constraints",   type_check_constraints).

  % code generation options
-long_option("table-debug",          table_debug).
-long_option("trad-passes",          trad_passes).
-long_option("parallel-liveness",    parallel_liveness).
-long_option("parallel-code-gen",    parallel_code_gen).
-long_option("reclaim-heap-on-failure",  reclaim_heap_on_failure).
-long_option("reclaim-heap-on-semidet-failure",
+long_option_table("table-debug",          table_debug).
+long_option_table("trad-passes",          trad_passes).
+long_option_table("parallel-liveness",    parallel_liveness).
+long_option_table("parallel-code-gen",    parallel_code_gen).
+long_option_table("reclaim-heap-on-failure",  reclaim_heap_on_failure).
+long_option_table("reclaim-heap-on-semidet-failure",
                                      reclaim_heap_on_semidet_failure).
-long_option("reclaim-heap-on-nondet-failure",
+long_option_table("reclaim-heap-on-nondet-failure",
                                      reclaim_heap_on_nondet_failure).
-long_option("branch-delay-slot",    have_delay_slot).
-long_option("have-delay-slot",      have_delay_slot).
-long_option("num-real-r-regs",      num_real_r_regs).
-long_option("num-real-f-regs",      num_real_f_regs).
-long_option("num-real-r-temps",     num_real_r_temps).
-long_option("num-real-f-temps",     num_real_f_temps).
-long_option("num-real-temps",       num_real_r_temps).  % obsolete
-long_option("max-jump-table-size",  max_jump_table_size).
-% long_option("max-spec-do-call-closure",
+long_option_table("branch-delay-slot",    have_delay_slot).
+long_option_table("have-delay-slot",      have_delay_slot).
+long_option_table("num-real-r-regs",      num_real_r_regs).
+long_option_table("num-real-f-regs",      num_real_f_regs).
+long_option_table("num-real-r-temps",     num_real_r_temps).
+long_option_table("num-real-f-temps",     num_real_f_temps).
+long_option_table("num-real-temps",       num_real_r_temps).  % obsolete
+long_option_table("max-jump-table-size",  max_jump_table_size).
+% long_option_table("max-spec-do-call-closure",
  %                   max_specialized_do_call_closure).
-% long_option("max-spec-do-call-class-method",
+% long_option_table("max-spec-do-call-class-method",
  %                   max_specialized_do_call_class_method).
-long_option("compare-specialization",   compare_specialization).
-long_option("should-pretest-equality",  should_pretest_equality).
-long_option("fact-table-max-array-size",fact_table_max_array_size).
-long_option("fact-table-hash-percent-full",
+long_option_table("compare-specialization",   compare_specialization).
+long_option_table("should-pretest-equality",  should_pretest_equality).
+long_option_table("fact-table-max-array-size",fact_table_max_array_size).
+long_option_table("fact-table-hash-percent-full",
                      fact_table_hash_percent_full).
-long_option("prefer-switch",        prefer_switch).
-long_option("prefer-while-loop-over-jump-self",
+long_option_table("prefer-switch",        prefer_switch).
+long_option_table("prefer-while-loop-over-jump-self",
                                      prefer_while_loop_over_jump_self).
-long_option("prefer-while-loop-over-jump-mutual",
+long_option_table("prefer-while-loop-over-jump-mutual",
                                      prefer_while_loop_over_jump_mutual).
-long_option("opt-no-return-calls",  opt_no_return_calls).
-long_option("debug-class-init",     debug_class_init).
+long_option_table("opt-no-return-calls",  opt_no_return_calls).
+long_option_table("debug-class-init",     debug_class_init).

  % optimization options

-long_option("default-opt-level",    default_opt_level).
-long_option("opt-level",            opt_level).
-long_option("optimization-level",   opt_level).
-long_option("optimisation-level",   opt_level).
-long_option("opt-space",            opt_space).
-long_option("optimize-space",       opt_space).
-long_option("optimise-space",       opt_space).
-long_option("intermod-opt",        intermodule_optimization).
-long_option("intermodule-optimization", intermodule_optimization).
-long_option("intermodule-optimisation", intermodule_optimization).
-long_option("read-opt-files-transitively", read_opt_files_transitively).
-long_option("use-opt-files",        use_opt_files).
-long_option("use-trans-opt-files",  use_trans_opt_files).
-long_option("transitive-intermodule-optimization",
+long_option_table("default-opt-level",    default_opt_level).
+long_option_table("opt-level",            opt_level).
+long_option_table("optimization-level",   opt_level).
+long_option_table("optimisation-level",   opt_level).
+long_option_table("opt-space",            opt_space).
+long_option_table("optimize-space",       opt_space).
+long_option_table("optimise-space",       opt_space).
+long_option_table("intermod-opt",        intermodule_optimization).
+long_option_table("intermodule-optimization", intermodule_optimization).
+long_option_table("intermodule-optimisation", intermodule_optimization).
+long_option_table("read-opt-files-transitively", read_opt_files_transitively).
+long_option_table("use-opt-files",        use_opt_files).
+long_option_table("use-trans-opt-files",  use_trans_opt_files).
+long_option_table("transitive-intermodule-optimization",
                      transitive_optimization).
-long_option("transitive-intermodule-optimisation",
+long_option_table("transitive-intermodule-optimisation",
                      transitive_optimization).
-long_option("trans-intermod-opt",   transitive_optimization).
-long_option("intermodule-analysis", intermodule_analysis).
-long_option("analysis-repeat",      analysis_repeat).
-long_option("analysis-file-cache",  analysis_file_cache).
+long_option_table("trans-intermod-opt",   transitive_optimization).
+long_option_table("intermodule-analysis", intermodule_analysis).
+long_option_table("analysis-repeat",      analysis_repeat).
+long_option_table("analysis-file-cache",  analysis_file_cache).

  % HLDS->HLDS optimizations
-long_option("allow-inlining",       optopt_allow_inlining).
-long_option("inlining",             inlining).
-long_option("inline-simple",        optopt_inline_simple).
-long_option("inline-builtins",      optopt_inline_builtins).
-long_option("inline-single-use",    optopt_inline_single_use).
-long_option("inline-call-cost",     optopt_inline_call_cost).
-long_option("inline-compound-threshold",    optopt_inline_compound_threshold).
-long_option("inline-simple-threshold",      optopt_inline_simple_threshold).
-long_option("intermod-inline-simple-threshold",
-                                    optopt_intermod_inline_simple_threshold).
-long_option("inline-linear-tail-rec-sccs", optopt_inline_linear_tail_rec_sccs).
-long_option("inline-linear-tail-rec-sccs-max-extra",
-                                 optopt_inline_linear_tail_rec_sccs_max_extra).
-long_option("from-ground-term-threshold",
-                                    optopt_from_ground_term_threshold).
-long_option("inline-vars-threshold",        optopt_inline_vars_threshold).
+long_option_table("allow-inlining",       optopt_allow_inlining).
+long_option_table("inlining",             inlining).
+long_option_table("inline-simple",        optopt_inline_simple).
+long_option_table("inline-builtins",      optopt_inline_builtins).
+long_option_table("inline-single-use",    optopt_inline_single_use).
+long_option_table("inline-call-cost",     optopt_inline_call_cost).
+long_option_table("inline-compound-threshold", optopt_inline_compound_threshold).
+long_option_table("inline-simple-threshold",   optopt_inline_simple_threshold).
+long_option_table("intermod-inline-simple-threshold",
+                                optopt_intermod_inline_simple_threshold).
+long_option_table("inline-linear-tail-rec-sccs",
+                                optopt_inline_linear_tail_rec_sccs).
+long_option_table("inline-linear-tail-rec-sccs-max-extra",
+                                optopt_inline_linear_tail_rec_sccs_max_extra).
+long_option_table("from-ground-term-threshold",
+                                optopt_from_ground_term_threshold).
+long_option_table("inline-vars-threshold",  optopt_inline_vars_threshold).
  % This option is only for internal use by the compiler.
-% long_option("const-struct-poly",    optopt_enable_const_struct_poly).
-long_option("const-struct",         optopt_enable_const_struct_user).
-long_option("common-struct",        optopt_common_struct).
-long_option("excess-assign",        optopt_excess_assign).
-long_option("merge-code-after-switch",      optopt_merge_code_after_switch).
-long_option("optimize-format-calls",        optopt_optimize_format_calls).
-long_option("split-switch-arms",        optopt_split_switch_arms).
-long_option("optimize-duplicate-calls", optopt_optimize_duplicate_calls).
-long_option("optimise-duplicate-calls", optopt_optimize_duplicate_calls).
-long_option("optimise-constant-propagation", optopt_constant_propagation).
-long_option("optimize-constant-propagation", optopt_constant_propagation).
-long_option("optimize-saved-vars",  optimize_saved_vars).
-long_option("optimise-saved-vars",  optimize_saved_vars).
-long_option("loop-invariants",      optopt_loop_invariants).
-long_option("optimize-saved-vars-const",    optopt_optimize_saved_vars_const).
-long_option("optimise-saved-vars-const",    optopt_optimize_saved_vars_const).
-long_option("optimize-saved-vars-cell", optopt_optimize_saved_vars_cell).
-long_option("optimise-saved-vars-cell", optopt_optimize_saved_vars_cell).
-long_option("osv-loop",             optopt_optimize_saved_vars_cell_loop).
-long_option("osv-full-path",        optopt_optimize_saved_vars_cell_full_path).
-long_option("osv-on-stack",         optopt_optimize_saved_vars_cell_on_stack).
-long_option("osv-cand-head",
+% long_option_table("const-struct-poly",    optopt_enable_const_struct_poly).
+long_option_table("const-struct",         optopt_enable_const_struct_user).
+long_option_table("common-struct",        optopt_common_struct).
+long_option_table("excess-assign",        optopt_excess_assign).
+long_option_table("merge-code-after-switch",  optopt_merge_code_after_switch).
+long_option_table("optimize-format-calls",    optopt_optimize_format_calls).
+long_option_table("split-switch-arms",        optopt_split_switch_arms).
+long_option_table("optimize-duplicate-calls", optopt_optimize_duplicate_calls).
+long_option_table("optimise-duplicate-calls", optopt_optimize_duplicate_calls).
+long_option_table("optimise-constant-propagation",
+                        optopt_constant_propagation).
+long_option_table("optimize-constant-propagation",
+                        optopt_constant_propagation).
+long_option_table("optimize-saved-vars",  optimize_saved_vars).
+long_option_table("optimise-saved-vars",  optimize_saved_vars).
+long_option_table("loop-invariants",      optopt_loop_invariants).
+long_option_table("optimize-saved-vars-const", optopt_optimize_saved_vars_const).
+long_option_table("optimise-saved-vars-const", optopt_optimize_saved_vars_const).
+long_option_table("optimize-saved-vars-cell", optopt_optimize_saved_vars_cell).
+long_option_table("optimise-saved-vars-cell", optopt_optimize_saved_vars_cell).
+long_option_table("osv-loop",      optopt_optimize_saved_vars_cell_loop).
+long_option_table("osv-full-path", optopt_optimize_saved_vars_cell_full_path).
+long_option_table("osv-on-stack",  optopt_optimize_saved_vars_cell_on_stack).
+long_option_table("osv-cand-head",
                          optopt_optimize_saved_vars_cell_candidate_headvars).
  % The next four options are used by tupling.m as well; changes to them
  % may require changes there as well.
-long_option("osv-cvstore-cost",
+long_option_table("osv-cvstore-cost",
                          optopt_optimize_saved_vars_cell_cv_store_cost).
-long_option("osv-cvload-cost",
+long_option_table("osv-cvload-cost",
                          optopt_optimize_saved_vars_cell_cv_load_cost).
-long_option("osv-fvstore-cost",
+long_option_table("osv-fvstore-cost",
                          optopt_optimize_saved_vars_cell_fv_store_cost).
-long_option("osv-fvload-cost",
+long_option_table("osv-fvload-cost",
                          optopt_optimize_saved_vars_cell_fv_load_cost).
-long_option("osv-op-ratio",
+long_option_table("osv-op-ratio",
                          optopt_optimize_saved_vars_cell_op_ratio).
-long_option("osv-node-ratio",
+long_option_table("osv-node-ratio",
                          optopt_optimize_saved_vars_cell_node_ratio).
-long_option("osv-allpath-node-ratio",
+long_option_table("osv-allpath-node-ratio",
                          optopt_optimize_saved_vars_cell_all_path_node_ratio).
-long_option("osv-all-cand",
+long_option_table("osv-all-cand",
                      optopt_optimize_saved_vars_cell_include_all_candidates).
-long_option("delay-construct",      optopt_delay_construct).
-long_option("delay-constructs",     optopt_delay_construct).
-long_option("follow-code",          optopt_follow_code).
-long_option("constraint-propagation",   optopt_constraint_propagation).
-long_option("local-constraint-propagation",
+long_option_table("delay-construct",      optopt_delay_construct).
+long_option_table("delay-constructs",     optopt_delay_construct).
+long_option_table("follow-code",          optopt_follow_code).
+long_option_table("constraint-propagation",   optopt_constraint_propagation).
+long_option_table("local-constraint-propagation",
                                       optopt_local_constraint_propagation).
-long_option("optimize-unused-args", optopt_optimize_unused_args).
-long_option("optimise-unused-args", optopt_optimize_unused_args).
-long_option("intermod-unused-args", optopt_intermod_unused_args).
-long_option("optimize-higher-order",    optopt_optimize_higher_order).
-long_option("optimise-higher-order",    optopt_optimize_higher_order).
-long_option("higher-order-size-limit",  optopt_higher_order_size_limit).
-long_option("higher-order-arg-limit",   optopt_higher_order_arg_limit).
-long_option("unneeded-code",        optopt_unneeded_code).
-long_option("unneeded-code-copy-limit", optopt_unneeded_code_copy_limit).
-long_option("type-specialization",  optopt_type_specialization).
-long_option("type-specialisation",  optopt_type_specialization).
-long_option("user-guided-type-specialization",
+long_option_table("optimize-unused-args", optopt_optimize_unused_args).
+long_option_table("optimise-unused-args", optopt_optimize_unused_args).
+long_option_table("intermod-unused-args", optopt_intermod_unused_args).
+long_option_table("optimize-higher-order",    optopt_optimize_higher_order).
+long_option_table("optimise-higher-order",    optopt_optimize_higher_order).
+long_option_table("higher-order-size-limit",  optopt_higher_order_size_limit).
+long_option_table("higher-order-arg-limit",   optopt_higher_order_arg_limit).
+long_option_table("unneeded-code",        optopt_unneeded_code).
+long_option_table("unneeded-code-copy-limit", optopt_unneeded_code_copy_limit).
+long_option_table("type-specialization",  optopt_type_specialization).
+long_option_table("type-specialisation",  optopt_type_specialization).
+long_option_table("user-guided-type-specialization",
                      optopt_user_guided_type_specialization).
-long_option("user-guided-type-specialisation",
+long_option_table("user-guided-type-specialisation",
                      optopt_user_guided_type_specialization).
  % This option is for use in configure.in to test for some bug-fixes for
  % type-specialization which are needed to compile the library. It's not
  % documented, and should eventually be removed.
-long_option("fixed-user-guided-type-specialization",
+long_option_table("fixed-user-guided-type-specialization",
                      optopt_user_guided_type_specialization).
-long_option("introduce-accumulators",   optopt_introduce_accumulators).
-long_option("optimise-constructor-last-call-accumulator",
+long_option_table("introduce-accumulators",   optopt_introduce_accumulators).
+long_option_table("optimise-constructor-last-call-accumulator",
                      optopt_optimize_constructor_last_call_accumulator).
-long_option("optimize-constructor-last-call-accumulator",
+long_option_table("optimize-constructor-last-call-accumulator",
                      optopt_optimize_constructor_last_call_accumulator).
-long_option("optimise-constructor-last-call-null",
+long_option_table("optimise-constructor-last-call-null",
                      optopt_optimize_constructor_last_call_null).
-long_option("optimize-constructor-last-call-null",
+long_option_table("optimize-constructor-last-call-null",
                      optopt_optimize_constructor_last_call_null).
-long_option("optimise-constructor-last-call",
+long_option_table("optimise-constructor-last-call",
                      optopt_optimize_constructor_last_call).
-long_option("optimize-constructor-last-call",
+long_option_table("optimize-constructor-last-call",
                      optopt_optimize_constructor_last_call).
-long_option("optimize-dead-procs",  optopt_optimize_dead_procs).
-long_option("optimise-dead-procs",  optopt_optimize_dead_procs).
-long_option("deforestation",        optopt_deforestation).
-long_option("deforestation-depth-limit",    optopt_deforestation_depth_limit).
-long_option("deforestation-cost-factor",    optopt_deforestation_cost_factor).
-long_option("deforestation-vars-threshold",
+long_option_table("optimize-dead-procs",  optopt_optimize_dead_procs).
+long_option_table("optimise-dead-procs",  optopt_optimize_dead_procs).
+long_option_table("deforestation",        optopt_deforestation).
+long_option_table("deforestation-depth-limit", optopt_deforestation_depth_limit).
+long_option_table("deforestation-cost-factor", optopt_deforestation_cost_factor).
+long_option_table("deforestation-vars-threshold",
                                      optopt_deforestation_vars_threshold).
-long_option("deforestation-size-threshold",
+long_option_table("deforestation-size-threshold",
                                      optopt_deforestation_size_threshold).

-long_option("untuple",              optopt_untuple).
-long_option("tuple",                optopt_tuple).
-long_option("tuple-trace-counts-file",  optopt_tuple_trace_counts_file).
-long_option("tuple-costs-ratio",    optopt_tuple_costs_ratio).
-long_option("tuple-min-args",       optopt_tuple_min_args).
-long_option("inline-par-builtins",  optopt_inline_par_builtins).
-long_option("always-specialize-in-dep-par-conjs",
+long_option_table("untuple",              optopt_untuple).
+long_option_table("tuple",                optopt_tuple).
+long_option_table("tuple-trace-counts-file",  optopt_tuple_trace_counts_file).
+long_option_table("tuple-costs-ratio",    optopt_tuple_costs_ratio).
+long_option_table("tuple-min-args",       optopt_tuple_min_args).
+long_option_table("inline-par-builtins",  optopt_inline_par_builtins).
+long_option_table("always-specialize-in-dep-par-conjs",
                                      optopt_always_specialize_in_dep_par_conjs).
-long_option("allow-some-paths-only-waits",
+long_option_table("allow-some-paths-only-waits",
                                      optopt_allow_some_paths_only_waits).
-long_option("region-analysis",      optopt_region_analysis).
+long_option_table("region-analysis",      optopt_region_analysis).

  % HLDS->LLDS optimizations
-long_option("smart-indexing",       optopt_smart_indexing).
-long_option("smart-atomic-indexing", optopt_smart_atomic_indexing).
-long_option("smart-string-indexing", optopt_smart_string_indexing).
-long_option("smart-tag-indexing",    optopt_smart_tag_indexing).
-long_option("smart-float-indexing",  optopt_smart_float_indexing).
-long_option("dense-switch-req-density", optopt_dense_switch_req_density).
-long_option("lookup-switch-req-density",optopt_lookup_switch_req_density).
-long_option("dense-switch-size",    optopt_dense_switch_size).
-long_option("lookup-switch-size",   optopt_lookup_switch_size).
-long_option("string-switch-size",   optopt_string_hash_switch_size).
-long_option("string-trie-size",     optopt_string_trie_switch_size).
-long_option("string-trie-switch-size",      optopt_string_trie_switch_size).
-long_option("string-hash-switch-size",      optopt_string_hash_switch_size).
-long_option("string-binary-switch-size",    optopt_string_binary_switch_size).
-long_option("tag-switch-size",      optopt_tag_switch_size).
-long_option("try-switch-size",      optopt_try_switch_size).
-long_option("binary-switch-size",   optopt_binary_switch_size).
-long_option("switch-single-rec-base-first",
+long_option_table("smart-indexing",       optopt_smart_indexing).
+long_option_table("smart-atomic-indexing", optopt_smart_atomic_indexing).
+long_option_table("smart-string-indexing", optopt_smart_string_indexing).
+long_option_table("smart-tag-indexing",    optopt_smart_tag_indexing).
+long_option_table("smart-float-indexing",  optopt_smart_float_indexing).
+long_option_table("dense-switch-req-density", optopt_dense_switch_req_density).
+long_option_table("lookup-switch-req-density",
+                                    optopt_lookup_switch_req_density).
+long_option_table("dense-switch-size",    optopt_dense_switch_size).
+long_option_table("lookup-switch-size",   optopt_lookup_switch_size).
+long_option_table("string-switch-size",   optopt_string_hash_switch_size).
+long_option_table("string-trie-size",     optopt_string_trie_switch_size).
+long_option_table("string-trie-switch-size",   optopt_string_trie_switch_size).
+long_option_table("string-hash-switch-size",   optopt_string_hash_switch_size).
+long_option_table("string-binary-switch-size", optopt_string_binary_switch_size).
+long_option_table("tag-switch-size",      optopt_tag_switch_size).
+long_option_table("try-switch-size",      optopt_try_switch_size).
+long_option_table("binary-switch-size",   optopt_binary_switch_size).
+long_option_table("switch-single-rec-base-first",
                                      optopt_switch_single_rec_base_first).
-long_option("switch-multi-rec-base-first",
+long_option_table("switch-multi-rec-base-first",
                                      optopt_switch_multi_rec_base_first).
-long_option("static-ground-terms",  optopt_static_ground_cells).
+long_option_table("static-ground-terms",  optopt_static_ground_cells).
  % static_ground_floats should be set only in handle_options.m.
-% long_option("static-ground-floats", static_ground_floats).
+% long_option_table("static-ground-floats", static_ground_floats).
  % static_ground_int64s should be set only in handle_options.m.
-% long_option("static-ground-int64s", static_ground_int64s).
+% long_option_table("static-ground-int64s", static_ground_int64s).
  % static_code_addresses should be set only in handle_options.m.
-% long_option("static-code-addresses", static_code_addresses).
-long_option("use-atomic-cells",     optopt_use_atomic_cells).
-long_option("middle-rec",           optopt_middle_rec).
-long_option("simple-neg",           optopt_simple_neg).
-long_option("allow-hijacks",        optopt_allow_hijacks).
+% long_option_table("static-code-addresses", static_code_addresses).
+long_option_table("use-atomic-cells",     optopt_use_atomic_cells).
+long_option_table("middle-rec",           optopt_middle_rec).
+long_option_table("simple-neg",           optopt_simple_neg).
+long_option_table("allow-hijacks",        optopt_allow_hijacks).

  % MLDS optimizations
  % Option `optimize' is used for both MLDS and LLDS optimizations, but since
  % you can't use both at the same time it doesn't really matter.
-long_option("mlds-optimize",        optopt_optimize).
-long_option("mlds-optimise",        optopt_optimize).
-long_option("mlds-peephole",        optopt_optimize_peep).
-long_option("optimize-tailcalls",   optopt_optimize_mlds_tailcalls).
-long_option("optimise-tailcalls",   optopt_optimize_mlds_tailcalls).
-long_option("optimize-initializations", optopt_optimize_initializations).
-long_option("optimise-initializations", optopt_optimize_initializations).
-long_option("eliminate-unused-mlds-assigns",
+long_option_table("mlds-optimize",        optopt_optimize).
+long_option_table("mlds-optimise",        optopt_optimize).
+long_option_table("mlds-peephole",        optopt_optimize_peep).
+long_option_table("optimize-tailcalls",   optopt_optimize_mlds_tailcalls).
+long_option_table("optimise-tailcalls",   optopt_optimize_mlds_tailcalls).
+long_option_table("optimize-initializations", optopt_optimize_initializations).
+long_option_table("optimise-initializations", optopt_optimize_initializations).
+long_option_table("eliminate-unused-mlds-assigns",
                                      optopt_eliminate_unused_mlds_assigns).
-long_option("eliminate-local-vars", optopt_eliminate_local_vars).
-long_option("generate-trail-ops-inline", optopt_generate_trail_ops_inline).
+long_option_table("eliminate-local-vars", optopt_eliminate_local_vars).
+long_option_table("generate-trail-ops-inline", optopt_generate_trail_ops_inline).

  % LLDS optimizations
-long_option("common-data",          optopt_common_data).
-long_option("common-layout-data",   optopt_common_layout_data).
-long_option("llds-optimize",        optopt_optimize).
-long_option("llds-optimise",        optopt_optimize).
-long_option("optimize-peep",        optopt_optimize_peep).
-long_option("optimise-peep",        optopt_optimize_peep).
-long_option("optimize-peep-mkword", optopt_optimize_peep_mkword).
-long_option("optimise-peep-mkword", optopt_optimize_peep_mkword).
-long_option("optimize-jumps",       optopt_optimize_jumps).
-long_option("optimise-jumps",       optopt_optimize_jumps).
-long_option("optimize-fulljumps",   optopt_optimize_fulljumps).
-long_option("optimise-fulljumps",   optopt_optimize_fulljumps).
-long_option("pessimize-tailcalls",  optopt_pessimize_tailcalls).
-long_option("checked-nondet-tailcalls", optopt_checked_nondet_tailcalls).
-long_option("use-local-vars",       optopt_use_local_vars).
-long_option("local-var-access-threshold", optopt_local_var_access_threshold).
-long_option("standardise-labels",   optopt_standardize_labels).
-long_option("standardize-labels",   optopt_standardize_labels).
-long_option("optimize-labels",      optopt_optimize_labels).
-long_option("optimise-labels",      optopt_optimize_labels).
-long_option("optimize-dups",        optopt_optimize_dups).
-long_option("optimise-dups",        optopt_optimize_dups).
-long_option("optimize-proc-dups",   optopt_optimize_proc_dups).
-long_option("optimise-proc-dups",   optopt_optimize_proc_dups).
-%%% long_option("optimize-copyprop",    optimize_copyprop).
-%%% long_option("optimise-copyprop",    optimize_copyprop).
-long_option("optimize-frames",      optopt_optimize_frames).
-long_option("optimise-frames",      optopt_optimize_frames).
-long_option("optimize-delay-slot",  optopt_optimize_delay_slot).
-long_option("optimise-delay-slot",  optopt_optimize_delay_slot).
-long_option("optimize-reassign",    optopt_optimize_reassign).
-long_option("optimise-reassign",    optopt_optimize_reassign).
-long_option("optimize-repeat",      optopt_optimize_repeat).
-long_option("optimise-repeat",      optopt_optimize_repeat).
-long_option("layout-compression-limit",      optopt_layout_compression_limit).
+long_option_table("common-data",          optopt_common_data).
+long_option_table("common-layout-data",   optopt_common_layout_data).
+long_option_table("llds-optimize",        optopt_optimize).
+long_option_table("llds-optimise",        optopt_optimize).
+long_option_table("optimize-peep",        optopt_optimize_peep).
+long_option_table("optimise-peep",        optopt_optimize_peep).
+long_option_table("optimize-peep-mkword", optopt_optimize_peep_mkword).
+long_option_table("optimise-peep-mkword", optopt_optimize_peep_mkword).
+long_option_table("optimize-jumps",       optopt_optimize_jumps).
+long_option_table("optimise-jumps",       optopt_optimize_jumps).
+long_option_table("optimize-fulljumps",   optopt_optimize_fulljumps).
+long_option_table("optimise-fulljumps",   optopt_optimize_fulljumps).
+long_option_table("pessimize-tailcalls",  optopt_pessimize_tailcalls).
+long_option_table("checked-nondet-tailcalls", optopt_checked_nondet_tailcalls).
+long_option_table("use-local-vars",       optopt_use_local_vars).
+long_option_table("local-var-access-threshold",
+        optopt_local_var_access_threshold).
+long_option_table("standardise-labels",   optopt_standardize_labels).
+long_option_table("standardize-labels",   optopt_standardize_labels).
+long_option_table("optimize-labels",      optopt_optimize_labels).
+long_option_table("optimise-labels",      optopt_optimize_labels).
+long_option_table("optimize-dups",        optopt_optimize_dups).
+long_option_table("optimise-dups",        optopt_optimize_dups).
+long_option_table("optimize-proc-dups",   optopt_optimize_proc_dups).
+long_option_table("optimise-proc-dups",   optopt_optimize_proc_dups).
+%%% long_option_table("optimize-copyprop",    optimize_copyprop).
+%%% long_option_table("optimise-copyprop",    optimize_copyprop).
+long_option_table("optimize-frames",      optopt_optimize_frames).
+long_option_table("optimise-frames",      optopt_optimize_frames).
+long_option_table("optimize-delay-slot",  optopt_optimize_delay_slot).
+long_option_table("optimise-delay-slot",  optopt_optimize_delay_slot).
+long_option_table("optimize-reassign",    optopt_optimize_reassign).
+long_option_table("optimise-reassign",    optopt_optimize_reassign).
+long_option_table("optimize-repeat",      optopt_optimize_repeat).
+long_option_table("optimise-repeat",      optopt_optimize_repeat).
+long_option_table("layout-compression-limit",
+        optopt_layout_compression_limit).

  % LLDS->C optimizations
-long_option("use-macro-for-redo-fail",  optopt_use_macro_for_redo_fail).
-long_option("emit-c-loops",         optopt_emit_c_loops).
-long_option("procs-per-c-function", optopt_procs_per_c_function).
-long_option("procs-per-C-function", optopt_procs_per_c_function).
-long_option("everything-in-one-c-function",
+long_option_table("use-macro-for-redo-fail",  optopt_use_macro_for_redo_fail).
+long_option_table("emit-c-loops",         optopt_emit_c_loops).
+long_option_table("procs-per-c-function", optopt_procs_per_c_function).
+long_option_table("procs-per-C-function", optopt_procs_per_c_function).
+long_option_table("everything-in-one-c-function",
                                      optopt_everything_in_one_c_function).
-long_option("everything-in-one-C-function",
+long_option_table("everything-in-one-C-function",
                                      optopt_everything_in_one_c_function).
-long_option("inline-alloc",         optopt_inline_alloc).
-long_option("local-thread-engine-base", optopt_local_thread_engine_base).
-
-long_option("enable-termination",   termination).
-long_option("enable-term",          termination).
-long_option("check-termination",    termination_check).
-long_option("check-term",           termination_check).
-long_option("chk-term",             termination_check).
-long_option("verbose-check-termination", termination_check_verbose).
-long_option("verb-check-term",      termination_check_verbose).
-long_option("verb-chk-term",        termination_check_verbose).
-long_option("termination-single-argument-analysis",
+long_option_table("inline-alloc",         optopt_inline_alloc).
+long_option_table("local-thread-engine-base", optopt_local_thread_engine_base).
+
+long_option_table("enable-termination",   termination).
+long_option_table("enable-term",          termination).
+long_option_table("check-termination",    termination_check).
+long_option_table("check-term",           termination_check).
+long_option_table("chk-term",             termination_check).
+long_option_table("verbose-check-termination", termination_check_verbose).
+long_option_table("verb-check-term",      termination_check_verbose).
+long_option_table("verb-chk-term",        termination_check_verbose).
+long_option_table("termination-single-argument-analysis",
                      termination_single_args).
-long_option("term-single-arg",      termination_single_args).
-long_option("termination-norm",     termination_norm).
-long_option("term-norm",            termination_norm).
-long_option("termination-error-limit",  termination_error_limit).
-long_option("term-err-limit",       termination_error_limit).
-long_option("termination-path-limit",   termination_path_limit).
-long_option("term-path-limit",      termination_path_limit).
-long_option("enable-termination2",  termination2).
-long_option("enable-term2",         termination2).
-long_option("check-termination2",   termination2_check).
-long_option("check-term2",          termination2_check).
-long_option("chk-term2",            termination2_check).
-long_option("verbose-check-termination2", termination2_check_verbose).
-long_option("verb-check-term2",     termination2_check_verbose).
-long_option("verb-chk-term2",       termination2_check_verbose).
-long_option("termination2-widening-limit", widening_limit).
-long_option("term2-widening-limit",     widening_limit).
-long_option("arg-size-analysis-only",   arg_size_analysis_only).
-long_option("termination2-propagate-failure-constraints",
+long_option_table("term-single-arg",      termination_single_args).
+long_option_table("termination-norm",     termination_norm).
+long_option_table("term-norm",            termination_norm).
+long_option_table("termination-error-limit",  termination_error_limit).
+long_option_table("term-err-limit",       termination_error_limit).
+long_option_table("termination-path-limit",   termination_path_limit).
+long_option_table("term-path-limit",      termination_path_limit).
+long_option_table("enable-termination2",  termination2).
+long_option_table("enable-term2",         termination2).
+long_option_table("check-termination2",   termination2_check).
+long_option_table("check-term2",          termination2_check).
+long_option_table("chk-term2",            termination2_check).
+long_option_table("verbose-check-termination2", termination2_check_verbose).
+long_option_table("verb-check-term2",     termination2_check_verbose).
+long_option_table("verb-chk-term2",       termination2_check_verbose).
+long_option_table("termination2-widening-limit", widening_limit).
+long_option_table("term2-widening-limit",     widening_limit).
+long_option_table("arg-size-analysis-only",   arg_size_analysis_only).
+long_option_table("termination2-propagate-failure-constraints",
+                    propagate_failure_constrs).
+long_option_table("term2-propagate-failure-constraints",
                      propagate_failure_constrs).
-long_option("term2-propagate-failure-constraints",
+long_option_table("term2-propagate-failure-constrs",
                      propagate_failure_constrs).
-long_option("term2-propagate-failure-constrs", propagate_failure_constrs).
-long_option("termination2-norm", termination2_norm).
-long_option("term2-norm", termination2_norm).
-long_option("termination2-maximum-matrix-size", term2_maximum_matrix_size).
-long_option("term2-max-matrix-size", term2_maximum_matrix_size).
-long_option("analyse-exceptions",   analyse_exceptions).
-long_option("analyse-closures",     analyse_closures).
-long_option("analyse-local-closures",   analyse_closures).
-long_option("analyse-trail-usage",  analyse_trail_usage).
-long_option("optimize-trail-usage", optimize_trail_usage).
-long_option("optimize-region-ops",  optimize_region_ops).
-long_option("analyse-mm-tabling",   analyse_mm_tabling).
+long_option_table("termination2-norm", termination2_norm).
+long_option_table("term2-norm", termination2_norm).
+long_option_table("termination2-maximum-matrix-size", term2_maximum_matrix_size).
+long_option_table("term2-max-matrix-size", term2_maximum_matrix_size).
+long_option_table("analyse-exceptions",   analyse_exceptions).
+long_option_table("analyse-closures",     analyse_closures).
+long_option_table("analyse-local-closures",   analyse_closures).
+long_option_table("analyse-trail-usage",  analyse_trail_usage).
+long_option_table("optimize-trail-usage", optimize_trail_usage).
+long_option_table("optimize-region-ops",  optimize_region_ops).
+long_option_table("analyse-mm-tabling",   analyse_mm_tabling).

  % CTGC related options.
-long_option("structure-sharing",    structure_sharing_analysis).
-long_option("structure-sharing-widening", structure_sharing_widening).
-long_option("structure-reuse",      structure_reuse_analysis).
-long_option("ctgc",                 structure_reuse_analysis).
-long_option("structure-reuse-constraint", structure_reuse_constraint).
-long_option("ctgc-constraint",      structure_reuse_constraint).
-long_option("structure-reuse-constraint-arg", structure_reuse_constraint_arg).
-long_option("ctgc-constraint-arg",  structure_reuse_constraint_arg).
-long_option("structure-reuse-max-conditions", structure_reuse_max_conditions).
-long_option("structure-reuse-repeat", structure_reuse_repeat).
-long_option("structure-reuse-free-cells", structure_reuse_free_cells).
+long_option_table("structure-sharing",    structure_sharing_analysis).
+long_option_table("structure-sharing-widening", structure_sharing_widening).
+long_option_table("structure-reuse",      structure_reuse_analysis).
+long_option_table("ctgc",                 structure_reuse_analysis).
+long_option_table("structure-reuse-constraint", structure_reuse_constraint).
+long_option_table("ctgc-constraint",      structure_reuse_constraint).
+long_option_table("structure-reuse-constraint-arg",
+            structure_reuse_constraint_arg).
+long_option_table("ctgc-constraint-arg",  structure_reuse_constraint_arg).
+long_option_table("structure-reuse-max-conditions",
+            structure_reuse_max_conditions).
+long_option_table("structure-reuse-repeat", structure_reuse_repeat).
+long_option_table("structure-reuse-free-cells", structure_reuse_free_cells).

  % Target code compilation options
-long_option("target-debug",         target_debug).
+long_option_table("target-debug",         target_debug).

-long_option("cc",                   cc).
-long_option("c-optimise",           optopt_c_optimize).
-long_option("c-optimize",           optopt_c_optimize).
+long_option_table("cc",                   cc).
+long_option_table("c-optimise",           optopt_c_optimize).
+long_option_table("c-optimize",           optopt_c_optimize).
  % XXX we should consider the relationship between c_debug and target_debug
  % more carefully. Perhaps target_debug could imply C debug if the target is C.
  % However for the moment they are just synonyms.
-long_option("c-debug",              target_debug).
-long_option("c-include-directory",  c_include_directory).
-long_option("c-include-dir",        c_include_directory).
-long_option("ansi-c",               ansi_c).
-long_option("cflags",               cflags).
-long_option("cflag",                quoted_cflag).
-
-long_option("gcc-flags",            gcc_flags).
-long_option("gcc-flag",             quoted_gcc_flag).
-long_option("clang-flags",          clang_flags).
-long_option("clang-flag",           quoted_clang_flag).
-long_option("msvc-flags",           msvc_flags).
-long_option("msvc-flag",            quoted_msvc_flag).
-
-long_option("cflags-for-warnings",  cflags_for_warnings).
-long_option("cflags-for-optimization",  cflags_for_optimization).
-long_option("cflags-for-ansi",      cflags_for_ansi).
-long_option("cflags-for-regs",      cflags_for_regs).
-long_option("cflags-for-gotos",     cflags_for_gotos).
-long_option("cflags-for-threads",   cflags_for_threads).
-long_option("cflags-for-debug",     cflags_for_debug).
-long_option("cflags-for-sanitizers", cflags_for_sanitizers).
-long_option("cflags-for-pic",       cflags_for_pic).
-long_option("cflags-for-lto",       cflags_for_lto).
-long_option("c-flag-to-name-object-file", c_flag_to_name_object_file).
-long_option("object-file-extension",    object_file_extension).
-long_option("pic-object-file-extension", pic_object_file_extension).
-long_option("c-compiler-type",      c_compiler_type).
-long_option("csharp-compiler-type", csharp_compiler_type).
-
-long_option("java-compiler",        java_compiler).
-long_option("javac",                java_compiler).
-long_option("java-interpreter",     java_interpreter).
-long_option("javac-flags",          java_compiler_flags).
-long_option("javac-flag",           quoted_java_compiler_flag).
-long_option("java-flags",           java_compiler_flags).
-long_option("java-flag",            quoted_java_compiler_flag).
+long_option_table("c-debug",              target_debug).
+long_option_table("c-include-directory",  c_include_directory).
+long_option_table("c-include-dir",        c_include_directory).
+long_option_table("ansi-c",               ansi_c).
+long_option_table("cflags",               cflags).
+long_option_table("cflag",                quoted_cflag).
+
+long_option_table("gcc-flags",            gcc_flags).
+long_option_table("gcc-flag",             quoted_gcc_flag).
+long_option_table("clang-flags",          clang_flags).
+long_option_table("clang-flag",           quoted_clang_flag).
+long_option_table("msvc-flags",           msvc_flags).
+long_option_table("msvc-flag",            quoted_msvc_flag).
+
+long_option_table("cflags-for-warnings",  cflags_for_warnings).
+long_option_table("cflags-for-optimization",  cflags_for_optimization).
+long_option_table("cflags-for-ansi",      cflags_for_ansi).
+long_option_table("cflags-for-regs",      cflags_for_regs).
+long_option_table("cflags-for-gotos",     cflags_for_gotos).
+long_option_table("cflags-for-threads",   cflags_for_threads).
+long_option_table("cflags-for-debug",     cflags_for_debug).
+long_option_table("cflags-for-sanitizers", cflags_for_sanitizers).
+long_option_table("cflags-for-pic",       cflags_for_pic).
+long_option_table("cflags-for-lto",       cflags_for_lto).
+long_option_table("c-flag-to-name-object-file", c_flag_to_name_object_file).
+long_option_table("object-file-extension",    object_file_extension).
+long_option_table("pic-object-file-extension", pic_object_file_extension).
+long_option_table("c-compiler-type",      c_compiler_type).
+long_option_table("csharp-compiler-type", csharp_compiler_type).
+
+long_option_table("java-compiler",        java_compiler).
+long_option_table("javac",                java_compiler).
+long_option_table("java-interpreter",     java_interpreter).
+long_option_table("javac-flags",          java_compiler_flags).
+long_option_table("javac-flag",           quoted_java_compiler_flag).
+long_option_table("java-flags",           java_compiler_flags).
+long_option_table("java-flag",            quoted_java_compiler_flag).
  % XXX we should consider the relationship between java_debug and target_debug
  % more carefully. Perhaps target_debug could imply Java debug if the target
  % is Java. However for the moment they are just synonyms.
-long_option("java-debug",           target_debug).
-long_option("java-classpath",       java_classpath).
-long_option("java-runtime-flags",   java_runtime_flags).
-long_option("java-runtime-flag",    quoted_java_runtime_flag).
+long_option_table("java-debug",           target_debug).
+long_option_table("java-classpath",       java_classpath).
+long_option_table("java-runtime-flags",   java_runtime_flags).
+long_option_table("java-runtime-flag",    quoted_java_runtime_flag).

-long_option("csharp-compiler",      csharp_compiler).
-long_option("csharp-flags",         csharp_flags).
-long_option("csharp-flag",          quoted_csharp_flag).
-long_option("cli-interpreter",      cli_interpreter).
+long_option_table("csharp-compiler",      csharp_compiler).
+long_option_table("csharp-flags",         csharp_flags).
+long_option_table("csharp-flag",          quoted_csharp_flag).
+long_option_table("cli-interpreter",      cli_interpreter).

  % link options
-long_option("output-file",          output_file_name).
-long_option("ld-flags",             ld_flags).
-long_option("ld-flag",              quoted_ld_flag).
-long_option("ld-libflags",          ld_libflags).
-long_option("ld-libflag",           quoted_ld_libflag).
-long_option("library-directory",    link_library_directories).
-long_option("runtime-library-directory", runtime_link_library_directories).
-long_option("default-runtime-library-directory",
+long_option_table("output-file",          output_file_name).
+long_option_table("ld-flags",             ld_flags).
+long_option_table("ld-flag",              quoted_ld_flag).
+long_option_table("ld-libflags",          ld_libflags).
+long_option_table("ld-libflag",           quoted_ld_libflag).
+long_option_table("library-directory",    link_library_directories).
+long_option_table("runtime-library-directory", runtime_link_library_directories).
+long_option_table("default-runtime-library-directory",
                                      default_runtime_library_directory).
-long_option("library",              link_libraries).
-long_option("link-object",          link_objects).
-long_option("mercury-library",      mercury_library_special).
-long_option("ml",                   mercury_library_special).
-long_option("mercury-library-directory", mercury_library_directory_special).
-long_option("mld",                  mercury_library_directory_special).
-long_option("search-library-files-directory",
+long_option_table("library",              link_libraries).
+long_option_table("link-object",          link_objects).
+long_option_table("mercury-library",      mercury_library_special).
+long_option_table("ml",                   mercury_library_special).
+long_option_table("mercury-library-directory",
+                mercury_library_directory_special).
+long_option_table("mld",                  mercury_library_directory_special).
+long_option_table("search-library-files-directory",
                  search_library_files_directory_special).
-long_option("search-lib-files-dir",
+long_option_table("search-lib-files-dir",
                  search_library_files_directory_special).
-long_option("mercury-standard-library-directory",
+long_option_table("mercury-standard-library-directory",
                  mercury_standard_library_directory_special).
-long_option("mercury-stdlib-dir",
+long_option_table("mercury-stdlib-dir",
                  mercury_standard_library_directory_special).
-long_option("init-file-directory",  init_file_directories).
-long_option("init-file",            init_files).
-long_option("trace-init-file",      trace_init_files).
-long_option("linkage",              linkage_special).
-long_option("mercury-linkage",      mercury_linkage_special).
-long_option("demangle",             demangle).
-long_option("strip",                strip).
-long_option("main",                 main).
-long_option("allow-undefined",      allow_undefined).
-long_option("use-readline",         use_readline).
-long_option("runtime-flags",        runtime_flags).
-long_option("extra-initialization-functions",
+long_option_table("init-file-directory",  init_file_directories).
+long_option_table("init-file",            init_files).
+long_option_table("trace-init-file",      trace_init_files).
+long_option_table("linkage",              linkage_special).
+long_option_table("mercury-linkage",      mercury_linkage_special).
+long_option_table("demangle",             demangle).
+long_option_table("strip",                strip).
+long_option_table("main",                 main).
+long_option_table("allow-undefined",      allow_undefined).
+long_option_table("use-readline",         use_readline).
+long_option_table("runtime-flags",        runtime_flags).
+long_option_table("extra-initialization-functions",
                      extra_initialization_functions).
-long_option("extra-inits",      extra_initialization_functions).
-long_option("framework",        frameworks).
-long_option("framework-directory", framework_directories).
-long_option("sign-assembly", sign_assembly).
-long_option("cstack-reserve-size", cstack_reserve_size).
-
-long_option("shared-library-extension", shared_library_extension).
-long_option("library-extension",    library_extension).
-long_option("executable-file-extension", executable_file_extension).
-long_option("create-archive-command",   create_archive_command).
-long_option("create-archive-command-output-flag",
+long_option_table("extra-inits",      extra_initialization_functions).
+long_option_table("framework",        frameworks).
+long_option_table("framework-directory", framework_directories).
+long_option_table("sign-assembly", sign_assembly).
+long_option_table("cstack-reserve-size", cstack_reserve_size).
+
+long_option_table("shared-library-extension", shared_library_extension).
+long_option_table("library-extension",    library_extension).
+long_option_table("executable-file-extension", executable_file_extension).
+long_option_table("create-archive-command",   create_archive_command).
+long_option_table("create-archive-command-output-flag",
                      create_archive_command_output_flag).
-long_option("create-archive-command-flags", create_archive_command_flags).
-long_option("link-executable-command",  link_executable_command).
-long_option("link-shared-lib-command",  link_shared_lib_command).
-long_option("ranlib-command",       ranlib_command).
-long_option("ranlib-flags",         ranlib_flags).
-long_option("mkinit-command",       mkinit_command).
-long_option("mkinit-erl-command",   mkinit_erl_command).
-long_option("demangle-command",     demangle_command).
-long_option("filtercc-command",     filtercc_command).
-long_option("filterjavac-command",  filterjavac_command).
-long_option("trace-libs",           trace_libs).
-long_option("thread-libs",          thread_libs).
-long_option("hwloc-libs",           hwloc_libs).
-long_option("hwloc-static-libs",    hwloc_static_libs).
-long_option("shared-libs",          shared_libs).
-long_option("math-lib",             math_lib).
-long_option("readline-libs",        readline_libs).
-long_option("linker-opt-separator", linker_opt_separator).
-long_option("linker-debug-flags",   linker_debug_flags).
-long_option("shlib-linker-debug-flags", shlib_linker_debug_flags).
-long_option("linker-sanitizer-flags", linker_sanitizer_flags).
-long_option("linker-trace-flags",   linker_trace_flags).
-long_option("shlib-linker-trace-flags", shlib_linker_trace_flags).
-long_option("linker-thread-flags",  linker_thread_flags).
-long_option("shlib-linker-thread-flags", shlib_linker_thread_flags).
-long_option("linker-lto-flags",     linker_lto_flags).
-long_option("linker-static-flags",  linker_static_flags).
-long_option("linker-strip-flag",    linker_strip_flag).
-long_option("linker-link-lib-flag", linker_link_lib_flag).
-long_option("linker-link-lib-suffix",   linker_link_lib_suffix).
-long_option("shlib-linker-link-lib-flag", shlib_linker_link_lib_flag).
-long_option("shlib-linker-link-lib-suffix", shlib_linker_link_lib_suffix).
-long_option("linker-path-flag",     linker_path_flag).
-long_option("linker-rpath-flag",    linker_rpath_flag).
-long_option("linker-rpath-separator",   linker_rpath_separator).
-long_option("shlib-linker-rpath-flag",  shlib_linker_rpath_flag).
-long_option("shlib-linker-rpath-separator", shlib_linker_rpath_separator).
-long_option("linker-allow-undefined-flag", linker_allow_undefined_flag).
-long_option("linker-error-undefined-flag", linker_error_undefined_flag).
-long_option("shlib-linker-use-install-name", shlib_linker_use_install_name).
-long_option("shlib-linker-install-name-flag", shlib_linker_install_name_flag).
-long_option("shlib-linker-install-name-path", shlib_linker_install_name_path).
-long_option("strip-executable-command", strip_executable_command).
-long_option("strip-executable-shared-flags", strip_executable_shared_flags).
-long_option("strip-executable-static-flags", strip_executable_static_flags).
-long_option("java-archive-command", java_archive_command).
+long_option_table("create-archive-command-flags",
+                    create_archive_command_flags).
+long_option_table("link-executable-command",  link_executable_command).
+long_option_table("link-shared-lib-command",  link_shared_lib_command).
+long_option_table("ranlib-command",       ranlib_command).
+long_option_table("ranlib-flags",         ranlib_flags).
+long_option_table("mkinit-command",       mkinit_command).
+long_option_table("mkinit-erl-command",   mkinit_erl_command).
+long_option_table("demangle-command",     demangle_command).
+long_option_table("filtercc-command",     filtercc_command).
+long_option_table("filterjavac-command",  filterjavac_command).
+long_option_table("trace-libs",           trace_libs).
+long_option_table("thread-libs",          thread_libs).
+long_option_table("hwloc-libs",           hwloc_libs).
+long_option_table("hwloc-static-libs",    hwloc_static_libs).
+long_option_table("shared-libs",          shared_libs).
+long_option_table("math-lib",             math_lib).
+long_option_table("readline-libs",        readline_libs).
+long_option_table("linker-opt-separator", linker_opt_separator).
+long_option_table("linker-debug-flags",   linker_debug_flags).
+long_option_table("shlib-linker-debug-flags", shlib_linker_debug_flags).
+long_option_table("linker-sanitizer-flags", linker_sanitizer_flags).
+long_option_table("linker-trace-flags",   linker_trace_flags).
+long_option_table("shlib-linker-trace-flags", shlib_linker_trace_flags).
+long_option_table("linker-thread-flags",  linker_thread_flags).
+long_option_table("shlib-linker-thread-flags", shlib_linker_thread_flags).
+long_option_table("linker-lto-flags",     linker_lto_flags).
+long_option_table("linker-static-flags",  linker_static_flags).
+long_option_table("linker-strip-flag",    linker_strip_flag).
+long_option_table("linker-link-lib-flag", linker_link_lib_flag).
+long_option_table("linker-link-lib-suffix",   linker_link_lib_suffix).
+long_option_table("shlib-linker-link-lib-flag", shlib_linker_link_lib_flag).
+long_option_table("shlib-linker-link-lib-suffix",
+                    shlib_linker_link_lib_suffix).
+long_option_table("linker-path-flag",     linker_path_flag).
+long_option_table("linker-rpath-flag",    linker_rpath_flag).
+long_option_table("linker-rpath-separator",   linker_rpath_separator).
+long_option_table("shlib-linker-rpath-flag",  shlib_linker_rpath_flag).
+long_option_table("shlib-linker-rpath-separator",
+                    shlib_linker_rpath_separator).
+long_option_table("linker-allow-undefined-flag", linker_allow_undefined_flag).
+long_option_table("linker-error-undefined-flag", linker_error_undefined_flag).
+long_option_table("shlib-linker-use-install-name",
+                    shlib_linker_use_install_name).
+long_option_table("shlib-linker-install-name-flag",
+                    shlib_linker_install_name_flag).
+long_option_table("shlib-linker-install-name-path",
+                     shlib_linker_install_name_path).
+long_option_table("strip-executable-command", strip_executable_command).
+long_option_table("strip-executable-shared-flags",
+                    strip_executable_shared_flags).
+long_option_table("strip-executable-static-flags",
+                    strip_executable_static_flags).
+long_option_table("java-archive-command", java_archive_command).

  % build system options
-long_option("make",                 only_opmode_make).
-long_option("invoked-by-mmc-make",  only_opmode_invoked_by_mmc_make).
-long_option("keep-going",           keep_going).
-long_option("rebuild",              rebuild).
-long_option("jobs",                 jobs).
-long_option("track-flags",          track_flags).
-long_option("track-options",        track_flags).
-long_option("pre-link-command",     pre_link_command).
-long_option("extra-init-command",   extra_init_command).
-long_option("mercury-configuration-directory",
+long_option_table("make",                 only_opmode_make).
+long_option_table("invoked-by-mmc-make",  only_opmode_invoked_by_mmc_make).
+long_option_table("keep-going",           keep_going).
+long_option_table("rebuild",              rebuild).
+long_option_table("jobs",                 jobs).
+long_option_table("track-flags",          track_flags).
+long_option_table("track-options",        track_flags).
+long_option_table("pre-link-command",     pre_link_command).
+long_option_table("extra-init-command",   extra_init_command).
+long_option_table("mercury-configuration-directory",
                  mercury_configuration_directory_special).
-long_option("mercury-config-dir",
+long_option_table("mercury-config-dir",
                  mercury_configuration_directory_special).
-long_option("install-prefix",       install_prefix).
-long_option("install-method",       install_method).
-long_option("install-command",      install_command).
-long_option("install-command-dir-option", install_command_dir_option).
-long_option("use-symlinks",         use_symlinks).
-long_option("library-grade",        libgrades).
-long_option("detect-libgrades",     detect_libgrades).
-long_option("libgrade",             libgrades).
-long_option("libgrades-include-component", libgrades_include_components).
-long_option("libgrades-include",           libgrades_include_components).
-long_option("libgrades-exclude-component", libgrades_exclude_components).
-long_option("libgrades-exclude",           libgrades_exclude_components).
-long_option("library-linkage",      lib_linkages).
-long_option("lib-linkage",          lib_linkages).
-long_option("flags",                flags_file).
-long_option("flags-file",           flags_file).
-long_option("options-file",         options_files).
-long_option("config-file",          config_file).
-long_option("options-search-directory", options_search_directories).
-long_option("use-subdirs",          setting_only_use_subdirs).
-long_option("use-grade-subdirs",    setting_only_use_grade_subdirs).
-long_option("std-int-file-not-written-msgs",    std_int_file_not_written_msgs).
-long_option("search-directory",     search_directories).
-long_option("intermod-directory",   intermod_directories).
-long_option("use-search-directories-for-intermod",
+long_option_table("install-prefix",       install_prefix).
+long_option_table("install-method",       install_method).
+long_option_table("install-command",      install_command).
+long_option_table("install-command-dir-option", install_command_dir_option).
+long_option_table("use-symlinks",         use_symlinks).
+long_option_table("library-grade",        libgrades).
+long_option_table("detect-libgrades",     detect_libgrades).
+long_option_table("libgrade",             libgrades).
+long_option_table("libgrades-include-component", libgrades_include_components).
+long_option_table("libgrades-include",           libgrades_include_components).
+long_option_table("libgrades-exclude-component", libgrades_exclude_components).
+long_option_table("libgrades-exclude",           libgrades_exclude_components).
+long_option_table("library-linkage",      lib_linkages).
+long_option_table("lib-linkage",          lib_linkages).
+long_option_table("flags",                flags_file).
+long_option_table("flags-file",           flags_file).
+long_option_table("options-file",         options_files).
+long_option_table("config-file",          config_file).
+long_option_table("options-search-directory", options_search_directories).
+long_option_table("use-subdirs",          setting_only_use_subdirs).
+long_option_table("use-grade-subdirs",    setting_only_use_grade_subdirs).
+long_option_table("std-int-file-not-written-msgs",
+                    std_int_file_not_written_msgs).
+long_option_table("search-directory",     search_directories).
+long_option_table("intermod-directory",   intermod_directories).
+long_option_table("use-search-directories-for-intermod",
                      use_search_directories_for_intermod).
-long_option("libgrade-install-check", libgrade_install_check).
-long_option("order-make-by-timestamp", order_make_by_timestamp).
-long_option("show-make-times",      show_make_times).
-long_option("extra-lib-header",     extra_library_header).
-long_option("extra-library-header", extra_library_header).
-long_option("restricted-command-line", restricted_command_line).
-long_option("env-type",                env_type).
-long_option("host-env-type",           host_env_type).
-long_option("system-env-type",         system_env_type).
-long_option("target-env-type",         target_env_type).
+long_option_table("libgrade-install-check", libgrade_install_check).
+long_option_table("order-make-by-timestamp", order_make_by_timestamp).
+long_option_table("show-make-times",      show_make_times).
+long_option_table("extra-lib-header",     extra_library_header).
+long_option_table("extra-library-header", extra_library_header).
+long_option_table("restricted-command-line", restricted_command_line).
+long_option_table("env-type",                env_type).
+long_option_table("host-env-type",           host_env_type).
+long_option_table("system-env-type",         system_env_type).
+long_option_table("target-env-type",         target_env_type).

  % misc options
-long_option("typecheck-ambiguity-warn-limit",
+long_option_table("typecheck-ambiguity-warn-limit",
                                      typecheck_ambiguity_warn_limit).
-long_option("typecheck-ambiguity-error-limit",
+long_option_table("typecheck-ambiguity-error-limit",
                                      typecheck_ambiguity_error_limit).
-long_option("help",                 help).
-long_option("version",              version).
-long_option("filenames-from-stdin", filenames_from_stdin).
-long_option("target-arch",          target_arch).
-long_option("cross-compiling",      cross_compiling).
-long_option("local-module-id",      local_module_id).
-long_option("analysis-file-cache-dir",  analysis_file_cache_dir).
-long_option("bug-intermod-2002-06-13",  compiler_sufficiently_recent).
-long_option("bug-intermod-2006-09-28",  compiler_sufficiently_recent).
-long_option("bug-foreign_import-2002-08-06", compiler_sufficiently_recent).
-long_option("install-opt-files-2002-08-30", compiler_sufficiently_recent).
-long_option("read-config-file-2003-03-01", compiler_sufficiently_recent).
+long_option_table("help",                 help).
+long_option_table("version",              version).
+long_option_table("filenames-from-stdin", filenames_from_stdin).
+long_option_table("target-arch",          target_arch).
+long_option_table("cross-compiling",      cross_compiling).
+long_option_table("local-module-id",      local_module_id).
+long_option_table("analysis-file-cache-dir",  analysis_file_cache_dir).
+long_option_table("bug-intermod-2002-06-13",  compiler_sufficiently_recent).
+long_option_table("bug-intermod-2006-09-28",  compiler_sufficiently_recent).
+long_option_table("bug-foreign_import-2002-08-06", compiler_sufficiently_recent).
+long_option_table("install-opt-files-2002-08-30",
+                                    compiler_sufficiently_recent).
+long_option_table("read-config-file-2003-03-01", compiler_sufficiently_recent).
  % XXX this option won't be recognised because of the "no-" prefix,
  % but "no-no-" will be recognised.
-long_option("no-noncompact-ho-call-2004-01-15", compiler_sufficiently_recent).
-long_option("trace-io-builtins-2006-08-14", compiler_sufficiently_recent).
-long_option("compound-compare-builtins-2007-07-09",
+long_option_table("no-noncompact-ho-call-2004-01-15",
+                                    compiler_sufficiently_recent).
+long_option_table("trace-io-builtins-2006-08-14",
+                                    compiler_sufficiently_recent).
+long_option_table("compound-compare-builtins-2007-07-09",
                                      compiler_sufficiently_recent).
  % XXX this option won't be recognised because of the "no-" prefix,
  % but "no-no-" will be recognised.
-long_option("no-det-warning-compound-compare-2007-07-17",
+long_option_table("no-det-warning-compound-compare-2007-07-17",
                                      compiler_sufficiently_recent).
-long_option("foreign-enum-switch-fix",
+long_option_table("foreign-enum-switch-fix",
                                      compiler_sufficiently_recent).
-long_option("failing-disjunct-in-switch-dup-fix",
+long_option_table("failing-disjunct-in-switch-dup-fix",
                                      compiler_sufficiently_recent).
-long_option("store-at-ref-impure-2008-09-11",
+long_option_table("store-at-ref-impure-2008-09-11",
                                      compiler_sufficiently_recent).
-long_option("java-export-ref-out",  compiler_sufficiently_recent).
-long_option("java-generics-2010-04-13",
+long_option_table("java-export-ref-out",  compiler_sufficiently_recent).
+long_option_table("java-generics-2010-04-13",
                                      compiler_sufficiently_recent).
-long_option("strip-executable-2014-05-05",
+long_option_table("strip-executable-2014-05-05",
                                      compiler_sufficiently_recent).
-long_option("trace-goal-only-locals-2017-07-05",
+long_option_table("trace-goal-only-locals-2017-07-05",
                                      compiler_sufficiently_recent).
-long_option("no-reserved-addrs",
+long_option_table("no-reserved-addrs",
                                      compiler_sufficiently_recent).
-long_option("builtin-lt-gt-2018-10-08",
+long_option_table("builtin-lt-gt-2018-10-08",
                                      compiler_sufficiently_recent).
-long_option("fixed-contiguity-2018-10-19",
+long_option_table("fixed-contiguity-2018-10-19",
                                      compiler_sufficiently_recent).
-long_option("simplest-msg-2019-09-22",
+long_option_table("simplest-msg-2019-09-22",
                                      compiler_sufficiently_recent).
-long_option("unqual-foreign-enums-in-int-files-2019-10-04",
+long_option_table("unqual-foreign-enums-in-int-files-2019-10-04",
                                      compiler_sufficiently_recent).
-long_option("obsolete-proc-2019-10-23",
+long_option_table("obsolete-proc-2019-10-23",
                                      compiler_sufficiently_recent).
-long_option("type-repn-int3-2020-03-22",
+long_option_table("type-repn-int3-2020-03-22",
                                      compiler_sufficiently_recent).
-long_option("github-85--2020-03-24",
+long_option_table("github-85--2020-03-24",
                                      compiler_sufficiently_recent).
-long_option("foreign-proc-typeinfo-2020-04-08",
+long_option_table("foreign-proc-typeinfo-2020-04-08",
                                      compiler_sufficiently_recent).
-long_option("ushift-2020-04-30",
+long_option_table("ushift-2020-04-30",
                                      compiler_sufficiently_recent).
-long_option("unsigned_lt-2020-05-02",
+long_option_table("unsigned_lt-2020-05-02",
                                      compiler_sufficiently_recent).
-long_option("format-uint-2020-05-23",
+long_option_table("format-uint-2020-05-23",
                                      compiler_sufficiently_recent).
-long_option("mmake-all-2020-05-25",
+long_option_table("mmake-all-2020-05-25",
                                      compiler_sufficiently_recent).
-long_option("unsigned-lt-2020-05-25",
+long_option_table("unsigned-lt-2020-05-25",
                                      compiler_sufficiently_recent).
-long_option("may-ignore-without-warning-2020-08-18",
+long_option_table("may-ignore-without-warning-2020-08-18",
                                      compiler_sufficiently_recent).
-long_option("prolog-is-2020-08-21",
+long_option_table("prolog-is-2020-08-21",
                                      compiler_sufficiently_recent).
-long_option("partial-inst-copy-2021-01-04",
+long_option_table("partial-inst-copy-2021-01-04",
                                      compiler_sufficiently_recent).
-long_option("mantis-bug-529-2021-02-25",
+long_option_table("mantis-bug-529-2021-02-25",
                                      compiler_sufficiently_recent).
-long_option("subtype-opt-2022-02-19",
+long_option_table("subtype-opt-2022-02-19",
                                      compiler_sufficiently_recent).
-long_option("typespec-pragma-2022-07-20",
+long_option_table("typespec-pragma-2022-07-20",
                                      compiler_sufficiently_recent).
-long_option("ushift-2022-12-06",
+long_option_table("ushift-2022-12-06",
                                      compiler_sufficiently_recent).
-long_option("ushift-2022-12-07",
+long_option_table("ushift-2022-12-07",
                                      compiler_sufficiently_recent).
-long_option("strtrie-2022-12-08",
+long_option_table("strtrie-2022-12-08",
                                      compiler_sufficiently_recent).
-long_option("term-pass2-2022-12-28",
+long_option_table("term-pass2-2022-12-28",
                                      compiler_sufficiently_recent).
-long_option("format-2023-01-27",
+long_option_table("format-2023-01-27",
                                      compiler_sufficiently_recent).
-long_option("singleton-2023-06-10",
+long_option_table("singleton-2023-06-10",
                                      compiler_sufficiently_recent).
-long_option("warn-obsolete-transform-2023-07-03",
+long_option_table("warn-obsolete-transform-2023-07-03",
                                      compiler_sufficiently_recent).
-long_option("gen-dep-ints-2023-10-15",
+long_option_table("gen-dep-ints-2023-10-15",
                                      compiler_sufficiently_recent).
-long_option("tscp-2024-02-07",
+long_option_table("tscp-2024-02-07",
                                      compiler_sufficiently_recent).
-long_option("format-2024-02-07",
+long_option_table("format-2024-02-07",
                                      compiler_sufficiently_recent).
-long_option("dym-2024-02-08",
+long_option_table("dym-2024-02-08",
                                      compiler_sufficiently_recent).
-long_option("wne-2024-02-21",
+long_option_table("wne-2024-02-21",
                                      compiler_sufficiently_recent).
-long_option("experiment",           experiment).
-long_option("experiment1",          experiment1).
-long_option("experiment2",          experiment2).
-long_option("experiment3",          experiment3).
-long_option("experiment4",          experiment4).
-long_option("experiment5",          experiment5).
-long_option("allow-ho-insts-as-modes",
+long_option_table("experiment",           experiment).
+long_option_table("experiment1",          experiment1).
+long_option_table("experiment2",          experiment2).
+long_option_table("experiment3",          experiment3).
+long_option_table("experiment4",          experiment4).
+long_option_table("experiment5",          experiment5).
+long_option_table("allow-ho-insts-as-modes",
                                      allow_ho_insts_as_modes).
-long_option("ignore-par-conjunctions",
+long_option_table("ignore-par-conjunctions",
                                      ignore_par_conjunctions).
-long_option("control-granularity",  control_granularity).
-long_option("distance-granularity", distance_granularity).
-long_option("implicit-parallelism", implicit_parallelism).
-long_option("feedback-file",        feedback_file).
-long_option("par-loop-control",     par_loop_control).
-long_option("par-loop-control-preserve-tail-recursion",
+long_option_table("control-granularity",  control_granularity).
+long_option_table("distance-granularity", distance_granularity).
+long_option_table("implicit-parallelism", implicit_parallelism).
+long_option_table("feedback-file",        feedback_file).
+long_option_table("par-loop-control",     par_loop_control).
+long_option_table("par-loop-control-preserve-tail-recursion",
                                      par_loop_control_preserve_tail_recursion).

  %---------------------------------------------------------------------------%
diff --git a/library/getopt.m b/library/getopt.m
index d4c38c8..32feab3 100644
--- a/library/getopt.m
+++ b/library/getopt.m
@@ -90,12 +90,12 @@
  % option, that predicate will report an error when processing a command line
  % that contains that option.
  %
-% Boolean (i.e. bool or bool_special), maybe_int, maybe_string and
-% accumulating options can be negated. Negating an accumulating option
-% empties the accumulated list of strings. Single-character options
-% can be negated by following them with another `-', e.g. `-x-' will negate
-% the `-x' option. Long options can be negated by preceding them with `--no-',
-% e.g. `--no-foo' will negate the `--foo' option.
+% Boolean (i.e. bool or bool_special), maybe_int, maybe_string,
+% maybe_string_special and accumulating options can be negated. Negating an
+% accumulating option empties the accumulated list of strings. Single-character
+% options can be negated by following them with another `-', e.g. `-x-' will
+% negate the `-x' option. Long options can be negated by preceding them with
+% `--no-', e.g. `--no-foo' will negate the `--foo' option.
  %
  % Note that arguments following an option may be separated from the option by
  % either whitespace or the equals character `=', so that e.g. `--foo 3' and


More information about the reviews mailing list