Files
mercury/tests/valid_seq/intermod_test2.m
2020-11-15 08:02:47 +11:00

49 lines
1.1 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
:- module intermod_test2.
:- interface.
:- import_module int.
:- pred baz(int::in) is semidet.
:- func plusone(int :: in) = (int :: out) is det.
:- implementation.
:- type t
---> f(int)
; g(int1).
% Check that local types used only in other type declarations are put
% in the `.opt' file.
:- type int1
---> int1(int).
:- mode int_mode == int_mode1.
:- mode int_mode1 == in.
baz(X) :-
T = f(1),
bar(T, X).
:- pred bar(t::in, int::int_mode) is semidet.
bar(T, 2) :-
Pred =
( pred(T1::in, Int::int_mode) is semidet :-
T1 = f(1),
Int = 2
),
Pred(T, 2).
% One version of the compiler incorrectly wrote this declaration to
% the .opt file as `:- pragma inline((intermod_test2:plusone)/2).'
% -- bromage 20 Nov 1997
:- pragma inline(plusone/1).
plusone(Int0) = Int :-
Int = Int0 + 1.