Exemplo n.º 1
0
        public static ForwardAnalysis <AbstractState, EdgeData> Make <Source, Dest, Context> (
            IILDecoder <APC, Source, Dest, Context, EdgeData> decoder,
            IAnalysis <APC, AbstractState, IILVisitor <APC, Source, Dest, AbstractState, AbstractState>, EdgeData> analysis)
            where Context : IMethodContextProvider
        {
            IILVisitor <APC, Source, Dest, AbstractState, AbstractState> visitor = analysis.GetVisitor();
            var forwardAnalysisSolver = new ForwardAnalysis <AbstractState, EdgeData> (
                decoder.ContextProvider.MethodContext.CFG,
                (pc, state) => decoder.ForwardDecode <AbstractState, AbstractState, IILVisitor <APC, Source, Dest, AbstractState, AbstractState> > (pc, visitor, state),
                analysis.Join,
                analysis.ImmutableVersion,
                analysis.MutableVersion,
                analysis.EdgeConversion,
                decoder.EdgeData,
                (pc, state) => {
                if (!decoder.IsUnreachable(pc))
                {
                    return(analysis.IsBottom(pc, state));
                }

                return(true);
            },
                analysis.Dump
                );

            analysis.SaveFixPointInfo(forwardAnalysisSolver);
            return(forwardAnalysisSolver);
        }