public override void TraverseChildren(IGotoStatement gotoStatement) { IName target = gotoStatement.TargetStatement.Label; ITryCatchFinallyStatement targetStatement = this.sink.MostNestedTryStatement(target); int count = 0; while (count < this.sink.nestedTryCatchFinallyStatements.Count) { int index = this.sink.nestedTryCatchFinallyStatements.Count - count - 1; ITryCatchFinallyStatement nestedStatement = this.sink.nestedTryCatchFinallyStatements[index].Item1; if (targetStatement == nestedStatement) { break; } int labelId; string label; this.sink.AddEscapingEdge(nestedStatement, out labelId, out label); StmtBuilder.Add(TranslationHelper.BuildAssignCmd(Bpl.Expr.Ident(this.sink.LabelVariable), Bpl.Expr.Literal(labelId))); string finallyLabel = this.sink.FindOrCreateFinallyLabel(nestedStatement); StmtBuilder.Add(new Bpl.GotoCmd(gotoStatement.Token(), new List <string>(new string[] { finallyLabel }))); StmtBuilder.AddLabelCmd(label); count++; } StmtBuilder.Add(new Bpl.GotoCmd(gotoStatement.Token(), new List <string>(new string[] { target.Value }))); }