Files
mercury/tests/invalid/overloading.m
Julien Fischer f3a34e4651 Replace uses of __ as a module qualifier.
samples/muz.zbstract.m:
tests/*/*.m:
    As above.
2022-04-14 20:25:10 +10:00

63 lines
2.0 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
:- module overloading.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module counter.
:- import_module int.
:- import_module list.
:- import_module map.
:- import_module set.
:- import_module term.
main -->
{ q(A, B, C) },
{ p(A, B, C, T) },
io.write(T),
io.nl.
:- type var_save_map == map(var, save_map).
:- type save_map == map(goal_path, string).
:- type goal_path ---> goal_path(string).
:- type anchor ---> anchor(string).
:- type interval_id ---> interval_id(int).
:- type opt_info
---> opt_info(
must_have_own_slot :: set(var),
ever_on_stack :: set(var),
var_save_map :: var_save_map,
cur_interval :: interval_id,
interval_counter :: counter,
interval_start :: map(interval_id, anchor),
interval_end :: map(interval_id, anchor),
interval_vars :: map(interval_id, set(var)),
interval_succ :: map(interval_id, list(interval_id))
).
:- pred p(set(var)::in, set(var)::in, set(var)::in, opt_info::out) is det.
p(MustHaveOwnSlot, EverOnStack, OutputVars, OptInfo) :-
Counter0 = counter.init(1),
counter.allocate(CurInterval, Counter0, Counter1),
CurIntervalId = interval_id(CurInterval),
EndMap0 = map.det_insert(map.init, CurIntervalId, anchor("end")),
StartMap0 = map.init,
VarsMap0 = map.det_insert(map.init, CurIntervalId, OutputVars),
SuccMap0 = map.init,
OptInfo = opt_info(MustHaveOwnSlot, EverOnStack,
CurIntervalId, map.init, Counter1, StartMap0, EndMap0,
VarsMap0, SuccMap0).
:- pred q(set(var)::out, set(var)::out, set(var)::out) is det.
:- pragma external_pred(q/3).