Added exception throws if condition isn't boolean

This commit is contained in:
Jonathan Turner 2009-06-05 12:23:55 +00:00
parent a8fb111275
commit 937b4e0e87

View File

@ -240,7 +240,13 @@ Boxed_Value eval_token(BoxedCPP_System &ss, TokenPtr node) {
break; break;
case(TokenType::If_Block) : { case(TokenType::If_Block) : {
retval = eval_token(ss, node->children[0]); retval = eval_token(ss, node->children[0]);
bool cond = Cast_Helper<bool &>()(retval); bool cond;
try {
cond = Cast_Helper<bool &>()(retval);
}
catch (std::exception) {
throw EvalError("If condition not boolean");
}
if (cond) { if (cond) {
retval = eval_token(ss, node->children[1]); retval = eval_token(ss, node->children[1]);
} }
@ -254,7 +260,12 @@ Boxed_Value eval_token(BoxedCPP_System &ss, TokenPtr node) {
} }
else if (node->children[i]->text == "elseif") { else if (node->children[i]->text == "elseif") {
retval = eval_token(ss, node->children[i+1]); retval = eval_token(ss, node->children[i+1]);
cond = Cast_Helper<bool &>()(retval); try {
cond = Cast_Helper<bool &>()(retval);
}
catch (std::exception) {
throw EvalError("Elseif condition not boolean");
}
if (cond) { if (cond) {
retval = eval_token(ss, node->children[i+2]); retval = eval_token(ss, node->children[i+2]);
} }
@ -267,11 +278,22 @@ Boxed_Value eval_token(BoxedCPP_System &ss, TokenPtr node) {
break; break;
case(TokenType::While_Block) : { case(TokenType::While_Block) : {
retval = eval_token(ss, node->children[0]); retval = eval_token(ss, node->children[0]);
bool cond = Cast_Helper<bool &>()(retval); bool cond;
try {
cond = Cast_Helper<bool &>()(retval);
}
catch (std::exception) {
throw EvalError("While condition not boolean");
}
while (cond) { while (cond) {
eval_token(ss, node->children[1]); eval_token(ss, node->children[1]);
retval = eval_token(ss, node->children[0]); retval = eval_token(ss, node->children[0]);
cond = Cast_Helper<bool &>()(retval); try {
cond = Cast_Helper<bool &>()(retval);
}
catch (std::exception) {
throw EvalError("While condition not boolean");
}
} }
retval = Boxed_Value(); retval = Boxed_Value();
} }