%---------------------------------------------------------------------------%
% 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.
