public override Result ForwardDecode <Data, Result, Visitor> (APC pc, Visitor visitor, Data data) { Label label; if (TryGetLabel(pc.Index, out label)) { return(base.ForwardDecode <Data, Result, Visitor> (pc, visitor, data)); } int endOldIndex; if (IsBeginOld(pc.Index, out endOldIndex)) { CFGBlock block = Subroutine.InferredBeginEndBijection(pc); return(visitor.BeginOld(pc, new APC(block, endOldIndex, pc.SubroutineContext), data)); } int beginOldIndex; if (IsEndOld(pc.Index, out beginOldIndex)) { TypeNode endOldType; CFGBlock block = Subroutine.InferredBeginEndBijection(pc, out endOldType); return(visitor.EndOld(pc, new APC(block, beginOldIndex, pc.SubroutineContext), endOldType, Dummy.Value, Dummy.Value, data)); } return(visitor.Nop(pc, data)); }