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: 6
Branches: main
compiler/*.m:
Convert almost all the compiler modules to use . instead of __ as
the module qualifier.
In some cases, change the names of predicates and types to make them
meaningful without the module qualifier. In particular, most of the
types that used to be referred to with an "mlds__" prefix have been
changed to have a "mlds_" prefix instead of changing the prefix to
"mlds.".
There are no algorithmic changes.
Estimated hours taken: 1
Branches: main
Minor cleanups of Richard's recent update, basically review comments
I could address more easily myself.
compiler/abstract_mode_constraints.m:
compiler/build_mode_constraints.m:
compiler/mcsolver.m:
compiler/ordering_mode_constraints.m:
compiler/prop_mode_constraints.m:
Remove unnecessary module qualifications whose only effect was to
add clutter. When a piece of functionality was present in both
predicate and function forms, keep only the more convenient form.
Use multilevel switches on list lengths where relevant. Rename some
variables to conform with our conventions. Make comments into
complete sentences. Fix some white space issues.
Estimated hours taken: 0.5
Branches: main
compiler/mcsolver.m:
Add module qualifiers in order to avoid ambiguous overloadings
when compile with `--intermodule-optimization'.
Estimated hours taken: 120.
Branches: main.
Extend constraints based mode analysis.
Constraints on the producing and consuming goals for program
variables are now solved, and the solutions used for
conjunction reordering. The resulting HLDS is then thrown away,
after maybe being dumped (stage 33).
Extend dumping of mode analysis constraints.
Constraints are no longer dumped to file - they are displayed as
error messages when the --debug-mode-constraints is set. After
conjunction ordering, the original goal paths are printed in the
order they now appear.
compiler/options.m:
Added the option described above, and some comments describing
various mode constraint options.
compiler/check_hlds.m:
Grouped ":- include_module"s for propagation solver
constraints based mode analysis, and included
new modules in this area - mcsolver and
ordering_mode_constraints.
compiler/mode_constraints.m:
Changes to the nature of constraint dumping - introduction
of the use of --debug-mode-constraints.
Introduction of conjunction ordering (call to module
ordering_mode_constraints).
compiler/prop_mode_constraints.m:
Changes to way constraints are dumped as described above.
Changes to the way constraint variables are created -
constraint variables can now be constructed as needed
when the constraints are built.
Structural changes to make constraint generation more
natural (eg introduction of state variables, instead
of use of functions).
compiler/abstract_mode_constraints.m:
Changes to the way constraints are stored - the old
speculative code became redundant with the introduction
of rafe's solver (see mcsolver.m).
New, specialised constraint generation predicates.
Constraints are now created with a context attached,
and space was left for adding other information.
compiler/build_mode_constraints.m:
Changes to the way constraint variables are created -
constraint variables can now be constructed as needed
when the constraints are built.
Structural changes to make constraint generation more
natural (eg introduction of state variables, instead
of use of functions).
Constraints are now created with a context attached.
compiler/ordering_mode_constraints.m:
New file. Uses solutions to the producer/consumer
constraints to order conjunctions for mode analysis.
Does not yet do mode inference.
compiler/mcsolver.m:
New file. Written by rafe, modified by myself to
accomodate the rest of the mode constraints branch
(and a new constraint type). Solves mode constraints
to produce bindings for constraint variables from
producer/consumer analysis.
compiler/notes/compiler_design.html:
Updated notes about constraints based mode analysis.