mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 17:33:38 +00:00
tests/valid/bug300.m:
tests/valid/Mmakefile:
This simple test case can detect the bug in Java grades.
tests/valid/Mercury.options:
Run the new test case with --optimize-constructor-last-call
tests/hard_coded/bug300.m:
tests/hard_coded/bug300.exp:
tests/hard_coded/Mmakefile:
This more complicated test case can detect the bug in C grades. However
it requires specific CFLAGS, beyond LCMC, to do so. The symptoms of the
bug appear differently in this case.
tests/hard_coded/Mercury.options:
Setup MCFLAGS so that the test case can detect the bug.
53 lines
1.2 KiB
Mathematica
53 lines
1.2 KiB
Mathematica
% vim: ts=4 sw=4 et ft=mercury
|
|
% This test case ensures that lco.m handles from ground term scopes properly
|
|
% such as the one that is created for the construction of the terms in the
|
|
% base case of list_data_term.
|
|
|
|
:- module bug300.
|
|
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module int.
|
|
:- import_module list.
|
|
:- import_module string.
|
|
|
|
main(!IO) :-
|
|
foldl(test,
|
|
[ [],
|
|
[functor(["single"], [])],
|
|
[functor(["1"], []),
|
|
functor(["2"], []),
|
|
functor(["3"], [])] ],
|
|
!IO).
|
|
|
|
:- pred test(list(data_term)::in, io::di, io::uo) is det.
|
|
|
|
test(ListTerm, !IO) :-
|
|
Term = list_data_term(ListTerm),
|
|
io.format("%s -> %s\n", [s(string(ListTerm)), s(string(Term))], !IO).
|
|
|
|
:- type data_term == mer_term(literal).
|
|
|
|
:- type mer_term(T)
|
|
---> functor(qualified_name, list(mer_term(T))).
|
|
|
|
:- type qualified_name == list(unqualified_name).
|
|
|
|
:- type unqualified_name == string.
|
|
|
|
:- type literal
|
|
---> string(string)
|
|
; int(int).
|
|
|
|
:- func list_data_term(list(data_term)) = data_term.
|
|
|
|
list_data_term([]) = functor(["list", "[]"], []).
|
|
list_data_term([H | T]) = functor(["list", "[|]"], [H, list_data_term(T)]).
|
|
|