Commit Graph

5 Commits

Author SHA1 Message Date
Zoltan Somogyi
748a22a882 Improve diagnostics for bad instance declarations.
compiler/check_typeclass.m:
    When a type in an instance declaration is not a type constructor,
    don't just say what it is; say also what it should be.

    When a type in an instance declaration is a type constructor but some
    of its arguments are not type variables, don't just say so: say *which*
    of their arguments are the problem.

    Do not use "argument" to refer to both "the arguments of the instance
    declaration" and the "arguments of a type constructor"; use the terminology
    "instance type" for the former.

    Always end the line after the ":" in the error's top level description.

    Omit the module qualification of the typeclass name in error messages,
    since the base name of the typeclass, and the context, should always
    be enough to eliminate any ambiguity.

    Fix a bug in the use of choose_number.

    Don't gather the set of seen types, since it was never used.

tests/invalid/invalid_instance_declarations.m:
    Extend this test to type classes with more than one type.

tests/invalid/bad_instance2.err_exp:
tests/invalid/constraint_proof_bug_lib.err_exp:
tests/invalid/fundeps_coverage.err_exp:
tests/invalid/instance_var_bug.err_exp:
tests/invalid/invalid_instance_declarations.err_exp:
tests/invalid/range_restrict.err_exp:
tests/invalid/tc_err1.err_exp:
tests/invalid/tc_err2.err_exp:
tests/invalid/typeclass_bogus_method.err_exp:
tests/invalid/typeclass_missing_mode_2.err_exp:
tests/invalid/typeclass_test_10.err_exp:
tests/invalid/typeclass_test_3.err_exp:
tests/invalid/typeclass_test_4.err_exp:
tests/invalid/typeclass_test_5.err_exp:
tests/invalid/typeclass_test_9.err_exp:
    Update these expected outputs to account for the changes above.
2018-06-27 19:57:03 +02:00
Zoltan Somogyi
fdd141bf77 Clean up the tests in the other test directories.
tests/invalid/*.{m,err_exp}:
tests/misc_tests/*.m:
tests/mmc_make/*.m:
tests/par_conj/*.m:
tests/purity/*.m:
tests/stm/*.m:
tests/string_format/*.m:
tests/structure_reuse/*.m:
tests/submodules/*.m:
tests/tabling/*.m:
tests/term/*.m:
tests/trailing/*.m:
tests/typeclasses/*.m:
tests/valid/*.m:
tests/warnings/*.{m,exp}:
    Make these tests use four-space indentation, and ensure that
    each module is imported on its own line. (I intend to use the latter
    to figure out which subdirectories' tests can be executed in parallel.)

    These changes usually move code to different lines. For the tests
    that check compiler error messages, expect the new line numbers.

browser/cterm.m:
browser/tree234_cc.m:
    Import only one module per line.

tests/hard_coded/boyer.m:
    Fix something I missed.
2015-02-16 12:32:18 +11:00
Julien Fischer
40c98f2383 Fix the failure of tests/invalid/instance_var_bug.
tests/invalid/instance_var_bug.err_exp;
	Conform to recent changes.
2013-07-09 16:43:34 +10:00
Zoltan Somogyi
06cd3bfc7a Do several kinds of cleanups. There are no algorithmic changes.
Estimated hours taken: 1
Branches: main

compiler/check_typeclasses.m:
	Do several kinds of cleanups. There are no algorithmic changes.

	First, this modules does several different checks. Put the code that
	does those checks in the same order as the comment at the top
	explaining them, and the order in which they are executed.

	Second, give some predicates and variables more meaningful names.

	Third, fix the error messages so that they form complete sentences,
	and do not use abbreviations unnecessarily.

tests/invalid/bad_instance.err_exp:
tests/invalid/instance_dup_var.err_exp:
tests/invalid/instance_var_bug.err_exp:
tests/invalid/invalid_instance_declarations.err_exp:
tests/invalid/invalid_typeclass.err_exp:
	Conform to the third change above.
2012-06-04 08:35:09 +00:00
Julien Fischer
dc1e59e48b Fix a bug (#27) reported by Ralph. The compiler was aborting on
Estimated hours taken: 1
Branches: main

Fix a bug (#27) reported by Ralph.  The compiler was aborting on
instances that contained type variables that were not wrapped in functors.
The problem is that the name mangling scheme used to mangle the names of
method wrapper predicates cannot handle instances that contain unwrapped
type variables.  The compiler already has code to check for this, but that
check was not being performed until *after* it had attempted to introduce
the method wrapper predicates.

The fix is to reorder the phases of check_typeclass.m so that we perform
the check on the types in an instance first and only run the remaining
phases if the first one succeeds.

compiler/check_typeclass.m:
	Reorder the phases within this module so that we don't attempt
	to introduce method wrapper predicates for invalid instances.

	Update the documentation in this module to conform to the above
	change.

	Remove some unnecessary module qualification.

tests/invalid/Mercury.options:
tests/invalid/Mmakefile:
tests/invalid/instance_var_bug.{m,err_exp}:
	Test for the above bug.

tests/invalid/bad_instance.err_exp:
	Update this.  The error message for the missing concrete instance
	won't be emitted with the above change.  Note, we have a separate
	test case, tests/invalid/missing_concrete_instance, that exercises
	that error message.
2007-11-14 04:00:06 +00:00