[pure-lang-svn] SF.net SVN: pure-lang:[712] pure/trunk
Status: Beta
Brought to you by:
agraef
|
From: <ag...@us...> - 2008-09-05 09:38:35
|
Revision: 712
http://pure-lang.svn.sourceforge.net/pure-lang/?rev=712&view=rev
Author: agraef
Date: 2008-09-05 09:38:43 +0000 (Fri, 05 Sep 2008)
Log Message:
-----------
Bugfixes.
Modified Paths:
--------------
pure/trunk/ChangeLog
pure/trunk/runtime.cc
Added Paths:
-----------
pure/trunk/test/test023.log
pure/trunk/test/test023.pure
Modified: pure/trunk/ChangeLog
===================================================================
--- pure/trunk/ChangeLog 2008-09-05 02:15:43 UTC (rev 711)
+++ pure/trunk/ChangeLog 2008-09-05 09:38:43 UTC (rev 712)
@@ -1,5 +1,8 @@
2008-09-05 Albert Graef <Dr....@t-...>
+ * runtime.cc (pure_force): Fix a rather obscure segfault in the
+ thunk implementation. See also test/test023.pure.
+
* lexer.ll: Warn about used identifiers which are also interactive
commands.
Modified: pure/trunk/runtime.cc
===================================================================
--- pure/trunk/runtime.cc 2008-09-05 02:15:43 UTC (rev 711)
+++ pure/trunk/runtime.cc 2008-09-05 09:38:43 UTC (rev 712)
@@ -1438,6 +1438,7 @@
// that recursively
if (ret->tag == 0 && ret->data.clos && ret->data.clos->n == 0)
ret = pure_force(pure_new_internal(ret));
+ pure_new_internal(ret);
// memoize the result
assert(x!=ret);
pure_free_clos(x);
@@ -1458,7 +1459,7 @@
x->data.clos = pure_copy_clos(x->data.clos);
break;
}
- pure_freenew(ret);
+ pure_free_internal(ret);
return x;
} else {
#if DEBUG>2
Added: pure/trunk/test/test023.log
===================================================================
--- pure/trunk/test/test023.log (rev 0)
+++ pure/trunk/test/test023.log 2008-09-05 09:38:43 UTC (rev 712)
@@ -0,0 +1,47 @@
+odd x/*0:1*/ = x/*0:1*/ mod 2;
+{
+ rule #0: odd x = x mod 2
+ state 0: #0
+ <var> state 1
+ state 1: #0
+}
+{
+ rule #0: x = 1..1e+307*1e+307
+ state 0: #0
+ <var> state 1
+ state 1: #0
+}
+let x = 1..1e+307*1e+307;
+{
+ rule #0: y = filter odd x
+ state 0: #0
+ <var> state 1
+ state 1: #0
+}
+let y = filter odd x;
+{
+ rule #0: z = zip x y
+ state 0: #0
+ <var> state 1
+ state 1: #0
+}
+let z = zip x y;
+{
+ rule #0: u,v = unzip z
+ state 0: #0
+ <app> state 1
+ state 1: #0
+ <app> state 2
+ state 2: #0
+ , state 3
+ state 3: #0
+ <var> state 4
+ state 4: #0
+ <var> state 5
+ state 5: #0
+}
+let u,v = unzip z;
+list (take 10 u);
+[1,2,3,4,5,6,7,8,9,10]
+list (take 10 v);
+[1,3,5,7,9,11,13,15,17,19]
Added: pure/trunk/test/test023.pure
===================================================================
--- pure/trunk/test/test023.pure (rev 0)
+++ pure/trunk/test/test023.pure 2008-09-05 09:38:43 UTC (rev 712)
@@ -0,0 +1,9 @@
+// thunk regression test (cf. r712)
+
+odd x = x mod 2;
+
+let x = 1..inf; let y = filter odd x; let z = zip x y;
+let u,v = unzip z;
+
+list (take 10 u);
+list (take 10 v);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|