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 })));
        }