protected override void ComputeBeforeDataflow(Method m) { ObjectConsistencyAnalysis oea = (ObjectConsistencyAnalysis)this.pointsToStateAnalysys; nonNullInfo = oea.GetNonNullInfo(m); base.ComputeBeforeDataflow(m); }
public INonNullInformation GetNonNullInfo(Method m) { INonNullInformation nonNullInfo = null; if (nonNullInfoCache.ContainsKey(m)) { return(nonNullInfoCache[m]); } if (this.analyzer != null) { nonNullInfo = NonNullChecker.Check(this.typeSystem, m, this.analyzer); nonNullInfoCache[m] = nonNullInfo; } return(nonNullInfo); }
public override Method VisitMethod(Method method) { if (this.analyzer != null) { INonNullInformation nonNullInfo = this.analyzer.NonNullInfo; if (nonNullInfo == null) { nonNullInfo = NonNullChecker.Check(this.typeSystem, method, this.analyzer); nonNullInfoCache[method] = nonNullInfo; } } // To be sure that requires are computed // as I am bypassing that blocks of code if (method.Contract != null) { RequiresList requiresL = method.Contract.Requires; EnsuresList ensuresL = method.Contract.Ensures; } return(base.VisitMethod(method)); }
/// <summary> /// Put general analysis targeting to general IL properties. /// </summary> /// <param name="method"></param> protected void GeneralAnalysis(Method method) { nonNullInfo = null; if (!this.CodeIsWellFormed) { return; } if (debug) { ControlFlowGraph cfg = GetCFG(method); if (cfg != null) { cfg.Display(Console.Out); } } if (!method.Name.Name.StartsWith("Microsoft.Contracts")) { // Definite assignment checking //System.Console.WriteLine("--------------- Analyzing Method: {0}", method.Name); if (this.DefiniteAssignmentChecking) { // For every statement, three things are returned from this pre- stage analysis // 1) which program vars (that represent NN arrays) are created but not committed // 2) which program vars (that represent NN arrays) are created and committed between // the creation and commitment of current array. // 3) if the statement is a commitment call for an NN array, whether it // is ok to lift the array to be non-delayed. PreDAStatus preAnalysisResult = MethodReachingDefNNArrayChecker.Check(typeSystem, method, this); if (preAnalysisResult != null) { delayInfo = MethodDefiniteAssignmentChecker.Check(typeSystem, method, this, preAnalysisResult); } } if (Analyzer.Debug) { if (delayInfo != null) { System.Console.WriteLine("----- delay info count: {0}", delayInfo.Count()); } } if (this.ExposureChecking) { ExposureChecker.Check(typeSystem, method, this); } // NonNull checking if (this.NonNullChecking) { nonNullInfo = NonNullChecker.Check(typeSystem, method, this); } //System.Console.WriteLine("---------------- Finished Analyzing Method:{0}", method.Name); } }