Fix default cmake build to use readline and gdb. Add simple try/catch/throw exceptions

This commit is contained in:
Jonathan Turner
2009-09-18 22:04:07 +00:00
parent a754ce9eb6
commit 204d379176
5 changed files with 115 additions and 6 deletions

View File

@@ -579,6 +579,40 @@ namespace chaiscript
return retval;
}
/**
* Evaluates an if/elseif/else block
*/
template <typename Eval_System>
Boxed_Value eval_try(Eval_System &ss, const TokenPtr &node) {
Boxed_Value retval;
retval = Boxed_Value();
ss.new_scope();
try {
retval = eval_token(ss, node->children[0]);
}
catch (std::exception &) {
// nothing
std::cout << "DEBUG: std::exception caught" << std::endl;
}
catch (Boxed_Value &bv) {
if (node->children.size() > 2) {
if (node->children[1]->text == "catch") {
if (node->children.size() > 3) {
ss.add_object(node->children[2]->text, bv);
retval = eval_token(ss, node->children[3]);
}
else {
retval = eval_token(ss, node->children[2]);
}
}
}
}
ss.pop_scope();
return retval;
}
/**
* Evaluates an if/elseif/else block
*/
@@ -924,6 +958,10 @@ namespace chaiscript
return eval_dot_access(ss, node);
break;
case(Token_Type::Try) :
return eval_try(ss, node);
break;
case(Token_Type::If) :
return eval_if(ss, node);
break;