Also, throw software_error/1 exceptions rather than directly throwing strings
in a few spots.
Undo special Ralph-style formatting.
library/*.:
As above.
tests/hard_coded/array2d_from_array.exp:
tests/hard_coded/array2d.exp:
tests/hard_coded/test_injection.exp:
Update to conform with the above change.
compiler/decide_type_repn.m:
New module for computing the set of type representation items
to put into the interface files of a module. For now, it generates
this information only for .int3 files.
compiler/parse_tree.m:
compiler/notes/compiler_design.html:
Add the new module to the parse_tree package.
compiler/comp_unit_interface.m:
Invoke the new module to add type representation items to .int3 files
if the experiment option has the right value. Give it the information
it needs to do its job.
compiler/add_foreign_enum.m:
Export a predicate for use by decide_type_repn.m. Maybe eventually
it should be *moved* to decide_type_repn.m.
compiler/hlds_data.m:
compiler/prog_data.m:
Change the representation of lists of constructors in a type
from lists, which can be empty, with one_or_more, which cannot.
This encodes the invariant that a type constructor cannot have
zero data constructors in the structure of the type.
compiler/prog_item.m:
Change the representation of lists of constructors in a type
from lists, which can be empty, with one_or_more, which cannot.
This encodes the invariant that a type constructor cannot have
zero data constructors in the structure of the type.
Include information about assertions in type representation items
about foreign types.
Do not record whether a type whose representation item says its values
are guaranteed to be word aligned is a Mercury type or a foreign type.
We generate such items only for Mercury types; for foreign types,
their assertions will contain that information. We need this separation
because when we generate .int3 files, we don't the backend that we will
eventually generate code for, and thus do not know whether a given
foreign type declaration is in effect on that backend or not.
compiler/parse_tree_out.m:
Fix the printing of type representation items.
compiler/prog_type.m:
Conform to the changes above, and delete an unused predicate.
compiler/parse_type_repn.m:
Factor out some common code.
Fix an old bug about yes/no vs du_repn/no_du_repn.
Conform to the changes above.
compiler/parse_pragma.m:
Export a predicate for parse_type_repn.m.
Note a possible improvement.
Conform to the changes above.
compiler/add_special_pred.m:
compiler/add_type.m:
compiler/check_typeclass.m:
compiler/det_report.m:
compiler/du_type_layout.m:
compiler/equiv_type.m:
compiler/hlds_out_module.m:
compiler/inst_check.m:
compiler/intermod.m:
compiler/mode_util.m:
compiler/module_qual.qualify_items.m:
compiler/parse_tree_out_pragma.m:
compiler/parse_type_defn.m:
compiler/recompilation.check.m:
compiler/recompilation.usage.m:
compiler/resolve_unify_functor.m:
compiler/special_pred.m:
compiler/switch_util.m:
compiler/table_gen.m:
compiler/term_norm.m:
compiler/type_util.m:
compiler/untupling.m:
compiler/unused_imports.m:
compiler/xml_documentation.m:
Conform to the changes above.
compiler/simplify_goal_ite.m:
Add a comment.
compiler/canonicalize_interface.m:
compiler/get_dependencies.m:
Do not abort when seeing type representation items.
compiler/mmakefiles.m:
Delete a predicate that this diff adds to list.m.
library/list.m:
Add new predicates to convert from one_or_more to list
and vice versa.
NEWS:
Announce the new predicates.
library/bimap.m:
library/map.m:
library/tree234.m:
Expand a comment.
Discussion of these changes can be found on the Mercury developers
mailing list archives from June 2018.
COPYING.LIB:
Add a special linking exception to the LGPL.
*:
Update references to COPYING.LIB.
Clean up some minor errors that have accumulated in copyright
messages.
library/assoc_list.m:
library/bag.m:
library/bimap.m:
library/calendar.m:
library/char.m:
library/digraph.m:
library/list.m:
library/map.m:
library/multi_map.m:
library/psqueue.m:
library/rbtree.m:
library/string.m:
library/term.m:
library/tree234.m:
library/type_desc.m:
library/univ.m:
library/varset.m:
Replace most occurrences of "abort" with "throw an exception".
Slightly improve the documentation for map.search, map.lookup,
map.inverse_search.
library/deconstruct.m:
Replace "abort" with "runtime abort" where that is meant.
library/bimap.m:
library/bitmap.m:
library/calendar.m:
library/char.m:
library/cord.m:
library/deconstruct.m:
library/diet.m:
library/dir.m:
library/eqvclass.m:
library/map.m:
library/pprint.m:
library/pqueue.m:
library/stream.string_writer.m:
library/term_conversion.m:
library/time.m:
library/type_desc.m:
library/version_array.m:
library/version_array2d.m:
library/version_bitmap.m:
library/version_hash_table.m:
Fix inconsistencies between (a) the order in which functions and predicates
are declared, and (b) the order in which they are defined.
In most of these modules, either the order of the declarations
or the order of the definitions made sense, and I changed the other
to match. In a few modules, neither made sense, so I changed *both*
to an order that *does* make sense (i.e. it has related predicates
together).
In some places, put dividers between groups of related
functions/predicates, to make the groups themselves more visible.
In some places, fix comments or programming style, give some auxiliary
(non-exported) predicates better names, or delete some unneeded module
qualifications.
In some places, have the function form of a procedure forward
the work to the predicate form, instead of vice versa, where this is
more natural (usually because it allows the use of state variables).
However, this is the only kind of "algorithmic" change in this diff;
the rest is just moving code around.
NOTE: this change does not affect the io module -- I've left that for a
separate change.
library/*.m:
As per the recent change to the coding standard, avoid module
qualification in library interfaces where possible.
Reformat declarations and descriptive comments to better utilise
any space freed up by the above.
library/bimap.m:
Add a predicate for testing semantic equality of bimaps.
library/assoc_list.m:
Add fold_values with two or three accumulator arguments.
library/int.m:
Add fold_{up,down} with three accumulator arguments.
library/map.m:
library/tree234.m;
Add foldl_values with two or three accumulator arguments.
NEWS:
Announce the above additions.
Reformat the existing changes to the pqueue module slightly
library/bimap.m:
Add the above function.
Fix the wording of a function description.
NEWS:
Add a section for 13.05.1 and mention the above change in it.
Estimated hours taken: 8
Branches: main
A bunch of individually small changes to speed up the compiler when compiling
training_cars_full.m. Altogether, the changes speed up the compiler on that
task by a bit more than 11% when the target grade is asm_fast.gc, and by a bit
more than 7% when the target grade is hlc.gc. (Several of the changes affect
the code that optimizes the LLDS; we don't have corresponding optimizers
for the MLDS.)
compiler/c_util.m:
Specialize the code that prints out quoted strings for the target
language. We don't want to check the target language during
the conversion of EVERY SINGLE CHARACTER.
compiler/dead_proc_elim.m:
When we analyze the module for inlining, we are only after the
use counts of procedures. We do not need to traverse ground structures
to get those counts.
compiler/dupelim.m:
Do the search and insertion in the standardized code sequence map
in one pass.
compiler/global_data.m:
compiler/ml_global_data.m:
Do the search and insertion in the scalar data map in one pass.
library/bimap.m:
Add a search_insert predicate to make possible the changes in
{ml_,}global_data.m.
NEWS:
Mention the new predicate in bimap.m.
compiler/inst_match.m:
Do searches and insertions in sets of expansions in one pass.
Highlight discrepancies between comments on the declarations
of two predicates and comments on their code.
compiler/llds_out_global.m:
compiler/post_typecheck.m:
Reorder the bodies of some test conditions to put the cheaper and
more-frequently-failing tests first.
compiler/labelopt.m:
compiler/opt_util.m:
Do not require opt_util to return a list of code addresses that
labelopt then throws away; allow opt_util.m not to gather those
addresses in the first place (if the unused_args optimization
is applied to it, which it is by default.)
In opt_util.m, make an unnecessarily-exported predicate private.
compiler/prog_data.m:
Use predicates in varset.m that do directly what we want, instead
of using a different predicate and then post-processing its output.
(The code was originally written before the directly useful predicate
in varset.m was available.)
compiler/type_util.m:
Specialize the frequently occurring case of no typeclass constraints
at all.
compiler/typecheck_info.m:
Give the field names of some types identifying prefixes.
Make a function symbol's name more meaningful.
compiler/typecheck.m:
compiler/typecheck_errors.m:
Conform to the changes in typecheck_info.m.
Branches: main
Add functions for creating singleton maps (of various sorts) to the standard
library. The rationale for this to replace the following sequence of code,
which occurs a lot throughout the Mercury system:
map.init(Map0),
map.det_insert(SomeKey, SomeValue, Map0, Map)
library/bimap.m:
library/injection.m:
library/map.m:
library/rbtree.m:
library/tree234.m:
Add the new function singleton/2 that takes single key-value
pair as arguments and returns a new map.
compiler/disj_gen.m:
Avoid ambiguity in a spot.
NEWS:
Announce the additions.
Branches: main
Change the argument order of many of the predicates in the map, bimap, and
multi_map modules so they are more conducive to the use of state variable
notation, i.e. make the order the same as in the sv* modules.
Prepare for the deprecation of the sv{bimap,map,multi_map} modules by
removing their use throughout the system.
library/bimap.m:
library/map.m:
library/multi_map.m:
As above.
NEWS:
Announce the change.
Separate out the "highlights" from the "detailed listing" for
the post-11.01 NEWS.
Reorganise the announcement of the Unicode support.
benchmarks/*/*.m:
browser/*.m:
compiler/*.m:
deep_profiler/*.m:
extras/*/*.m:
mdbcomp/*.m:
profiler/*.m:
tests/*/*.m:
ssdb/*.m:
samples/*/*.m
slice/*.m:
Conform to the above change.
Remove any dependencies on the sv{bimap,map,multi_map} modules.
Branches: main
Add semidet modes with (mostly-)unique accumulators for many of the fold-style
predicates in the standard library that didn't already have such modes.
library/bimap.m:
library/cord.m:
library/list.m:
library/map.m:
library/tree234.m:
As above.
NEWS:
Announce the above additions.
Estimated hours taken: 1
Branches: main
Improve support for mostly-uniqueness in the standard library.
library/bimap.m:
library/list.m:
library/map.m:
library/set.m:
library/tree234.m:
Add modes to fold style predicates with mostly-unique accumulators.
Add semidet versions of fold style predicate with unique accumulators.
Re-order the mode declarations for the above predicates; in a lot
of cases the ordering made it difficult to see if a required mode
was actually present. The new ordering is by determinism and then
by uniqueness.
NEWS:
Announce the additions.
Estimated hours taken: 1
Branches: main
Various minor cleanups and syntax updates for the standard library.
There are no changes to any algorithms.
library/injection.m:
library/set.m:
library/sparse_bitset.m:
Use promise_equivalent_clauses where appropriate.
library/set_ordlist.m:
library/set_unordlist.m:
Convert these module to 4-space indentation:
Convert these module to 4-space indentation
library/*.m:
Convert some if-then-elses into switches.
Remove unnecessary module qualification - this is related
mainly to the breakup of std_util and the fact that on
the 0.13 branche we had two versions of the all-solutions
predicates.
Various other style cleanups.
vim/syntax/mercury.vim:
Highlight promise_equivalent_clauses appropriately.
Estimated hours taken: 0.2
Branches: main, release
library/*.m:
Improve the library reference manual by formatting the beginning of
library modules consistently.
library/integer.m:
Fix some bad indentation.
Estimated hours taken: 18
Branches: main
Move the univ, maybe, pair and unit types from std_util into their own
modules. std_util still contains the general purpose higher-order programming
constructs.
library/std_util.m:
Move univ, maybe, pair and unit (plus any other related types
and procedures) into their own modules.
library/maybe.m:
New module. This contains the maybe and maybe_error types and
the associated procedures.
library/pair.m:
New module. This contains the pair type and associated procedures.
library/unit.m:
New module. This contains the types unit/0 and unit/1.
library/univ.m:
New module. This contains the univ type and associated procedures.
library/library.m:
Add the new modules.
library/private_builtin.m:
Update the declaration of the type_ctor_info struct for univ.
runtime/mercury.h:
Update the declaration for the type_ctor_info struct for univ.
runtime/mercury_mcpp.h:
runtime/mercury_hlc_types.h:
Update the definition of MR_Univ.
runtime/mercury_init.h:
Fix a comment: ML_type_name is now exported from type_desc.m.
compiler/mlds_to_il.m:
Update the the name of the module that defines univs (which are
handled specially by the il code generator.)
library/*.m:
compiler/*.m:
browser/*.m:
mdbcomp/*.m:
profiler/*.m:
deep_profiler/*.m:
Conform to the above changes. Import the new modules where they
are needed; don't import std_util where it isn't needed.
Fix formatting in lots of modules. Delete duplicate module
imports.
tests/*:
Update the test suite to confrom to the above changes.
Estimated hours taken: 1
Branches: main
library/*.m:
Replace __ with . as the module qualifier everywhere.
tests/hard_coded/test_injection.exp:
Replace __ with . as the module qualifier in expected exceptions.
Estimated hours taken: 25
Branches: main
Package the type_info_varmap and typeclass_info_varmap types into an ADT
called rtti_varmaps. There are two main purposes for this:
- We wish to extend this set of maps with new maps. Doing this
will be a lot easier and less error prone if all of the maps are
packaged in a single data structure.
- Any new maps that we add may contain redundant information that
just makes searching the maps more efficient. Therefore they must
be kept consistent with the existing maps. Having all the maps
inside an ADT makes it easier to ensure this.
This change also includes two extensions to the maps. First, the
typeclass_info_map is made reversible so that it is possible to efficiently
look up the constraint for a given typeclass_info variable. Second, a new
map from prog_vars to types makes it possible to efficiently look up the
type that a given type_info variable is for. These two changes mean that
it is no longer necessary to consult the argument of type_info/1 or
typeclass_info/1 to find this information. (We still do put that information
there, though; changing the RTTI is left for a separate change.)
compiler/hlds_pred.m:
Move items relating to type_infos and typeclass_infos into a section
of their own.
Add a type `rtti_var_info' to hold information about the contents
of a type_info or typeclass_info variable.
Define the rtti_varmaps abstract data type. This data structure
consists of the type_info_varmap and the typeclass_info_varmap.
Add a new map, type_info_type_map, which is like the inverse
to the type_info_varmap. The difference is that the latter can
point to locations that are inside a typeclass_info variable,
whereas the former only refers to type_info variables. Note that
the combined maps do not form a bijection, or even an injection,
since it is possible for two different type variables to point to
the same location (that is, if they are aliased).
Make the typeclass_info_varmap reversible, by using the new module
injection.m. Unlike the type_info_varmap, this map is always
injective since the same typeclass_info cannot be used for two
different constraints.
The predicates rtti_det_insert_type_info_locn and set_type_info_locn,
which update the type_info_varmap, contain sanity checks to ensure
that only type variables that have already been registered with
the type_info_type_map are used, and that the information in both
maps is consistent.
Use the rtti_varmaps structure in proc_info and clauses_info, in
place of type_info_varmap and typeclass_info_varmap.
compiler/polymorphism.m:
Remove polymorphism__type_info_or_ctor_type/2 and
polymorphism__typeclass_info_class_constraint/2, to ensure that
nobody tries to use the information in the type argument. Replace
them with two similar predicates that test if a type is type_info
or typeclass_info, but that don't return the argument.
Ensure that the new type_info_type_map in the rtti_varmaps is kept
up to date by threading the rtti_varmaps through a few more places.
Some of these places are exported, so this part of the change
affects other modules as well.
Fix a comment that referred to a non-existent predicate.
compiler/type_util.m:
Remove the predicates apply_substitutions_to_var_map/5 and
apply_substitutions_to_typeclass_var_map/5. The functionality
is now provided by the new ADT.
compiler/cse_detection.m:
Rewrite update_existential_data_structures/4 to use the interface
provided by rtti_varmaps. The algorithm for doing this has changed
in the following ways:
- The first pass, which builds a map from changed locations
in the first branch to the tvars concerned, is modified
slightly to traverse over the keys instead of over key-value
pairs.
- The second pass, which previously calculated the induced
type substitution and reconstructed the type_info_varmap
now only does the former.
- Applying the prog_var transformation and the induced type
substitution is done at the end, using the interface to
rtti_varmaps.
compiler/goal_util.m:
Rewrite goal_util__extra_nonlocal_typeinfos/6 to avoid the need
for using map__member/3 on the typeclass_info_varmap (about which
the existing comments say "this is probably not very efficient..."),
and to be more efficient in general.
Previously, we nondeterministically generated non-local type vars
and then tested each constraint to see if it had the type var in it.
Now, we go through each constraint one at a time and check if any of
the type variables in it are non-local. This is more efficient
because we only need to find one non-local type in order to include
the typeclass_info in the non-locals -- the remaining (duplicate)
solutions are pruned away.
compiler/higher_order.m:
Use the new maps instead of looking at the arguments of type_info/1
and typeclass_info/1 types. We plan to remove this information
from type_info and typeclass_info types in future.
Previously, this module used the type argument in order to update
the varmaps when the curried arguments of a higher order call are
added as arguments to the procedure in which the call occurs.
We now look up this information at the point where the curried arg
variables are known, and store this information in higher_order_arg
alongside the types where it used to be stored. This structure is
threaded through to the place where the information is needed.
Fix a cut and paste bug in higher_order_arg_depth/1. It was
previously calling higher_order_args_size/1 in the recursive
call, instead of calling higher_order_args_depth/1.
compiler/inlining.m:
In inlining__do_inline_call, apply the substitutions to the entire
rtti_varmaps structure, not just to the type_info_varmap. (XXX Is
there a good reason why the substitution should _not_ be applied
to the typeclass_info varmap?)
compiler/magic_util.m:
Avoid using polymorphism__type_info_or_ctor_type/2 and
polymorphism__typeclass_info_class_constraint/2, as these are
no longer supported.
compiler/*.m:
Straightforward changes to use the new ADT.
library/injection.m:
New library module. This provides an `injection' type which is
similar to the existing `bimap' type in that it implements
back-to-back maps, but doesn't have such stringent invariants
imposed. In particular, the reverse map is not required to be
injective.
This type is used to model the relationship between prog_constraints
and program variables that hold typeclass_infos for them. Namely,
the typeclass_info for a constraint can be held in two different
variables, but one variable can never hold the typeclass_info for
two distinct constraints.
library/library.m:
Add the new library module.
library/list.m:
Add list__foldl_corresponding and list__foldl2_corresponding, which
traverse two lists in parallel, which one or two accumulators, and
abort if there is a length mismatch.
NEWS:
Mention the changes to the standard library.
Estimated hours taken: 3
Branches: main, release
library/bimap.m:
Document the procedures in this module much more then
we currently do. In particular, note conditions for
which procedure fail or throw exceptions more carefully
than we previously did.
Change bimap.from_assoc_list so that it fails if the
association list does not implicitly define a bijection.
Previously, it has been possible to use this to create
bimaps that were not bijective. Add a det version
called bimap.det_from_assoc_list.
Add bimap.foldl2 and bimap.foldl3.
Alter the ordering of predicate and function versions
of the same procedure where they don't conform to
our coding standard.
Remove the comment at the head of the file that says
that the implementation is a pair of maps. Since the
type has been abstract for a while now, the details
of it's implementation are not useful.
Add an end_module declaration to this module.
Estimated hours taken: 2
Branches: main, release
The current implementation of of bimap.set/4 breaks if you try
to set a Key-Value pair that have already been mapped to each other.
library/bimap.m:
Fix the implementation of bimap.set/4.
tests/hard_coded/bimap_set_bug.m:
tests/hard_coded/bimap_set_bug.exp:
Add a test for the above bug.
Estimated hours taken: 3
Branches: main, version-0_12-branch
library/array.m:
library/array2d.m:
library/assoc_list.m:
library/bag.m:
library/benchmarking.m:
library/bimap.m:
library/bintree_set.m:
library/bitmap.m:
library/bool.m:
library/builtin.m:
library/cord.m:
library/float.m:
library/graph.m:
library/group.m:
library/hash_table.m:
library/int.m:
library/lexer.m:
library/list.m:
library/map.m:
library/math.m:
library/multi_map.m:
library/ops.m:
library/parser.m:
library/rbtree.m:
library/set.m:
library/stack.m:
library/store.m:
library/string.m:
library/time.m:
Minor reformatting; added some renamed preds and funcs to improve
consistency of naming in the library; removed some preds and types that
have been marked obsolete since 0.11.
Estimated hours taken: 3.5
Branches: main
Make the positioning of descriptive comments conform
to the coding standard for the following library modules.
Convert preds to predmode syntax where possible.
Make the ordering of related predicates and functions
conform to the coding standard, where the descriptive
comment makes it possible to do that.
Other minor changes are listed below.
library/bimap.m:
Fix capitalisation of a few comments.
library/dir.m:
s/throw an exception/throws an exception/.
library/exception.m:
Fix the comment about the exception_result/1 type.
There is only one type and an inst following the comment.
library/map.m:
Remove the unique modes for map.set/4, map.delete/3 and
map.delete_list/3.
library/rbtree.m:
Remove the unique modes for rbtree.set/4, rbtree.delete/3,
rbtree.remove/4, rbtree.remove_smallest/4 and rbtree.remove_largest/4.
library/tree234.m:
Remove left over unique modes for preds.
library/set.m:
XXX the ordering of procedures in this module is a bit strange.
library/set_bbbtree.m:
library/set_unordlist.m:
Remove various unique modes for set operations like
delete/3. (Some of these were commented out anyway).
library/term_to_xml.m:
Fix a spot where line width exceeded 79 characters.
library/array.m:
library/assoc_list.m:
library/random.m:
library/multi_map.m:
library/pqueue.m:
library/queue.m:
library/bool.m:
library/char.m:
library/construct.m:
library/counter.m:
library/deconstruct.m:
library/eqvclass.m:
library/gc.m:
library/io.m:
library/sparse_bitset.m:
library/stack.m:
library/std_util.m:
library/store.m:
library/string.m:
library/term.m:
library/term_io.m:
library/type_desc.m:
library/varset.m:
As above.
Estimated hours taken: 1
Branches: main
library/bimap.m:
Add some predicates to move the functionality of this module closer
to that of map.m:
det_insert
forward_search
reverse_search
from_corresponding_lists
map_keys
map_values
det_insert_from_assoc_list
det_insert_from_corresponding_lists
set_from_assoc_list
set_from_corresponding_lists
delete_key
delete_value
delete_keys
delete_values
overlay
apply_forward_map_to_list
apply_reverse_map_to_list
foldl
Add function forms of all predicates in the module for which this makes
sense, both the new ones and some old ones.
Make the implementation of the bimap type private; add two functions,
forward_map and reverse_map, to replace the explicit type definition.
Fix the implementation of bimap__set: it wasn't ensuring the bijective
property.
NEWS:
Mention the new predicates and functions.
Estimated hours taken: 6
library/pqueue.m:
library/assoc_list.m:
library/getopt.m:
library/bag.m:
library/bimap.m:
library/bintree.m:
library/bintree_set.m:
library/bt_array.m:
library/eqvclass.m:
library/graph.m:
library/group.m:
library/queue.m:
library/rbtree.m:
library/stack.m:
library/term.m:
library/varset.m:
library/tree234.m:
library/relation.m:
library/set.m:
library/set_bbbtree.m:
library/set_ordlist.m:
library/set_unordlist.m:
Ralph Becket <rwab1@cam.sri.com>'s changes to add functions for
the remaining output det predicates in a number of modules in the
standard library. Basically, for each
:- pred f(in, ..., in, out) is det.
he has added the declaration
:- func f(in, ..., in) = out.
and definition
f(X1, ..., Xn) = Y :-
f(X1, ..., Xn, Y).
The changes were made using a mostly automatic process.
Estimated hours taken: 0.5
library/*.m:
compiler/*.m:
Undo Zoltan's bogus update of all the copyright dates.
The dates in the copyright header should reflect the years
in which the file was modified (and no, changes to the
copyright header itself don't count as modifications).
Estimated hours taken: 3
Enable --warn-interface-imports by default. This was turned off while
list and term were defined in mercury_builtin.m, since it caused many
warnings.
Fix all the unused interface imports that have been added since then.
compiler/options.m:
Enable --warn-interface-imports by default.
compiler/module_qual.m:
Fix formatting inconsistencies with module names in warning
messages. (".m" was not appended to module names if there was
only one module).
compiler/*.m:
library/*.m:
tests/invalid/type_loop.m:
tests/warnings/*.m:
Remove usused interface imports, or move them into
implementation (mostly bool, list and std_util).
varset:
Add some new predicates for the excess assignment pass.
std_util, assoc_list:
Move predicates for associative lists to a new module.
*.m:
Import assoc_list.
library/*.m:
Improve the documentation.
Add a "Stability: low/medium/high" comment to all modules,
which describes the stability of the interface to that module.
ops.m:
Add `:' as an infix operator.
require.m:
Implement require/1, since higher-order predicates now work.
term.m:
Use the type `comparison_result' from mercury_builtin.m,
rather than defining an identical type `comparison'.
Makefile.mercury:
Override the MERCURY_LIB_OBJS variable when invoking ml.
This avoids some bootstrapping problems.
Also, add mercury_compile.nu.
Makefile.common:
Bump NU-Prolog's -u option up to 2000 (8M), to avoid some memory
problems.
array.nl, bintree.nl, char.nl, dir.nl, globals.nl, list.nl, map.nl, modes.nl,
prog_util.nl, stack.nl, std_util.nl, string.nl, term.nl:
Avoid the use of implied modes.
code_info.nl, bimap.nl, make_hlds.nl, mercury_compile.nl,
mercury_to_mercury.nl, unify_proc.nl:
Fix determinism errors which had previously not been discovered
because of either implied modes or running out of memory.
(Note that I had to change the interface to bimap__lookup, since
it's not possible to make it bidirectional.)
code_util.nl, llds.nl, opt_debug.nl, value_number.nl:
Rename `operator' as `binary_op'.
hlds.nl, code_info.nl, unify_gen.nl, llds.nl, opt_debug.nl, switch_gen.nl:
*** Handle simple cases of higher-order pred terms. ***
(We don't yet handle taking the address of an overloaded
predicate or a predicate with multiple modes.
We don't handle closures. call/1 and call/N are not yet implemented.
This has not yet been tested.)
make_hlds.nl:
Modify the mode priority ordering so that semidet modes get
selected before det ones.
llds.nl:
Don't include the priority part of the mode number in the mangled
label name. *** Note: this will break some things! ***
mercury_compile.nl:
Move the NU-Prolog hacks into mercury_compile.nu.nl.
switch_gen.nl:
Fix a simple logic bug in handling the grab/slap of the code_info.
prog_io.nl, builtins.nl, int.nl:
Fix bugs and omissions with handling of the new arithmetic operators.
prog_io.nl:
As a quick hack, strip off calls to io__gc_call
(this avoids spurious error messages which are due to
the fact that we don't get mode analysis right in those cases).
Makefile:
various changes. Added switch_gen.nl renamed the other codegen
files to fit the naming conventions.
array.nl:
added some determinism declarations.
bimap.nl:
fixed some of the determinism problems.
doit.nl:
minor changes.
hlds.nl:
added liveness to the procinfo structure.
added access predicates and type definition for liveness_info.
hlds_out.nl, modes.nl:
patched the explicit usage of proc/11. for the above change.
int.nl:
fixed it so that it compiles under mc!
map.nl, set.nl, term.nl:
fixed determinism warnings.
toplevel.nl:
import code_info.
various:
file renaming to fit naming conventions.