[m-dev.] trivial diff: fix goal wrapping for record syntax

Simon Taylor stayl at cs.mu.OZ.AU
Fri Jan 5 17:58:54 AEDT 2001


> On 04-Jan-2001, Peter Ross <peter.ross at miscrit.be> wrote:
> > On Thu, Jan 04, 2001 at 04:57:05PM +1100, Simon Taylor wrote:
> > > 
> > > compiler/make_hlds.m:
> > > 	Don't wrap the goals added by the compiler for a record syntax
> > > 	expression in a `some' to make mode analysis treat them as an atomic
> > > 	goal, because that is not consistent with how other goals are handled. 
> >
> > I am curious as to why this is a problem.
> 
> Me too.  If you're committing this on the release branch,
> it must be because it fixes a bug (I hope ;-), and so
> I'd like to see a regression test for the bug that it fixes.
 
Estimated hours taken: 0.25

tests/valid/Mmakefile:
tests/valid/record_syntax_bug_3.m:
	Add a test case for my recent bug fix for record syntax.

Index: Mmakefile
===================================================================
RCS file: /home/mercury1/repository/tests/valid/Mmakefile,v
retrieving revision 1.80
diff -u -u -r1.80 Mmakefile
--- Mmakefile	2000/12/06 06:05:58	1.80
+++ Mmakefile	2001/01/05 06:34:03
@@ -124,6 +124,7 @@
 	quantifier_warning.m \
 	record_syntax_bug.m \
 	record_syntax_bug_2.m \
+	record_syntax_bug_3.m \
 	recursive_no_tag_type.m \
 	same_length_2.m \
 	semidet_disj.m \
Index: record_syntax_bug_3.m
===================================================================
RCS file: record_syntax_bug_3.m
diff -N record_syntax_bug_3.m
--- /dev/null	Fri Jan  5 17:17:26 2001
+++ record_syntax_bug_3.m	Fri Jan  5 17:41:18 2001
@@ -0,0 +1,41 @@
+% The compiler of 4/1/2001 reported a mode error for this test
+% case because it did not allow reordering of goals into the middle
+% of a field update expression.
+:- module record_syntax_bug_3.
+
+:- interface.
+
+:- type t1.
+
+:- func record_bug(t1) = t1.
+
+:- implementation.
+
+:- import_module int.
+
+:- type t1
+        ---> t1(t1_f1 :: int, t1_f2 :: t2).
+
+:- type t2
+        ---> t2(t2_f1 :: int).
+
+record_bug(T0) = T :-
+        T = T0 ^ field1(X) ^ field2(Y) := 3,
+        Y = X + 1.
+
+:- func field1(int::out, t1::in) = (t2::out) is det.
+
+field1(T ^ t1_f1, T) = T ^ t1_f2.
+
+:- func 'field1 :='(int, t1, t2) = t1. 
+
+'field1 :='(_, T, T2) = T ^ t1_f2 := T2.
+
+:- func field2(int, t2) = int.
+
+field2(Int, T2) = T2 ^ t2_f1 + Int.
+
+:- func 'field2 :='(int, t2, int) = t2.
+
+'field2 :='(Int, T2, Value) = T2 ^ t2_f1 := Value - Int.
+
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------



More information about the developers mailing list