示例#1
0
        /// <summary>
        /// Performs transfer function on a block represent by node.
        /// </summary>
        /// <param name="node"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        protected override ScopeEscapeDomain Flow(CFGNode node, ScopeEscapeDomain input)
        {
            var nState  = input.Clone();
            var visitor = new EscapeTransferVisitor(nState, this);

            visitor.Visit(node);
            UpdateResults(visitor);
            return(visitor.State.Clone());
        }
示例#2
0
        /// <summary>
        /// Updates the results of the analysis.
        /// </summary>
        /// <param name="visitor"></param>
        private void UpdateResults(EscapeTransferVisitor visitor)
        {
            interestingRowEscaped |= visitor.SomeRowEscaped;

            // We currently do not need fine grained results, so
            // this saves us execution time.
            //foreach (var key in visitor.PreStates.Keys)
            //{
            //    preResults[key] = visitor.PreStates[key];
            //}

            //foreach (var key in visitor.PostStates.Keys)
            //{
            //    postResults[key] = visitor.PostStates[key];
            //}
        }