[pure-lang-svn] SF.net SVN: pure-lang:[536] pure/trunk
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-08-19 06:23:42
|
Revision: 536 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=536&view=rev Author: agraef Date: 2008-08-19 06:23:50 +0000 (Tue, 19 Aug 2008) Log Message: ----------- Add a stack check to 'def' constant conversion. Modified Paths: -------------- pure/trunk/interpreter.cc pure/trunk/interpreter.hh Modified: pure/trunk/interpreter.cc =================================================================== --- pure/trunk/interpreter.cc 2008-08-18 23:38:38 UTC (rev 535) +++ pure/trunk/interpreter.cc 2008-08-19 06:23:50 UTC (rev 536) @@ -788,9 +788,11 @@ return res; } -static expr pure_expr_to_expr(pure_expr *x) +expr interpreter::pure_expr_to_expr(pure_expr *x) { - // FIXME: We might want to do stack checks here. + char test; + if (stackmax > 0 && stackdir*(&test - baseptr) >= stackmax) + throw err("expression too deep in constant definition"); switch (x->tag) { case EXPR::APP: return expr(pure_expr_to_expr(x->data.x[0]), Modified: pure/trunk/interpreter.hh =================================================================== --- pure/trunk/interpreter.hh 2008-08-18 23:38:38 UTC (rev 535) +++ pure/trunk/interpreter.hh 2008-08-19 06:23:50 UTC (rev 536) @@ -504,6 +504,7 @@ Builder& act_builder() { return act_env().builder; } pure_expr *const_value(expr x); pure_expr *const_app_value(expr x); + expr pure_expr_to_expr(pure_expr *x); pure_expr *doeval(expr x, pure_expr*& e); pure_expr *dodefn(env vars, expr lhs, expr rhs, pure_expr*& e); llvm::Value *codegen(expr x); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |