Files
mercury/tests/hard_coded/allow_stubs.m
2020-10-04 13:20:42 +11:00

64 lines
1.3 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
%
% test case for the `--allow-stubs' option.
%
:- module allow_stubs.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is cc_multi.
:- implementation.
:- import_module exception.
:- import_module univ.
main(!IO) :-
hello(!IO),
trap_exceptions(how_are_you, !IO),
trap_exceptions(going_today, !IO),
goodbye(!IO).
hello(!IO) :-
print("hello world", !IO),
nl(!IO).
:- pred goodbye(io::di, io::uo) is det.
goodbye -->
print("goodbye"), nl.
:- pred how_are_you(io::di, io::uo) is det.
:- mode going_today(di, uo) is det.
going_today(!IO) :-
print("going ", !IO),
today(!IO).
:- pred today(io::di, io::uo) is det.
:- pred unused1(T::di, T::uo) is det.
:- pred unused2(T::di, T::uo) is det.
unused1(IO0, IO) :-
unused2(IO0, IO).
:- impure pred imp(io::di, io::uo) is det.
:- mode trap_exceptions(pred(di, uo) is det, di, uo) is cc_multi.
trap_exceptions(IOGoal, !IO) :-
try_io((pred({}::out, di, uo) is det --> IOGoal), Res, !IO),
(
Res = succeeded({})
;
Res = exception(Exception),
print("[caught exception: ", !IO),
print(univ_value(Exception), !IO),
print("]\n", !IO)
).