public override void OnYieldStatement(YieldStatement node)
{
if (_state.TryBlockDepth == _state.ProtectedBlockDepth) {
// we are currently only in the protected blocks, not in any "except" or "ensure" blocks.
foreach (TryStatement tryBlock in _state.TryBlocks) {
// only allow yield in the try part of try-ensure blocks, fail if it is a try-except block
if (tryBlock.FailureBlock != null || tryBlock.ExceptionHandlers.Count > 0) {
Error(CompilerErrorFactory.YieldInsideTryExceptOrEnsureBlock(node));
break;
}
}
} else {
Error(CompilerErrorFactory.YieldInsideTryExceptOrEnsureBlock(node));
}
}