mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-24 05:43:53 +00:00
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.
159 lines
6.1 KiB
Plaintext
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]
|