예제 #1
0
        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));
        }