Files
mercury/tests/debugger/queens.exp
Fergus Henderson ec86c88404 Merge in the changes from the existential_types_2 branch.
Estimated hours taken: 4

Merge in the changes from the existential_types_2 branch.

This change adds support for mode re-ordering of code involving
existential types.  The change required modifying the order of the
compiler passes so that polymorphism comes before mode analysis,
so that mode analysis can check the modes of the `type_info' or
`typeclass_info' variables that polymorphism introduces, so that
it can thus re-order the code accordingly.

This change also includes some more steps towards making existential data
types work.  In particular, you should be able to declare existentially
typed data types, the compiler will generate appropriate unification
and compare/3 routines for them, and deconstruction unifications for them
should work OK.  However, currently there's no way to construct them
except via `pragam c_code', and we don't generate correct RTTI for them,
so you can't use `io__write' etc. on them.

library/private_builtin.m:
compiler/accumulator.m:
compiler/bytecode_gen.m:
compiler/check_typeclass.m:
compiler/clause_to_proc.m:
compiler/code_util.m:
compiler/common.m:
compiler/dead_proc_elim.m:
compiler/dependency_graph.m:
compiler/det_analysis.m:
compiler/det_report.m:
compiler/follow_code.m:
compiler/follow_vars.m:
compiler/goal_util.m:
compiler/higher_order.m:
compiler/hlds_goal.m:
compiler/hlds_out.m:
compiler/hlds_pred.m:
compiler/intermod.m:
compiler/lambda.m:
compiler/live_vars.m:
compiler/magic.m:
compiler/make_hlds.m:
compiler/mercury_compile.m:
compiler/mercury_to_c.m:
compiler/mode_errors.m:
compiler/mode_info.m:
compiler/mode_util.m:
compiler/modecheck_call.m:
compiler/modecheck_unify.m:
compiler/modes.m:
compiler/pd_cost.m:
compiler/polymorphism.m:
compiler/post_typecheck.m:
compiler/purity.m:
compiler/quantification.m:
compiler/rl_exprn.m:
compiler/rl_key.m:
compiler/simplify.m:
compiler/table_gen.m:
compiler/term_traversal.m:
compiler/type_util.m:
compiler/typecheck.m:
compiler/unify_gen.m:
compiler/unify_proc.m:
compiler/unique_modes.m:
compiler/unused_args.m:
compiler/notes/compiler_design.html:
doc/reference_manual.texi:
tests/hard_coded/typeclasses/Mmakefile:
tests/hard_coded/typeclasses/existential_data_types.m:
tests/hard_coded/typeclasses/existential_data_types.exp:
tests/warnings/simple_code.exp:
tests/hard_coded/Mmakefile:
tests/term/arit_exp.trans_opt_exp:
tests/term/associative.trans_opt_exp:
tests/term/pl5_2_2.trans_opt_exp:
tests/term/vangelder.trans_opt_exp:
tests/term/arit_exp.trans_opt_exp:
tests/term/associative.trans_opt_exp:
tests/term/pl5_2_2.trans_opt_exp:
tests/term/vangelder.trans_opt_exp:
tests/invalid/errors2.err_exp2:
tests/invalid/prog_io_erroneous.err_exp2:
tests/invalid/type_inf_loop.err_exp2:
tests/invalid/types.err_exp2:
tests/invalid/polymorphic_unification.err_exp:
tests/invalid/Mmakefile:
tests/warnings/simple_code.exp:
tests/debugger/queens.exp:
tests/hard_coded/Mmakefile:
tests/hard_coded/existential_reordering.m:
tests/hard_coded/existential_reordering.exp:
	Merge in the changes from the existential_types_2 branch.
1999-06-30 17:13:53 +00:00

159 lines
6.1 KiB
Plaintext

1: 1 1 CALL pred queens:main/2-0 (cc_multi)
mdb> echo on
Command echo enabled.
mdb> print *
HeadVar__1 state('<<c_pointer>>')
mdb>
2: 2 2 CALL pred queens:data/1-0 (det)
mdb> print *
mdb: there are no live variables.
mdb>
3: 2 2 EXIT pred queens:data/1-0 (det)
mdb> print *
HeadVar__1 [1, 2, 3, 4, 5]
mdb>
4: 3 2 CALL pred queens:queen/2-0 (nondet)
mdb> print *
HeadVar__1 [1, 2, 3, 4, 5]
mdb>
5: 4 3 CALL pred queens:qperm/2-0 (nondet)
mdb> print *
HeadVar__1 [1, 2, 3, 4, 5]
mdb>
6: 4 3 SWTC pred queens:qperm/2-0 (nondet) s1;
mdb> print *
HeadVar__1 [1, 2, 3, 4, 5]
mdb>
7: 5 4 CALL pred queens:qdelete/3-0 (nondet)
mdb> print *
HeadVar__2 [1, 2, 3, 4, 5]
mdb>
8: 5 4 DISJ pred queens:qdelete/3-0 (nondet) c2;d1;
mdb> print *
HeadVar__2 [1, 2, 3, 4, 5]
V_11 [2, 3, 4, 5]
V_12 1
mdb> level 1
1 5 4 3 pred queens:qperm/2-0 (nondet)
Ancestor level set to 1.
mdb> print *
HeadVar__1 [1, 2, 3, 4, 5]
mdb> up 1
2 4 3 2 pred queens:queen/2-0 (nondet)
Ancestor level set to 2.
mdb> vars
1 HeadVar__1
mdb> print *
HeadVar__1 [1, 2, 3, 4, 5]
mdb>
9: 5 4 EXIT pred queens:qdelete/3-0 (nondet)
mdb> print HeadVar__1
HeadVar__1 1
mdb> print HeadVar__2
HeadVar__2 [1, 2, 3, 4, 5]
mdb> print HeadVar__3
HeadVar__3 [2, 3, 4, 5]
mdb>
10: 6 4 CALL pred queens:qperm/2-0 (nondet)
mdb> print *
HeadVar__1 [2, 3, 4, 5]
mdb>
11: 6 4 SWTC pred queens:qperm/2-0 (nondet) s1;
mdb> print *
HeadVar__1 [2, 3, 4, 5]
mdb>
12: 7 5 CALL pred queens:qdelete/3-0 (nondet)
mdb> print *
HeadVar__2 [2, 3, 4, 5]
mdb>
13: 7 5 DISJ pred queens:qdelete/3-0 (nondet) c2;d1;
mdb> print *
HeadVar__2 [2, 3, 4, 5]
V_11 [3, 4, 5]
V_12 2
mdb>
14: 7 5 EXIT pred queens:qdelete/3-0 (nondet)
mdb> print *
HeadVar__1 2
HeadVar__2 [2, 3, 4, 5]
HeadVar__3 [3, 4, 5]
mdb>
15: 8 5 CALL pred queens:qperm/2-0 (nondet)
mdb> goto -a 20
16: 8 5 SWTC pred queens:qperm/2-0 (nondet) s1;
17: 9 6 CALL pred queens:qdelete/3-0 (nondet)
18: 9 6 DISJ pred queens:qdelete/3-0 (nondet) c2;d1;
19: 9 6 EXIT pred queens:qdelete/3-0 (nondet)
20: 10 6 CALL pred queens:qperm/2-0 (nondet)
mdb> stack
0 4* pred queens:qperm/2-0 (nondet)
4 pred queens:queen/2-0 (nondet)
5 pred queens:main/2-0 (cc_multi)
mdb> stack -d
0 20 10 6 pred queens:qperm/2-0 (nondet)
1 15 8 5 pred queens:qperm/2-0 (nondet)
2 10 6 4 pred queens:qperm/2-0 (nondet)
3 5 4 3 pred queens:qperm/2-0 (nondet)
4 4 3 2 pred queens:queen/2-0 (nondet)
5 1 1 1 pred queens:main/2-0 (cc_multi)
mdb> print *
HeadVar__1 [4, 5]
mdb>
21: 10 6 SWTC pred queens:qperm/2-0 (nondet) s1;
mdb> retry
34: 10 6 EXIT pred queens:qperm/2-0 (nondet)
20: 10 6 CALL pred queens:qperm/2-0 (nondet)
mdb> print *
HeadVar__1 [4, 5]
mdb> finish -a
21: 10 6 SWTC pred queens:qperm/2-0 (nondet) s1;
22: 11 7 CALL pred queens:qdelete/3-0 (nondet)
23: 11 7 DISJ pred queens:qdelete/3-0 (nondet) c2;d1;
24: 11 7 EXIT pred queens:qdelete/3-0 (nondet)
25: 12 7 CALL pred queens:qperm/2-0 (nondet)
26: 12 7 SWTC pred queens:qperm/2-0 (nondet) s1;
27: 13 8 CALL pred queens:qdelete/3-0 (nondet)
28: 13 8 DISJ pred queens:qdelete/3-0 (nondet) c2;d1;
29: 13 8 EXIT pred queens:qdelete/3-0 (nondet)
30: 14 8 CALL pred queens:qperm/2-0 (nondet)
31: 14 8 SWTC pred queens:qperm/2-0 (nondet) s2;
32: 14 8 EXIT pred queens:qperm/2-0 (nondet)
33: 12 7 EXIT pred queens:qperm/2-0 (nondet)
34: 10 6 EXIT pred queens:qperm/2-0 (nondet)
mdb> register --quiet
mdb> break print_list
0: + stop interface pred queens:print_list/3-0 (det)
mdb> break qdelete
1: + stop interface pred queens:qdelete/3-0 (nondet)
mdb> continue -a
35: 8 5 EXIT pred queens:qperm/2-0 (nondet)
36: 6 4 EXIT pred queens:qperm/2-0 (nondet)
37: 4 3 EXIT pred queens:qperm/2-0 (nondet)
38: 15 3 CALL pred queens:safe/1-0 (semidet)
39: 15 3 SWTC pred queens:safe/1-0 (semidet) s1;
40: 16 4 CALL pred queens:nodiag/3-0 (semidet)
41: 16 4 SWTC pred queens:nodiag/3-0 (semidet) s1;
42: 16 4 THEN pred queens:nodiag/3-0 (semidet) s1;c4;t;
43: 16 4 FAIL pred queens:nodiag/3-0 (semidet)
44: 15 3 FAIL pred queens:safe/1-0 (semidet)
45: 4 3 REDO pred queens:qperm/2-0 (nondet)
46: 6 4 REDO pred queens:qperm/2-0 (nondet)
47: 8 5 REDO pred queens:qperm/2-0 (nondet)
48: 10 6 REDO pred queens:qperm/2-0 (nondet)
49: 12 7 REDO pred queens:qperm/2-0 (nondet)
50: 14 8 REDO pred queens:qperm/2-0 (nondet)
51: 14 8 FAIL pred queens:qperm/2-0 (nondet)
52: 13 8 REDO pred queens:qdelete/3-0 (nondet)
mdb> step -aS 5
53: 13 8 DISJ pred queens:qdelete/3-0 (nondet) c2;d2;
54: 17 9 CALL pred queens:qdelete/3-0 (nondet)
55: 17 9 FAIL pred queens:qdelete/3-0 (nondet)
56: 13 8 FAIL pred queens:qdelete/3-0 (nondet)
57: 12 7 FAIL pred queens:qperm/2-0 (nondet)
mdb> disable 1
1: - stop interface pred queens:qdelete/3-0 (nondet)
mdb> continue -n
675: 141 2 CALL pred queens:print_list/3-0 (det)
mdb> continue -n -S
[1, 3, 5, 2, 4]