mirror of
https://github.com/ChaiScript/ChaiScript.git
synced 2026-02-07 18:26:49 +08:00
Added exception throws if condition isn't boolean
This commit is contained in:
parent
a8fb111275
commit
937b4e0e87
@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user