[m-rev.] for review: fix mantis bug 384
jfischer at opturion.com
Thu Apr 2 11:29:52 AEDT 2015
On Wed, 1 Apr 2015, Zoltan Somogyi wrote:
> For review by Julien. Sorry I didn't get it done yesterday, but
> it was a bit more involved than I originally thought it would be.
> Fix a bug that put $typed_insts in .opt files.
> Make the predicates that output insts take a parameter that says whether
> we are trying to print valid Mercury code (in which case we strip any
> $typed_inst wrappers around other insts), or as-informative-as-possible
> representations of insts for debugging, in which case we do NOT strip
> those wrappers. When invoked on insts that CANNOT be printed as valid
> Mercury even though valid Mercury is being requested, abort.
> Rationalize the argument order of the involved predicates.
> Move the output_lang type here from hlds_out_util.m to make the above
> possible. Change the flag that governs whether item names are qualified
> or not from a bool to a bespoke enum type. Fix a bug involving that bool.
> This module also has a predicate that output insts, though it already had
> a valid mercury/debug output flag. If it is asked to print valid Mercury,
> make it strip $typed_inst wrappers and abort on insts that cannot be
> printed as valid Mercury.
> A better fix would be to eliminate this predicate, and other predicates
> in this module that also duplicate predicates in mercury_to_mercury.m,
> after generalizing the latter as needed, but that would take more time.
> Fix an unrelated problem that ALSO prevented a bootcheck with -O5
> --intermodule-optimization, which is that with these options, several
> predicates in both these modules accumulated enough type ambiguities
> for the type checker to throw up its hands in despair.
> The type checker should NOT be influenced by the additional types, data
> constructors, field names, functions and predicates added by these options
> to their respective tables, but it is. Fixing that bug is future work.
> For now, just add reduce the ambiguities to the allowable level, mostly
> by adding module qualifiers, and by converting some function calls to
> predicate calls. (Function calls introduce ambiguities, since the
> typechecker thinks they may be partially applied predicate calls.)
That looks fine.
More information about the reviews