Files
mercury/tests/hard_coded/intermod_multimode_main.m
Simon Taylor 6991a104d2 When writing a mode-specific clause in a `.opt' file, get the modes
Estimated hours taken: 0.5
Branches: main

compiler/hlds_out.m:
	When writing a mode-specific clause in a `.opt' file, get the modes
	of the procedure using proc_info_declared_argmodes rather than
	proc_info_argmodes. This is necessary because the test in
	make_hlds.m to work out whether a clause matches a mode declaration
	uses syntactic equality on the modes, but the modes returned by
	proc_info_argmodes may have been expanded by
	propagate_types_into_modes.

compiler/intermod.m:
	Tell hlds_out.m to use the declared modes when writing clauses.

tests/hard_coded/multimode.m:
tests/hard_coded/multimode_main.exp:
	Test case.
2001-08-18 11:33:54 +00:00

40 lines
928 B
Mathematica

:- module intermod_multimode_main.
:- interface.
:- import_module io.
:- pred main(io__state::di, io__state::uo) is det.
:- implementation.
:- import_module intermod_multimode.
:- pragma promise_pure(main/2).
main -->
{ In = 42 },
{ In2 = In }, % this line (and the use of `In2' below,
% rather than `In') is needed to avoid
% triggering an unrelated bug -- see
% tests/valid/mode_selection.m.
% test pure functions
print(func0), nl,
print(func1(In)), nl,
print(func1(_Out0)), nl,
print(func2(In, In2)), nl,
print(func2(In, _Out1)), nl,
print(func2(_Out2, In)), nl,
print(func2(_Out3, _Out4)), nl,
% test impure predicates
{ impure test0 },
{ impure test1(In) },
{ impure test1(_Out10) },
{ impure test2(In, In) },
{ impure test2(In, _Out11) },
{ impure test2(_Out12, In) },
{ impure test2(_Out13, _Out14) },
{ get_determinism((pred(1::out) is semidet), Det) },
io__write(Det),
io__nl.