mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-16 01:43:35 +00:00
tests/invalid_nodepend/Mercury.options:
tests/invalid_purity/Mercury.options:
Let several test cases proceed to the compiler invocation we want to test.
tests/submodules/impl_def_literal.m:
Comment out the atomic goal in this test case. (See below for the reason.)
tests/valid/big_foreign_type.m:
tests/valid/bug318.m:
tests/valid/flatten_conj_bug.m:
tests/valid/ho_and_type_spec_bug.m:
tests/valid/mert.m:
tests/valid/param_mode_bug.m:
These test cases were missing C# definitions (and in some cases,
Java definitions) of types and/or predicates. Add them.
tests/warnings/Mercury.options:
tests/warnings/Mmakefile:
Update references to a not-long-ago renamed file.
tests/warnings/foreign_singleton.m:
Add Java and C# definitions of some predicates.
tests/warnings/foreign_singleton.exp:
Update the line numbers in the expected output for C.
tests/warnings/foreign_singleton.exp[23]:
Add these expected output files for Java and C#.
compiler/simplify_goal.m:
Generate an error message if we find an atomic goal
but we are targeting a language which has no definitions
for the primitive operations used in the implementation of such goals.
Until now, for tests/submodules/impl_def_literal.m (which until now
contained an atomic goal), the compiler would generate code that
aborted at runtime. We report the problem, which avoids the generation
of code that would abort.
53 lines
1.4 KiB
Mathematica
53 lines
1.4 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module flatten_conj_bug.
|
|
:- interface.
|
|
:- import_module list.
|
|
|
|
% A type
|
|
:- type cvar(T)
|
|
---> cvar(v :: T, x :: list(int)).
|
|
:- inst cvar
|
|
---> cvar(ground, non_empty_list).
|
|
|
|
% A typeclass.
|
|
:- typeclass cvar_type(T) where [].
|
|
|
|
:- type cvar_wrapper
|
|
---> some [T] (cvar_wrapper(cvar :: cvar(T)) => cvar_type(T)).
|
|
|
|
:- some [T] func unwrap_cvar(cvar_wrapper::in) = (cvar(T)::out(cvar)) is det
|
|
=> (cvar_type(T)).
|
|
|
|
:- implementation.
|
|
|
|
% The transformed version of this function was not able to be
|
|
% mode checked. The reason for this is that polymorphism was not
|
|
% flattening conjunctions, and the conjuncts were therefore not
|
|
% able to be scheduled in any order that would work.
|
|
%
|
|
unwrap_cvar(cvar_wrapper(V)) = unsafe_any_to_cvar(V).
|
|
|
|
:- func unsafe_any_to_cvar(cvar(T)::in) = (cvar(T)::out(cvar)) is det.
|
|
|
|
:- pragma foreign_proc("C",
|
|
unsafe_any_to_cvar(X::in) = (Y::out(cvar)),
|
|
[will_not_call_mercury, promise_pure],
|
|
"
|
|
Y = X;
|
|
").
|
|
:- pragma foreign_proc("C#",
|
|
unsafe_any_to_cvar(X::in) = (Y::out(cvar)),
|
|
[will_not_call_mercury, promise_pure],
|
|
"
|
|
Y = X;
|
|
").
|
|
:- pragma foreign_proc("Java",
|
|
unsafe_any_to_cvar(X::in) = (Y::out(cvar)),
|
|
[will_not_call_mercury, promise_pure],
|
|
"
|
|
Y = X;
|
|
").
|