[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. |