mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-16 09:53:36 +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.
40 lines
715 B
Mathematica
40 lines
715 B
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module stack_alloc.
|
|
|
|
:- interface.
|
|
|
|
:- pred p is semidet.
|
|
|
|
:- implementation.
|
|
|
|
:- pred in(int::in) is semidet.
|
|
:- pred out(int::out) is det.
|
|
|
|
:- pragma external_pred(in/1).
|
|
:- pragma external_pred(out/1).
|
|
|
|
p :-
|
|
(
|
|
out(X),
|
|
out(Y),
|
|
p,
|
|
in(X),
|
|
in(Y)
|
|
;
|
|
out(A),
|
|
out(B),
|
|
p,
|
|
in(A),
|
|
in(B)
|
|
).
|
|
|
|
:- pragma foreign_code("Java", "
|
|
|
|
private static int out_1_p_0() { return 0; }
|
|
private static boolean in_1_p_0(int n) { return false; }
|
|
|
|
").
|