Boo.Lang.Compiler.Steps.GeneratorMethodProcessor.LeaveTryStatement C# (CSharp) Метод

LeaveTryStatement() публичный Метод

public LeaveTryStatement ( Boo.Lang.Compiler.Ast.TryStatement node ) : void
node Boo.Lang.Compiler.Ast.TryStatement
Результат void
        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);
            }
        }