mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-25 14:24:11 +00:00
compiler/parse_item.m:
Don't accept `:- external' items.
compiler/prog_item.m:
Require the presence of a pred_or_func flag on external pragmas.
They are specified by `:- pragma external_{pred/func}' pragmas,
which are still supported.
compiler/parse_pragma.m:
When parsing external_{pred/func} pragmas, allow the predicate name
to contain a module qualifier; they were allowed on `:- external' items.
We do require the module qualifier to specify the expected (i.e. the
current) module.
compiler/add_pragma.m:
compiler/parse_tree_out_pragma.m:
compiler/recompilation.version.m:
Conform to the changes above.
tests/hard_coded/backend_external.m:
tests/hard_coded/constant_prop_2.m:
tests/invalid/external.err_exp:
tests/invalid/external.m:
tests/invalid/io_in_ite_cond.err_exp:
tests/invalid/io_in_ite_cond.m:
tests/invalid/overloading.m:
tests/invalid/tricky_assert1.m:
tests/invalid/type_spec.err_exp:
tests/invalid/type_spec.m:
tests/invalid/uniq_neg.err_exp:
tests/invalid/uniq_neg.m:
tests/valid/dcg_test.m:
tests/valid/inst_perf_bug_1.m:
tests/valid/lambda_recompute.m:
tests/valid/semidet_disj.m:
tests/valid/solv.m:
tests/valid/solver_type_bug.m:
tests/valid/stack_alloc.m:
tests/valid/tricky_assert2.m:
Replace `:- external' items with external_{pred/func} pragmas.
Modernize the code where needed, replacing DCGs with state variables.
33 lines
1.0 KiB
Mathematica
33 lines
1.0 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% A regression test, adapted from a bug report by Ralph Becket.
|
|
% Mercury 0.8.1 and earlier reported a spurious mode error for this code.
|
|
|
|
:- module uniq_neg.
|
|
:- interface.
|
|
|
|
:- import_module list.
|
|
:- import_module store.
|
|
|
|
:- type term(S) == store_mutvar(term_type(S), S).
|
|
:- type var(S) == term(S).
|
|
:- type term_type(S)
|
|
---> free
|
|
; functor(string, int, list(term(S))).
|
|
|
|
:- pred unify(term(S), term_type(S), term(S), term_type(S), store(S), store(S)).
|
|
:- mode unify(in, in, in, in, di, uo) is semidet.
|
|
|
|
:- implementation.
|
|
|
|
:- pred occurs(var(S), list(term(S)), store(S), store(S)).
|
|
:- mode occurs(in, in, di, uo) is semidet.
|
|
|
|
:- pragma external_pred(occurs/4).
|
|
|
|
unify(T1, free, _T2, functor(Name2, Arity2, Args2), !Store) :-
|
|
not occurs(T1, Args2, !.Store, _),
|
|
store.set_mutvar(T1, functor(Name2, Arity2, Args2), !Store).
|