public override void LeaveTryStatement(TryStatement node)
{
TryStatementInfo info = _tryStatementStack.Pop();
if (info._containsYield) {
ReplaceCurrentNode(info._replacement);
TryStatementInfo currentTry = (_tryStatementStack.Count > 0) ? _tryStatementStack.Peek() : null;
info._replacement.Add(node.ProtectedBlock);
if (currentTry != null) {
ConvertTryStatement(currentTry);
info._replacement.Add(SetStateTo(currentTry._stateNumber));
} else {
// leave try block, reset state to prevent ensure block from being called again
info._replacement.Add(SetStateTo(_finishedStateNumber));
}
BooMethodBuilder ensureMethod = _enumerator.AddMethod("$ensure" + info._stateNumber, TypeSystemServices.VoidType, TypeMemberModifiers.Private);
ensureMethod.Body.Add(info._statement.EnsureBlock);
info._ensureMethod = ensureMethod.Entity;
info._replacement.Add(CallMethodOnSelf(ensureMethod.Entity));
_convertedTryStatements.Add(info);
}
}