Exemplo n.º 1
0
        private int FindStartIndex(CFGBlock from)
        {
            //binary search
            int l = 0;
            int r = this.edges.Count;

            while (l < r)
            {
                int median           = (l + r) / 2;
                int medianBlockIndex = this.edges [median].From.Index;

                if (medianBlockIndex == from.Index)
                {
                    while (median > 0 && this.edges [median - 1].From.Index == medianBlockIndex)
                    {
                        --median;
                    }
                    return(median);
                }

                if (medianBlockIndex < from.Index)
                {
                    l = median + 1;
                }
                else
                {
                    r = median;
                }
            }

            return(this.edges.Count);
        }
Exemplo n.º 2
0
        public bool TryGetContainingMethod(out Method method)
        {
            Sequence <Edge <CFGBlock, EdgeTag> > list = this.SubroutineContext;
            CFGBlock block = this.Block;

            while (block != null)
            {
                var mi = block.Subroutine as IMethodInfo;
                if (mi != null)
                {
                    method = mi.Method;
                    return(true);
                }

                if (list != null)
                {
                    block = list.Head.From;
                    list  = list.Tail;
                }
                else
                {
                    block = null;
                }
            }
            method = default(Method);
            return(false);
        }
Exemplo n.º 3
0
 Sequence <Pair <EdgeTag, Subroutine> > IEdgeSubroutineAdaptor.GetOrdinaryEdgeSubroutinesInternal(
     CFGBlock @from, CFGBlock to,
     Sequence <Edge <CFGBlock, EdgeTag> > context)
 {
     return(DecoratorHelper.Inner <IEdgeSubroutineAdaptor> (this)
            .GetOrdinaryEdgeSubroutinesInternal(from, to, context).Where(
                (pair) => !pair.Value.IsContract && !pair.Value.IsOldValue));
 }
Exemplo n.º 4
0
 public abstract void AddEdgeSubroutine(CFGBlock from, CFGBlock to, Subroutine subroutine, EdgeTag tag);
Exemplo n.º 5
0
 public abstract bool IsSplitPoint(CFGBlock block);
Exemplo n.º 6
0
 public abstract bool IsJoinPoint(CFGBlock block);
Exemplo n.º 7
0
 IEnumerable <Pair <Tag, CFGBlock> > IGraph <CFGBlock, Tag> .Successors(CFGBlock node)
 {
     return(this [node]);
 }
Exemplo n.º 8
0
 public abstract IEnumerable <CFGBlock> ExceptionHandlers <Data, Type> (CFGBlock block, Subroutine innerSubroutine,
                                                                        Data data, IHandlerFilter <Data> handlerPredicate);
Exemplo n.º 9
0
 public abstract Sequence <Pair <EdgeTag, Subroutine> > EdgeSubroutinesOuterToInner(CFGBlock current, CFGBlock succ, out bool isExceptionHandlerEdge, Sequence <Edge <CFGBlock, EdgeTag> > context);
Exemplo n.º 10
0
 public abstract bool IsCatchFilterHeader(CFGBlock block);
Exemplo n.º 11
0
 public APC(CFGBlock block, int index, Sequence <Edge <CFGBlock, EdgeTag> > subroutineContext)
 {
     this.Block             = block;
     this.Index             = index;
     this.SubroutineContext = subroutineContext;
 }
Exemplo n.º 12
0
 public static APC ForStart(CFGBlock block, Sequence <Edge <CFGBlock, EdgeTag> > subroutineContext)
 {
     return(new APC(block, 0, subroutineContext));
 }
Exemplo n.º 13
0
 public static APC ForEnd(CFGBlock block, Sequence <Edge <CFGBlock, EdgeTag> > subroutineContext)
 {
     return(new APC(block, block.Count, subroutineContext));
 }
Exemplo n.º 14
0
 public abstract LispList <Pair <EdgeTag, Subroutine> > GetOrdinaryEdgeSubroutines(CFGBlock current, CFGBlock succ, LispList <Edge <CFGBlock, EdgeTag> > context);
Exemplo n.º 15
0
 public abstract bool IsSubroutineEnd(CFGBlock block);
Exemplo n.º 16
0
 public abstract bool IsSubroutineStart(CFGBlock block);
Exemplo n.º 17
0
 bool IsJoinPoint(CFGBlock block)
 {
     return(block.Subroutine.IsJoinPoint(block));
 }
Exemplo n.º 18
0
 public abstract APC ComputeTargetFinallyContext(APC pc, CFGBlock succ);
Exemplo n.º 19
0
 public IEnumerable <Pair <EdgeTag, CFGBlock> > SuccessorEdgesFor(CFGBlock block)
 {
     return(SuccessorEdges [block]);
 }
Exemplo n.º 20
0
 public abstract Sequence <Pair <EdgeTag, Subroutine> > GetOrdinaryEdgeSubroutines(CFGBlock current, CFGBlock succ, Sequence <Edge <CFGBlock, EdgeTag> > context);
Exemplo n.º 21
0
 public abstract IEnumerable <CFGBlock> PredecessorBlocks(CFGBlock block);
Exemplo n.º 22
0
 private bool IsSplitPoint(CFGBlock block)
 {
     return(block.Subroutine.IsSplitPoint(block));
 }
Exemplo n.º 23
0
 public ICollection <Pair <Tag, CFGBlock> > this [CFGBlock node]
 {
     get { return(new Successors(this, FindStartIndex(node))); }
 }