[pure-lang-svn] SF.net SVN: pure-lang: [141] pure/trunk/interpreter.cc
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-05-27 08:38:29
|
Revision: 141 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=141&view=rev Author: agraef Date: 2008-05-27 01:38:37 -0700 (Tue, 27 May 2008) Log Message: ----------- Make body of 'when' clause tail-recursive. Modified Paths: -------------- pure/trunk/interpreter.cc Modified: pure/trunk/interpreter.cc =================================================================== --- pure/trunk/interpreter.cc 2008-05-27 04:46:07 UTC (rev 140) +++ pure/trunk/interpreter.cc 2008-05-27 08:38:37 UTC (rev 141) @@ -2765,8 +2765,8 @@ // end = end of rule list { if (r == end) { - Value *v = codegen(x); - return v; + toplevel_codegen(x); + return 0; } else { Env& act = act_env(); rulel::const_iterator s = r; @@ -2788,7 +2788,8 @@ // matched => emit code for the reduct e.f->getBasicBlockList().push_back(matchedbb); e.builder.SetInsertPoint(matchedbb); - e.CreateRet(when_codegen(x, m+1, s, end)); + Value *v = when_codegen(x, m+1, s, end); + if (v) e.CreateRet(v); // failed => throw an exception e.f->getBasicBlockList().push_back(failedbb); e.builder.SetInsertPoint(failedbb); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |