Handle break and return better.

This commit is contained in:
Stephen Chung
2020-03-17 17:33:37 +08:00
parent d2951bfb6b
commit 8efe080412
9 changed files with 242 additions and 142 deletions

View File

@@ -1068,7 +1068,9 @@ impl Engine<'_> {
if *guard_val {
match self.eval_stmt(scope, body) {
Ok(_) => (),
Err(EvalAltResult::LoopBreak) => return Ok(().into_dynamic()),
Err(EvalAltResult::ErrorLoopBreak(_)) => {
return Ok(().into_dynamic())
}
Err(x) => return Err(x),
}
} else {
@@ -1083,7 +1085,7 @@ impl Engine<'_> {
Stmt::Loop(body) => loop {
match self.eval_stmt(scope, body) {
Ok(_) => (),
Err(EvalAltResult::LoopBreak) => return Ok(().into_dynamic()),
Err(EvalAltResult::ErrorLoopBreak(_)) => return Ok(().into_dynamic()),
Err(x) => return Err(x),
}
},
@@ -1102,7 +1104,7 @@ impl Engine<'_> {
match self.eval_stmt(scope, body) {
Ok(_) => (),
Err(EvalAltResult::LoopBreak) => break,
Err(EvalAltResult::ErrorLoopBreak(_)) => break,
Err(x) => return Err(x),
}
}
@@ -1114,7 +1116,7 @@ impl Engine<'_> {
}
// Break statement
Stmt::Break(_) => Err(EvalAltResult::LoopBreak),
Stmt::Break(pos) => Err(EvalAltResult::ErrorLoopBreak(*pos)),
// Empty return
Stmt::ReturnWithVal(None, ReturnType::Return, pos) => {