mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-18 02:43:40 +00:00
tests/invalid/*.{m,err_exp}:
tests/misc_tests/*.m:
tests/mmc_make/*.m:
tests/par_conj/*.m:
tests/purity/*.m:
tests/stm/*.m:
tests/string_format/*.m:
tests/structure_reuse/*.m:
tests/submodules/*.m:
tests/tabling/*.m:
tests/term/*.m:
tests/trailing/*.m:
tests/typeclasses/*.m:
tests/valid/*.m:
tests/warnings/*.{m,exp}:
Make these tests use four-space indentation, and ensure that
each module is imported on its own line. (I intend to use the latter
to figure out which subdirectories' tests can be executed in parallel.)
These changes usually move code to different lines. For the tests
that check compiler error messages, expect the new line numbers.
browser/cterm.m:
browser/tree234_cc.m:
Import only one module per line.
tests/hard_coded/boyer.m:
Fix something I missed.
67 lines
1.5 KiB
Mathematica
67 lines
1.5 KiB
Mathematica
% vim: ts=4 sw=4 et ft=mercury
|
|
%
|
|
% This a regression test for Mantis bug #128. The bug was that the loop
|
|
% invariants pass considered the unification that constructed a partially
|
|
% instantiated term (_L3-comma in parse_enum0) to be an invariant goal,
|
|
% and attempted to hoist it out of parse_enum0's loop. Due to the free
|
|
% variable inside the term, this yielded a compiler abort.
|
|
|
|
:- module bug128.
|
|
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module assoc_list.
|
|
:- import_module int.
|
|
:- import_module list.
|
|
:- import_module maybe.
|
|
:- import_module pair.
|
|
:- import_module string.
|
|
|
|
:- type tokens == assoc_list(int, token).
|
|
|
|
:- type token
|
|
---> comma
|
|
; symbol(string)
|
|
; eof.
|
|
|
|
main(!IO) :-
|
|
write_string("Hello, world!\n", !IO).
|
|
|
|
:- type value
|
|
---> value(int, value0).
|
|
|
|
:- type value0
|
|
---> value_sym(string).
|
|
|
|
:- type parse_res(T)
|
|
---> ok(T)
|
|
; error.
|
|
|
|
:- pred parse_enum0(int::in, assoc_list(string, maybe(value))::in,
|
|
parse_res(value)::out, tokens::in, tokens::out) is det.
|
|
|
|
parse_enum0(L, Vs0, Res, !Ts) :-
|
|
( if next(_L2-symbol(Sym), !Ts) then
|
|
( if next(_L3-comma, !Ts) then
|
|
Vs = [Sym-no | Vs0],
|
|
parse_enum0(L, Vs, Res, !Ts)
|
|
else
|
|
Res = error
|
|
)
|
|
else
|
|
Res = error
|
|
).
|
|
|
|
:- pred next(pair(int, token)::out, tokens::in, tokens::out) is det.
|
|
|
|
next(L-T, [L-T | Ts], Ts).
|
|
next(0-eof, [], []).
|