[m-rev.] diff: fix some failing test cases

Julien Fischer juliensf at cs.mu.OZ.AU
Wed Aug 17 14:23:49 AEST 2005


Estimated hours taken: 1
Branches: main, release

Fix some problems caught by the nightly tests and reorder part of the
reference manual.

tabling/specified was failing because the compiler was attempting to perform
unused argument optimization on a tabled predicate.  The fix is to
disable unused argument optimization for all predicates that do not have an
evaluation method of eval_normal.

debugger/interactive was failing because of the recent change to how the
superhomogenous form of lambda expressions is constructed.  The fix is to
update the expected output.  This diff also removes an older expected output
for this test case that is no longer applicable.

Reorder the C specific section on the FLI pragmas in the reference
manual so that it matches that of the other languages.

compiler/unused_args.m:
	Do not optimize unused arguments for tabled predicates.

doc/reference_manual.texi:
	Rearrange the ordering of the foreign pragmas for C so that it matches
	that of the other languages.

tests/debugger/interactive.exp:
	Update the expected output for this test case.  The change in expected
	output is due to the recent change in how the compiler processes lambda
	expressions.

tests/debugger/interactive.exp2:
	Remove the contents of this file and replace them with a message
	saying that the file is currently unused.  This is expected output is
	out-of-date with respect to the .inp file.  (This version of the
	expected output was originally added because the compiler generated
	different output at -O1, however it no longer does that.)

Julien.

Index: compiler/unused_args.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/unused_args.m,v
retrieving revision 1.105
diff -u -r1.105 unused_args.m
--- compiler/unused_args.m	22 Jul 2005 12:32:01 -0000	1.105
+++ compiler/unused_args.m	17 Aug 2005 03:19:08 -0000
@@ -315,7 +315,8 @@
 			!PredProcList, !OptProcs, !ModuleInfo, !IO)
 	).

-	% setup args for a predicate
+	% Setup args for each mode of a predicate.
+	%
 :- pred setup_pred_args(pred_id::in, list(proc_id)::in, unused_arg_info::in,
 	var_usage::in, var_usage::out, pred_proc_list::in, pred_proc_list::out,
 	proc_call_info::in, proc_call_info::out,
@@ -372,6 +373,11 @@
 		;
 			pred_info_is_pseudo_imported(PredInfo),
 			hlds_pred__in_in_unification_proc_id(ProcId)
+		;
+			% Unused argument optimization and tabling are
+			% not compatible with each other.
+			proc_info_eval_method(ProcInfo, EvalMethod),
+			EvalMethod \= eval_normal
 		)
 	->
 		true
Index: doc/reference_manual.texi
===================================================================
RCS file: /home/mercury1/repository/mercury/doc/reference_manual.texi,v
retrieving revision 1.320
diff -u -r1.320 reference_manual.texi
--- doc/reference_manual.texi	14 Aug 2005 05:44:58 -0000	1.320
+++ doc/reference_manual.texi	15 Aug 2005 02:31:58 -0000
@@ -6350,12 +6350,59 @@
 @subsection Interfacing with C

 @menu
+* Using pragma foreign_type for C 	:: Declaring C types in Mercury
 * Using pragma foreign_proc for C 	:: Calling C code from Mercury
 * Using pragma foreign_decl for C 	:: Including C declarations in Mercury
 * Using pragma foreign_code for C 	:: Including C code in Mercury
-* Using pragma foreign_type for C 	:: Declaring C types in Mercury
 @end menu

+ at node Using pragma foreign_type for C
+ at subsubsection Using pragma foreign_type for C
+
+A C @samp{pragma foreign_type} declaration has the form:
+
+ at example
+:- pragma foreign_type("C", @var{MercuryTypeName}, "@var{CForeignType}").
+ at end example
+
+For example,
+
+ at example
+:- pragma foreign_type("C", long_double, "long double").
+ at end example
+
+The @var{CForeignType} can be any C type name that obeys the following
+restrictions.
+Function types, array types, and incomplete types are not allowed.
+The type name must be such that when declaring a variable in C of that
+type, that no part of the type name is required after the variable name.
+(This rule prohibits, for example, function pointer types such as
+ at samp{void (*)(void)}.  However, it would be OK to use a typedef name
+which was defined as a function pointer type.)
+
+C preprocessor directives (such as @samp{#if}) may not be used in
+ at var{CForeignType}.  (You can however use a typedef name that refers
+to a type defined in a @samp{pragma foreign_decl} declaration, and
+the @samp{pragma foreign_decl} declaration may contain C preprocessor
+directives.)
+
+ at strong{With @samp{--gc accurate}, foreign_types which are C pointer types
+must not point to the Mercury heap.}
+
+If the @var{MercuryTypeName} is the type of a parameter of a procedure
+defined using @samp{pragma foreign_proc},
+it will be passed to the foreign_proc's foreign language code
+as @var{CForeignType}.
+
+Furthermore, any Mercury procedure exported with @samp{pragma export}
+will use @var{CForeignType} as the type for any
+parameters whose Mercury type is @var{MercuryTypeName}.
+
+Also see the section on using C pointers (@pxref{Using C pointers}) for
+information on how to use the c_pointer type with the C interface.
+ at c XXX we should eventually just move that section to here,
+ at c presenting it as an alternative to pragma foreign_type.
+
 @node Using pragma foreign_proc for C
 @subsubsection Using pragma foreign_proc for C

@@ -6478,53 +6525,6 @@
 @end example

 Such code is copied verbatim into the generated C file.
-
- at node Using pragma foreign_type for C
- at subsubsection Using pragma foreign_type for C
-
-A C @samp{pragma foreign_type} declaration has the form:
-
- at example
-:- pragma foreign_type("C", @var{MercuryTypeName}, "@var{CForeignType}").
- at end example
-
-For example,
-
- at example
-:- pragma foreign_type("C", long_double, "long double").
- at end example
-
-The @var{CForeignType} can be any C type name that obeys the following
-restrictions.
-Function types, array types, and incomplete types are not allowed.
-The type name must be such that when declaring a variable in C of that
-type, that no part of the type name is required after the variable name.
-(This rule prohibits, for example, function pointer types such as
- at samp{void (*)(void)}.  However, it would be OK to use a typedef name
-which was defined as a function pointer type.)
-
-C preprocessor directives (such as @samp{#if}) may not be used in
- at var{CForeignType}.  (You can however use a typedef name that refers
-to a type defined in a @samp{pragma foreign_decl} declaration, and
-the @samp{pragma foreign_decl} declaration may contain C preprocessor
-directives.)
-
- at strong{With @samp{--gc accurate}, foreign_types which are C pointer types
-must not point to the Mercury heap.}
-
-If the @var{MercuryTypeName} is the type of a parameter of a procedure
-defined using @samp{pragma foreign_proc},
-it will be passed to the foreign_proc's foreign language code
-as @var{CForeignType}.
-
-Furthermore, any Mercury procedure exported with @samp{pragma export}
-will use @var{CForeignType} as the type for any
-parameters whose Mercury type is @var{MercuryTypeName}.
-
-Also see the section on using C pointers (@pxref{Using C pointers}) for
-information on how to use the c_pointer type with the C interface.
- at c XXX we should eventually just move that section to here,
- at c presenting it as an alternative to pragma foreign_type.

 @c ----------------------------------------------------------------------------

Index: tests/debugger/interactive.exp
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/interactive.exp,v
retrieving revision 1.10
diff -u -r1.10 interactive.exp
--- tests/debugger/interactive.exp	29 Apr 2005 01:33:45 -0000	1.10
+++ tests/debugger/interactive.exp	17 Aug 2005 03:59:27 -0000
@@ -23,12 +23,12 @@
 fail.
 No (more) solutions.
 ?- qperm([1,2,3], List), List = [2 | _].
-<stdin>:012: In clause for predicate `mdb_query.run/2':
-<stdin>:012:   warning: variable `_2' occurs more than once in this scope.
 <stdin>:014: In clause for predicate `mdb_query.run/2':
 <stdin>:014:   warning: variable `_2' occurs more than once in this scope.
 <stdin>:012: In clause for predicate `mdb_query.run/2':
 <stdin>:012:   warning: variable `_2' occurs more than once in this scope.
+<stdin>:012: In clause for predicate `mdb_query.run/2':
+<stdin>:012:   warning: variable `_2' occurs more than once in this scope.
 <stdin>:015: In clause for predicate `mdb_query.run/2':
 <stdin>:015:   warning: variable `_2' occurs more than once in this scope.
 <stdin>:026: In clause for predicate `mdb_query.query/2':
@@ -42,10 +42,10 @@
 fail.
 No (more) solutions.
 ?- qperm([1,2,3], List), List = [4 | _].
-<stdin>:012: In clause for predicate `mdb_query.run/2':
-<stdin>:012:   warning: variable `_2' occurs more than once in this scope.
 <stdin>:014: In clause for predicate `mdb_query.run/2':
 <stdin>:014:   warning: variable `_2' occurs more than once in this scope.
+<stdin>:012: In clause for predicate `mdb_query.run/2':
+<stdin>:012:   warning: variable `_2' occurs more than once in this scope.
 <stdin>:012: In clause for predicate `mdb_query.run/2':
 <stdin>:012:   warning: variable `_2' occurs more than once in this scope.
 <stdin>:015: In clause for predicate `mdb_query.run/2':
Index: tests/debugger/interactive.exp2
===================================================================
RCS file: /home/mercury1/repository/tests/debugger/interactive.exp2,v
retrieving revision 1.6
diff -u -r1.6 interactive.exp2
--- tests/debugger/interactive.exp2	17 Jan 2003 05:56:53 -0000	1.6
+++ tests/debugger/interactive.exp2	17 Aug 2005 03:59:27 -0000
@@ -1,292 +1 @@
-       1:      1  1 CALL pred interactive.main/2-0 (cc_multi) interactive.m:21
-mdb> echo on
-Command echo enabled.
-mdb> print *
-       DCG_0 (arg 1)          	state('<<c_pointer>>')
-mdb>
-       2:      2  2 CALL pred interactive.data/1-0 (det) interactive.m:40 (interactive.m:19)
-mdb> print *
-mdb: there are no live variables.
-mdb>
-       3:      2  2 EXIT pred interactive.data/1-0 (det) interactive.m:40 (interactive.m:19)
-mdb> print *
-       HeadVar__1             	[1, 2, 3, 4, 5]
-mdb>
-       4:      3  2 CALL pred interactive.queen/2-0 (nondet) interactive.m:42 (interactive.m:19)
-mdb> print *
-       Data (arg 1)           	[1, 2, 3, 4, 5]
-mdb>
-       5:      4  3 CALL pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:43)
-mdb> print *
-       HeadVar__1             	[1, 2, 3, 4, 5]
-mdb>
-       6:      4  3 SWTC pred interactive.qperm/2-0 (nondet) s2; interactive.m:47
-mdb> print *
-       HeadVar__1             	[1, 2, 3, 4, 5]
-mdb>
-       7:      5  4 CALL pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-mdb> print *
-       HeadVar__2             	[1, 2, 3, 4, 5]
-mdb>
-       8:      5  4 DISJ pred interactive.qdelete/3-0 (nondet) c2;d1; interactive.m:52
-mdb> print *
-       HeadVar__2             	[1, 2, 3, 4, 5]
-mdb> level 1
-Ancestor level set to 1:
-   1  pred interactive.qperm/2-0 (nondet) interactive.m:48
-mdb> print *
-       HeadVar__1             	[1, 2, 3, 4, 5]
-       X                      	1
-       Y                      	[2, 3, 4, 5]
-mdb> up 1
-Ancestor level set to 2:
-   2  pred interactive.queen/2-0 (nondet) interactive.m:43
-mdb> vars
-        1 Data (arg 1)
-mdb> print *
-       Data (arg 1)           	[1, 2, 3, 4, 5]
-mdb>
-       9:      5  4 EXIT pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-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 interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-mdb> print *
-       HeadVar__1             	[2, 3, 4, 5]
-mdb>
-      11:      6  4 SWTC pred interactive.qperm/2-0 (nondet) s2; interactive.m:47
-mdb> print *
-       HeadVar__1             	[2, 3, 4, 5]
-mdb>
-      12:      7  5 CALL pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-mdb> print *
-       HeadVar__2             	[2, 3, 4, 5]
-mdb>
-      13:      7  5 DISJ pred interactive.qdelete/3-0 (nondet) c2;d1; interactive.m:52
-mdb> print *
-       HeadVar__2             	[2, 3, 4, 5]
-mdb>
-      14:      7  5 EXIT pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-mdb> print *
-       HeadVar__1             	2
-       HeadVar__2             	[2, 3, 4, 5]
-       HeadVar__3             	[3, 4, 5]
-mdb>
-      15:      8  5 CALL pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-mdb> goto -a 20
-      16:      8  5 SWTC pred interactive.qperm/2-0 (nondet) s2; interactive.m:47
-      17:      9  6 CALL pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-      18:      9  6 DISJ pred interactive.qdelete/3-0 (nondet) c2;d1; interactive.m:52
-      19:      9  6 EXIT pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-      20:     10  6 CALL pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-mdb> stack
-   0    4* pred interactive.qperm/2-0 (nondet) (interactive.m:46 and others)
-   4       pred interactive.queen/2-0 (nondet) (interactive.m:43)
-   5       pred interactive.main/2-0 (cc_multi) (interactive.m:19)
-mdb> stack -d
-   0      20      10    6 pred interactive.qperm/2-0 (nondet) (interactive.m:46) (empty)
-   1      15       8    5 pred interactive.qperm/2-0 (nondet) (interactive.m:50) s2;c4;
-   2      10       6    4 pred interactive.qperm/2-0 (nondet) (interactive.m:50) s2;c4;
-   3       5       4    3 pred interactive.qperm/2-0 (nondet) (interactive.m:50) s2;c4;
-   4       4       3    2 pred interactive.queen/2-0 (nondet) (interactive.m:43) c2;
-   5       1       1    1 pred interactive.main/2-0 (cc_multi) (interactive.m:19) ?;c2;q!;
-mdb> print *
-       HeadVar__1             	[4, 5]
-mdb> #
-Unknown command `#'. Give the command `help' for help.
-mdb> # Test interactive queries.
-Unknown command `#'. Give the command `help' for help.
-mdb> #
-Unknown command `#'. Give the command `help' for help.
-mdb> query interactive list
-?- <stdin>:026: Inferred :- pred query((list.list(character)), (list.list(character))).
-<stdin>:026: Inferred :- mode query(out, out) is multi.
-append(X, Y, ['a', 'b', 'c']).
-X = [], Y = ['a', 'b', 'c'], true ;
-X = ['a'], Y = ['b', 'c'], true ;
-X = ['a', 'b'], Y = ['c'], true ;
-X = ['a', 'b', 'c'], Y = [], true ;
-fail.
-No (more) solutions.
-?- <stdin>:026: Inferred :- pred query((list.list(int))).
-<stdin>:026: Inferred :- mode query(out) is nondet.
-qperm([1,2,3], List).
-List = [1, 2, 3], true ;
-List = [1, 3, 2], true ;
-List = [2, 1, 3], true ;
-List = [2, 3, 1], true ;
-List = [3, 1, 2], true ;
-List = [3, 2, 1], true ;
-fail.
-No (more) solutions.
-?- <stdin>:012: In clause for predicate `mdb_query.run/2':
-<stdin>:012:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:014: In clause for predicate `mdb_query.run/2':
-<stdin>:014:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:012: In clause for predicate `mdb_query.run/2':
-<stdin>:012:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:015: In clause for predicate `mdb_query.run/2':
-<stdin>:015:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:026: In clause for predicate `mdb_query.query/2':
-<stdin>:026:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:001: In clause for predicate `mdb_query.query/2':
-<stdin>:001:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:026: Inferred :- pred query((list.list(int)), (list.list(int))).
-<stdin>:026: Inferred :- mode query(out, out) is nondet.
-qperm([1,2,3], List), List = [2 | _].
-List = [2, 1, 3], _2 = [1, 3], true ;
-List = [2, 3, 1], _2 = [3, 1], true ;
-fail.
-No (more) solutions.
-?- <stdin>:012: In clause for predicate `mdb_query.run/2':
-<stdin>:012:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:014: In clause for predicate `mdb_query.run/2':
-<stdin>:014:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:012: In clause for predicate `mdb_query.run/2':
-<stdin>:012:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:015: In clause for predicate `mdb_query.run/2':
-<stdin>:015:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:026: In clause for predicate `mdb_query.query/2':
-<stdin>:026:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:001: In clause for predicate `mdb_query.query/2':
-<stdin>:001:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:026: Inferred :- pred query((list.list(int)), (list.list(int))).
-<stdin>:026: Inferred :- mode query(out, out) is nondet.
-qperm([1,2,3], List), List = [4 | _].
-fail.
-No (more) solutions.
-?- <stdin>:001: In clause for predicate `mdb_query.query/1':
-<stdin>:001:   in argument 1 of call to predicate `qperm/2':
-<stdin>:001:   in argument 2 of functor `[|]/2':
-<stdin>:001:   in argument 2 of functor `[|]/2':
-<stdin>:001:   in argument 1 of functor `[|]/2':
-<stdin>:001:   type error in unification of argument
-<stdin>:001:   and constant `"foo"'.
-<stdin>:001:   argument has type `int',
-<stdin>:001:   constant `"foo"' has type `string'.
-For more information, try recompiling with `-E'.
-qperm([1,2,"foo"], List).
-Compilation error(s) occurred.
-?- <stdin>:026: Inferred :- pred query((list.list(int))).
-<stdin>:014: In clause for `run(di, uo)':
-<stdin>:014:   in call to predicate `mdb_query.query/1':
-<stdin>:014:   mode error: arguments `List'
-<stdin>:014:   have insts `free',
-<stdin>:014:   which does not match any of the valid modes for
-<stdin>:014:   the callee, because of the following error.
-<stdin>:026: In clause for `query(out(not_reached))':
-<stdin>:026:   in argument 1 of call to predicate `interactive.qperm/2':
-<stdin>:026:   mode error: variable `HeadVar__2' has instantiatedness `free',
-<stdin>:026:   expected instantiatedness was `ground'.
-For more information, try recompiling with `-E'.
-qperm(List, [1]).
-Compilation error(s) occurred.
-?- quit.
-
-mdb> cc_query interactive list
-?- <stdin>:017: Inferred :- pred query((list.list(character)), (list.list(character))).
-<stdin>:017: Inferred :- mode query(out, out) is multi.
-append(X, Y, ['a', 'b', 'c']).
-X = [], Y = ['a', 'b', 'c'], true.
-?- <stdin>:017: Inferred :- pred query((list.list(int))).
-<stdin>:017: Inferred :- mode query(out) is nondet.
-qperm([1,2,3], List).
-List = [1, 2, 3], true.
-?- <stdin>:011: In clause for predicate `mdb_query.run/2':
-<stdin>:011:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:012: In clause for predicate `mdb_query.run/2':
-<stdin>:012:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:017: In clause for predicate `mdb_query.query/2':
-<stdin>:017:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:001: In clause for predicate `mdb_query.query/2':
-<stdin>:001:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:017: Inferred :- pred query((list.list(int)), (list.list(int))).
-<stdin>:017: Inferred :- mode query(out, out) is nondet.
-qperm([1,2,3], List), List = [2 | _].
-List = [2, 1, 3], _2 = [1, 3], true.
-?- <stdin>:011: In clause for predicate `mdb_query.run/2':
-<stdin>:011:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:012: In clause for predicate `mdb_query.run/2':
-<stdin>:012:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:017: In clause for predicate `mdb_query.query/2':
-<stdin>:017:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:001: In clause for predicate `mdb_query.query/2':
-<stdin>:001:   warning: variable `_2' occurs more than once in this scope.
-<stdin>:017: Inferred :- pred query((list.list(int)), (list.list(int))).
-<stdin>:017: Inferred :- mode query(out, out) is nondet.
-qperm([1,2,3], List), List = [4 | _].
-No solution.
-?- quit.
-
-mdb> io_query interactive list
-run <-- main.
-[1, 3, 5, 2, 4]
-run <-- if { append(X, Y, ['a', 'b', 'c']) } then print("X = "), print(X), print(", Y = "), print(Y), nl else print("No solution\n").
-X = [], Y = ['a', 'b', 'c']
-run <-- if { qperm([1,2,3], List) } then print(List), nl else [].
-[1, 2, 3]
-run <-- if { qperm([1,2,3], List), List = [2 | _] } then print(List), nl else { true }.
-[2, 1, 3]
-run <-- if { qperm([1,2,3], List), List = [4 | _] } then print(List), nl else print("No solution, as expected."), io__nl.
-No solution, as expected.
-run <-- quit.
-
-mdb> retry
-This command is a no-op from this port.
-mdb> print *
-       HeadVar__1             	[4, 5]
-mdb> finish -a
-      21:     10  6 SWTC pred interactive.qperm/2-0 (nondet) s2; interactive.m:47
-      22:     11  7 CALL pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-      23:     11  7 DISJ pred interactive.qdelete/3-0 (nondet) c2;d1; interactive.m:52
-      24:     11  7 EXIT pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-      25:     12  7 CALL pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      26:     12  7 SWTC pred interactive.qperm/2-0 (nondet) s2; interactive.m:47
-      27:     13  8 CALL pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-      28:     13  8 DISJ pred interactive.qdelete/3-0 (nondet) c2;d1; interactive.m:52
-      29:     13  8 EXIT pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-      30:     14  8 CALL pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      31:     14  8 SWTC pred interactive.qperm/2-0 (nondet) s1; interactive.m:46
-      32:     14  8 EXIT pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      33:     12  7 EXIT pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      34:     10  6 EXIT pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-mdb> register --quiet
-mdb> break print_list
- 0: + stop  interface pred interactive.print_list/3-0 (det)
-mdb> break qdelete
- 1: + stop  interface pred interactive.qdelete/3-0 (nondet)
-mdb> continue -a
-      35:      8  5 EXIT pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      36:      6  4 EXIT pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      37:      4  3 EXIT pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:43)
-      38:     15  3 CALL pred interactive.safe/1-0 (semidet) interactive.m:56 (interactive.m:44)
-      39:     15  3 SWTC pred interactive.safe/1-0 (semidet) s2; interactive.m:57
-      40:     16  4 CALL pred interactive.nodiag/3-0 (semidet) interactive.m:61 (interactive.m:58)
-      41:     16  4 SWTC pred interactive.nodiag/3-0 (semidet) s2; interactive.m:62
-      42:     16  4 THEN pred interactive.nodiag/3-0 (semidet) s2;c6;t; interactive.m:66
-      43:     16  4 FAIL pred interactive.nodiag/3-0 (semidet) interactive.m:61 (interactive.m:58)
-      44:     15  3 FAIL pred interactive.safe/1-0 (semidet) interactive.m:56 (interactive.m:44)
-      45:      4  3 REDO pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:43)
-      46:      6  4 REDO pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      47:      8  5 REDO pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      48:     10  6 REDO pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      49:     12  7 REDO pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      50:     14  8 REDO pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      51:     14  8 FAIL pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-      52:     13  8 REDO pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-mdb> step -aS 5
-      53:     13  8 DISJ pred interactive.qdelete/3-0 (nondet) c2;d2; interactive.m:53
-      54:     17  9 CALL pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:54)
-      55:     17  9 FAIL pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:54)
-      56:     13  8 FAIL pred interactive.qdelete/3-0 (nondet) interactive.m:52 (interactive.m:48)
-      57:     12  7 FAIL pred interactive.qperm/2-0 (nondet) interactive.m:46 (interactive.m:50)
-mdb> disable 1
- 1: - stop  interface pred interactive.qdelete/3-0 (nondet)
-mdb> continue -n
-     675:    141  2 CALL pred interactive.print_list/3-0 (det) interactive.m:83 (interactive.m:20)
-mdb> continue -n -S
-[1, 3, 5, 2, 4]
+### THIS FILE IS NOT CURRENTLY USED ###



--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list