mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-05-01 17:24:34 +00:00
Branches: main
Allow testing of java grade. Requires using `mmc --make' for now.
This patch does not attempt to fix test failures.
tests/Mmake.common:
Delete unneeded Java-specific rule, which was broken.
tests/benchmarks/Mmakefile:
tests/general/Mmakefile:
tests/general/string_format/Mmakefile:
tests/grade_subdirs/Mmakefile:
tests/hard_coded/Mmakefile:
tests/recompilation/Mmakefile:
tests/term/Mmakefile:
tests/valid/Mmakefile:
Don't deliberately disable tests in java grade.
tests/*.m:
Add Java foreign code.
Write dummy procedures instead of abusing `:- external'.
96 lines
1.9 KiB
Mathematica
96 lines
1.9 KiB
Mathematica
:- module foreign_import_module.
|
|
|
|
:- interface.
|
|
|
|
:- import_module int, io.
|
|
|
|
:- pred main(io__state::di, io__state::uo) is det.
|
|
|
|
:- pred bar(int::in, int::out) is det.
|
|
|
|
:- implementation.
|
|
|
|
main -->
|
|
{ bar(41, X) },
|
|
io__write(X),
|
|
io__nl,
|
|
|
|
{ bar2(41, Y) },
|
|
io__write(Y),
|
|
io__nl.
|
|
|
|
:- pragma foreign_import_module(c, foreign_import_module_2).
|
|
:- pragma foreign_import_module(il, foreign_import_module_2).
|
|
:- pragma foreign_import_module(java, foreign_import_module_2).
|
|
% not actually necessary in Erlang
|
|
% :- pragma foreign_import_module(erlang, foreign_import_module_2).
|
|
|
|
:- pragma foreign_proc("C",
|
|
bar(X::in, Y::out),
|
|
[may_call_mercury, promise_pure],
|
|
"
|
|
foo(X, &Y);
|
|
").
|
|
:- pragma foreign_proc("C#",
|
|
bar(X::in, Y::out),
|
|
[may_call_mercury, promise_pure],
|
|
"
|
|
int Y1, Y2;
|
|
|
|
foreign_import_module_2.mercury_code.foo(X, ref Y1);
|
|
foreign_import_module_2__csharp_code.mercury_code.foo2(X, ref Y2);
|
|
|
|
if (Y1 == Y2) {
|
|
Y = Y1;
|
|
} else {
|
|
throw new System.Exception(""Y1 != Y2"");
|
|
}
|
|
").
|
|
:- pragma foreign_proc("Java",
|
|
bar(X::in, Y::out),
|
|
[may_call_mercury, promise_pure],
|
|
"
|
|
Y = foreign_import_module_2.foo(X);
|
|
").
|
|
:- pragma foreign_proc("Erlang",
|
|
bar(X::in, Y::out),
|
|
[may_call_mercury, promise_pure],
|
|
"
|
|
Y = foreign_import_module_2:foo(X)
|
|
").
|
|
|
|
:- pred bar2(int::in, int::out) is det.
|
|
:- pragma foreign_proc("C",
|
|
bar2(X::in, Y::out),
|
|
[may_call_mercury, promise_pure],
|
|
"
|
|
foo(X, &Y);
|
|
").
|
|
:- pragma foreign_proc("C#",
|
|
bar2(X::in, Y::out),
|
|
[may_call_mercury, promise_pure],
|
|
"
|
|
int Y1 = 0, Y2 = 0;
|
|
|
|
foreign_import_module_2.mercury_code.foo(X, ref Y1);
|
|
foreign_import_module_2__cpp_code.mercury_code.foo2(X, ref Y2);
|
|
|
|
if (Y1 == Y2) {
|
|
Y = Y1;
|
|
} else {
|
|
throw new System.Exception(""Y1 != Y2"");
|
|
}
|
|
").
|
|
:- pragma foreign_proc("Java",
|
|
bar2(X::in, Y::out),
|
|
[may_call_mercury, promise_pure],
|
|
"
|
|
Y = foreign_import_module_2.foo(X);
|
|
").
|
|
:- pragma foreign_proc("Erlang",
|
|
bar2(X::in, Y::out),
|
|
[may_call_mercury, promise_pure],
|
|
"
|
|
Y = foreign_import_module_2:foo(X)
|
|
").
|