Add string.is_all_alnum/1.

library/string.m:
	Add a predicate for testing whether a string contains
	only alphabetic characters or digits.

	Avoid excessive module qualification.

NEWS:
	Announce the addition.
extras/net: Fix syntax error.

sockets.m:
    Fix syntax error.
Remove documentation for --enable-dotnet-grades from configure.

The presence of the option --enable-dotnet-grades in the configure options
is confusing users.  Hide the documentation for it.

Delete the configure option --enable-minimal-hlc-trail-install which was
only ever added as a shortcut for members of the G12 project.  It's just
cluttering things up now.

configure.ac:
.INSTALL.in:
	As above.
Wrap some too-long lines in the library.
Record each kind of error when reading in files.

compiler/prog_io_error.m:
    Replace the enum that used to record only whether we found no errors,
    some nonfatal errors or some fatal errors, with a type that records
    just what kinds of errors we found. Document each kind of error.

compiler/prog_io.m:
    Record any errors using the new type. In some cases, we used to
    forget fatal errors after finding nonfatal ones; now we don't.

compiler/read_modules.m:
    Do not generate error messages about not being able to open a file
    if we *could* open the file, but found other fatal errors inside it.

    Factor out some common code.

compiler/intermod.m:
    Ignore the error of not being able to open .opt files, but do not
    ignore any other errors inside them. This fixes a long-standing piece
    of strange-looking code.

compiler/module_imports.m:
    Do not ignore old fatal errors if reading a new interface file
    gets some new nonfatal errors. This fixes a long-standing XXX.

compiler/write_module_interface_files.m:
    Do not ignore fatal errors when considering whether to write out interface
    files. This fixes a long-standing XXX.

compiler/modules.m:
    Generate better error messages for fatal errors inside modules
    other than not being able to open the module.

compiler/deps_map.m:
compiler/make.module_dep_file.m:
compiler/mercury_compile.m:
compiler/module_deps_graph.m:
compiler/recompilation.check.m:
compiler/trans_opt.m:
compiler/write_deps_file.m:
    Conform to the change in prog_io_error.m.
Consistently use set.is_empty and set.is_non_empty.

compiler/*.m:
deep_profiler/*.m:
    As above.

library/set.m:
library/set_bbbtree.m:
library/set_ctree234.m:
library/set_ordlist.m:
library/set_tree234.m:
library/set_unordlist.m:
    Add is_non_empty to the set modules that did not already have it.
    (Some did, some didn't.)

    Make the documentation of empty, is_empty, non_empty and is_non_empty
    consistent.
Align the Vim syntax file to match the Mercury language more closely

vim/README:
    Removed warning about ~/.vim/after/filetype.vim,

    Add utf-8 encoding detection.

    Added more details to the Vim README and

vim/after/filetype.vim:
vim/ftdetect/mercury.vim.
    Renamed file type detection for Mercury to ftdetect/mercury.vim.  This
    allows one to install the vim configuration files with a single command:
    $ cp -r vim/ ~/.vim

vim/syntax/mercury.vim:
    Fixed escaping of the escape character in strings,
vim/README fixes.

+ Expand tabs to spaces.
+ "set modeline" is optional.

vim/README:
    As above.
Update .gitignore files.

Update .gitignore files to ignore Unix executables and intermediate files.

extras/.gitignore:
    ignore *.beams

extras/cgi/.gitignore:
extras/gator/.gitignore:
extras/graphics/mercury_cairo/tutorial/.gitignore:
extras/logged_output/.gitignore:
extras/monte/.gitignore:
extras/odbc/.gitignore:
extras/posix/samples/.gitignore:
extras/quickcheck/.gitignore:
extras/quickcheck/tutes/.gitignore:
extras/references/samples/.gitignore:
    ignore executable(s)

extras/references/tests/.gitignore:
extras/trailed_update/tests/.gitignore:
    ignore test *.res and *.out files,
    ignore executable

extras/windows_installer_generator/sample/.gitignore:
samples/concurrency/dining_philosophers/.gitignore:
samples/concurrency/midimon/.gitignore:
    ignore executables

tests/hard_coded/.gitignore:
    ignore *.o and *.obj object files
Clean up library/string.m.

library/string.m:
    Avoid unnecessary use of higher order code in the implementation of
    string.format. Avoid the unnecessary insertion of empty manifest strings
    between actual format conversions.

    Represent the optional width and precision in string.format as integers,
    not strings, since the strings take up more space and require more time
    to create and to process.

    Simplify the code implementing word_wrap.

    Give some variables better names.

    Clarify some documentation.

    Call unexpected instead of error in cases where the source of a problem
    can only be a software bug inside string.m, and not bad input supplied
    from outside of it.

    Don't mention the arity of a predicate that is the source of an exception,
    since the predicate's identity is unambiguous even without the arity,
    and since other exceptions also don't mention arities.

library/require.m:
    Add two-argument versions of error/1 and func_error/1, to allow
    the name of the predicate and the error message to be passed separately,
    possible with the first being specified as $pred. string.m had several
    places where these were being appended on the fly.

library/char.m:
    Clarify some code.

NEWS:
    Mention the additions to require.m.
Carve two submodules out of string.m.

There are no algorithmic changes, though there are some name changes.

library/string.format.m:
    New submodule of string.m. Contains the parts of old string.m
    that implement string.format. About 1500 lines.

library/string.to_string.m:
    New submodule of string.m. Contains the parts of old string.m
    that implement string.string, string.string_ops and
    string.string_ops_noncanon. About 500 lines.

library/string.m:
    Replace the code that is now in the new submodules with includes
    of those submodules.

library/library.m:
    List the two new submodules. Fix some bitrot about where
    new library modules may need to be listed.

doc/Mmakefile:
    Do not document the two new submodules, since they are implementation
    details.
Generate a specific warning for X = f(X).

This warning is for when X is ground. When X is free (or otherwise nonground),
such unifications have always gotten an error.

compiler/mode_errors.m:
    Add a warning type for occur check violations with ground vars.

    Fix the grammar in the other two warnings generated by mode analysis.

compiler/modecheck_unify.m:
    Generate the new warning when appropriate.

    To make this possible, rewrite a previously 280-line predicate
    that was hard to understand because of its structure as well as its
    length into a smaller, better structured predicate less than half the size
    (a) by moving coherent pieces of it out into other predicates,
    some of which are now called more than once, thus reducing code
    duplication, and (b) by avoiding redundant work, to wit, optimizing
    the form of a unification when we have already decided that it has
    a mode error, and thus cannot be scheduled now.

compiler/prog_mode.m:
    Add a det version of an existing predicate.

compiler/inst_util.m:
    Remove a comment on a predicate implementation that duplicates the
    comment on the predicate's declaration.

compiler/modecheck_util.m:
    Minor fixes of comments.

compiler/superhomogeneous.m:
    Fix some bit rot: update the name of a predicate to match
    the name of the data it works on, which was changed a few
    years ago.

tests/invalid/occurs.err_exp:
tests/invalid/qualified_cons_id2.err_exp:
tests/warning/simple_code.exp:
tests/warning/unify_f_g.exp:
    Conform to the error message format we generate after the change
    to mode_errors.m.

tests/warning/unify_x_f_x.{m,exp}:
    A new test case to test the new functionality.

tests/warning/Mmakefile:
    Enable the new test case.
A step towards compiling away format strings.

library/string.format.m:
    Switch the representation of flags from a list of chars
    to a tuple of enums. This should make it easier to construct flags
    at compile time.

    Factor out the commonalities in handling the different format specifiers
    for printing unsigned ints, and for printing floats. This gives us
    predicates (such as gen_format_float) that format_call.m can generate
    calls to.

    Give some predicates, types and variables more meaningful names.

    Reorder some predicates' arguments to conform with the usual convention
    of inputs before outputs.

    Remove some unnecessary #includes in C code.

    Add XXXs as reminders of opportunities for further improvements.

library/string.m:
    Fix white space.
Speed up string.format for integers.

library/string.format.m:
    We used to convert Mercury ints to strings by doing arithmetic on
    (arbitrary precision) integers. This diff changes things so we now
    compute only one one digit this way; the rest we compute using
    arithmetic on ints, not integers. In most cases, we should be able
    to avoid doing arithmetic on arbitrary-precision integers at all,
    but that is a more involved change.
Simplify the code paths for formatting integers.

library/string.format.m:
    Instead of deriving the settings of some parameters from the kind
    of unsigned integer conversion requested and then using those parameters,
    use the kind of requested conversion directly. It turned out that some
    of those parameters were being used only in some cases, but of course
    they were being set in all cases.

    Do not test for the same condition twice in a row. If you decide you
    need to reserve room for a prefix, why test again (using the same
    condition) whether you need to add the prefix?

    Avoid using arbitrary precision arithmetic if fixed arithmetic will do
    on all platforms that are at least 16 bit.

    Give some predicates better names.
Factor out commonalities in formatting floats.

library/string.format.m:
    As above.
Add two new options for querying the compiler.

Add two new options for querying the compiler.  The first new option,
--output-target-arch, prints the target architecture.  This is useful in
situations where you are working directly with the contents of the Mercury
subdirectory and --use-grade-subdirs is enabled.  (The directory names
generated by --use-grade-subdirs include the target architecture.) The second
new option, --output-class-dir, deals with a more specific instance of the
above.  It prints out the name of the directory in which the Mercury compiler
places generated Java class files.

Replace the use of 'fullarch' by 'target_arch' throughout the compiler.
(We still currently support '--fullarch' as a synonym for '--target-arch'
but that too will eventually be dropped.)

compiler/options.m:
	Add the new options.

compiler/mercury_compile.m:
	Implement the new options.

	s/fullarch/target_arch/

	Add an XXX comment about an inaccurate error message.

compiler/handle_options.m:
compiler/compile_target_code.m:
compiler/file_names.m:
compiler/make.program_target.m:
	Conform to the above changes.

doc/user_guide.texi:
	Document the new options.
Fix a typo in my last change.

doc/user_guide.texi:
	Fix a typo.
Address review comments.

compiler/options.m:
doc/user_guide.texi:
	Address review comments from Zoltan.
Add require_switch_arms_{det,semidet,...} to the language.

The new construct looks like this:

    require_switch_arms_det [C] (
        (
            C = 'a',
            ... compute Out ...
        ;
            C = 'b',
            ... compute Out ...
        )
    )

If any of the goals computing Out are not det, the compiler will generate
an error message. The det at the end of the keyword can be replaced
by any of the other seven determinisms, though I don't think either
require_switch_arms_failure or require_switch_arms_erroneous will see much use.

This diff adds only the implementation. I will add the documentation
and the NEWS item after we all had a chance to install this diff and
try it out.

compiler/hlds_goal.m:
    Add a scope representing this kind of goal in the HLDS.

compiler/prog_item.m:
    Add a goal expression for this kind of goal in the parse tree.

compiler/prog_io_goal.m:
    Look for the new kind of goal expression in terms when creating
    the parse tree.

    Factor out some commonalities between the parsing of the new goal
    expression and existing types of goal expressions.

compiler/goal_expr_to_goal.m:
    Convert the new kind of goal expression to the new scope in the HLDS.

compiler/det_report.m:
    Implement the checks that the new goal type calls for.

    Factor out some commonalities between the implementation of the new goal
    type and existing goal types.

    Move the types and predicates dealing with comparisons of determinisms
    from here to prog_data.m, due to the sort-of-bugfix to modecheck_call.m.

compiler/prog_data.m:
    Move the types and predicates dealing with comparisons of determinisms
    from det_report.m to here. The old code for this was intended for only one
    requirement, and did not deal well with comparisons of two determinisms
    in which each determinism makes an assertion the other does not make.
    Create a way to represent such comparison results.

compiler/modecheck_call.m:
    When deciding which mode of a procedure to call, we prefer determinisms
    that make more assertions about solution counts. However, when comparing
    incomparable determinisms (such as semidet vs multi, each of which makes
    an assertion the other doesn't), the algorithm chose based solely
    on the ORDER of the modes. We now explicitly prefer modes that promise
    lower maximum solution counts, giving less importance to cannot_fail
    assertions.

compiler/*.m:
    Conform to the change to hlds_goal.m or prog_item.m.

library/ops.m:
    Add the new keywords as operators.

tests/hard_coded/require_scopes.{m,exp}:
    Extend this test case to test the new construct in the absence of errors.

tests/invalid/require_scopes.{m,exp}:
    Extend this test case to test the new construct in the presence of errors.