CFG(Analysis analysis) : base() { _cfa = new CFA(this); _analysis = analysis; }
public void Add(Mono.Cecil.MethodDefinition definition) { // Do not analyze Campy modules generally... if (Options.Singleton.Get(Options.OptionType.DoNotAnalyzeCampyAssemblies)) { if (definition.Module != null && Analysis.IsCampyModuleName(definition.Module.Name)) { return; } } if (_done.Contains(definition)) { return; } if (_to_do.Contains(definition)) { return; } bool ignore = false; foreach (KeyValuePair <String, String> pair in _analysis._filter) { String pat = pair.Key; String ty = pair.Value; // Match based on type "ty". if (ty.Equals("-method")) { // match on name/parameters. Regex reg = new Regex(@"^" + pat + @"$"); String def = definition.ToString(); Match m = reg.Match(def); int ind = m.Index; int l = m.Length; if (!(ind >= 0 && l > 0)) { continue; } ignore = true; break; } else if (ty.Equals("+method")) { // match on name/parameters. Regex reg = new Regex(@"^" + pat + @"$"); String def = definition.ToString(); Match m = reg.Match(def); int ind = m.Index; int l = m.Length; if (!(ind >= 0 && l > 0)) { continue; } ignore = false; break; } else if (ty.Equals("-namespace")) { // match on name/parameters. Regex reg = new Regex(@"^" + pat + @"$"); String def = definition.DeclaringType.Namespace.ToString(); Match m = reg.Match(def); int ind = m.Index; int l = m.Length; if (!(ind >= 0 && l > 0)) { continue; } ignore = true; break; } else if (ty.Equals("+namespace")) { // match on name/parameters. Regex reg = new Regex(@"^" + pat + @"$"); String def = definition.DeclaringType.Namespace.ToString(); Match m = reg.Match(def); int ind = m.Index; int l = m.Length; if (!(ind >= 0 && l > 0)) { continue; } ignore = false; break; } else if (ty.Equals("-assembly")) { // match on name/parameters. Regex reg = new Regex(@"^" + pat + @"$"); String def = definition.Module.Assembly.ToString(); Match m = reg.Match(def); int ind = m.Index; int l = m.Length; if (!(ind >= 0 && l > 0)) { continue; } ignore = true; break; } else if (ty.Equals("+assembly")) { // match on name/parameters. Regex reg = new Regex(@"^" + pat + @"$"); String def = definition.Module.Assembly.ToString(); Match m = reg.Match(def); int ind = m.Index; int l = m.Length; if (!(ind >= 0 && l > 0)) { continue; } ignore = false; break; } } if (Options.Singleton.Get(Options.OptionType.DisplaySSAComputation)) { System.Console.WriteLine((ignore ? "Ignoring " : "Adding ") + definition); } if (ignore) { return; } _to_do.Push(definition); }