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