3 using Mono.CodeContracts.Static.Analysis;
4 using Mono.CodeContracts.Static.ControlFlow;
5 using Mono.CodeContracts.Static.DataFlowAnalysis;
6 using Mono.CodeContracts.Static.DataStructures;
7 using Mono.CodeContracts.Static.Providers;
9 namespace Mono.CodeContracts.Static.AST.Visitors {
10 class CodeVisitor<Variable, Expression, ContextData, EdgeData>
11 : ILVisitorBase<APC, Expression, Variable, bool, bool>,
12 IAnalysis<APC, bool, IILVisitor<APC, Expression, Variable, bool, bool>, EdgeData>
13 where ContextData : IMethodContextProvider {
14 private ICodeLayer<Expression, Variable, ContextData, EdgeData> codeLayer;
16 public ContextData Context
18 get { return this.codeLayer.ILDecoder.ContextProvider; }
21 protected IMetaDataProvider MetaDataProvider
23 get { return this.codeLayer.MetaDataProvider; }
26 public void Run (ICodeLayer<Expression, Variable, ContextData, EdgeData> codeLayer)
28 this.codeLayer = codeLayer;
29 codeLayer.CreateForward (this) (true);
32 #region Overrides of ILVisitorBase<APC,Expression,Variable,bool,bool>
33 public override bool DefaultVisit (APC pc, bool data)
39 #region Implementation of IAnalysis<APC,bool,IILVisitor<APC,Expression,Variable,bool,bool>,EdgeData>
40 public IILVisitor<APC, Expression, Variable, bool, bool> GetVisitor ()
45 public virtual bool Join (Pair<APC, APC> edge, bool newstate, bool prevstate, out bool weaker, bool widen)
51 public bool ImmutableVersion (bool arg)
56 public bool MutableVersion (bool arg)
61 public bool EdgeConversion (APC @from, APC to, bool isJoinPoint, EdgeData data, bool state)
66 public bool IsBottom (APC pc, bool state)
71 public Predicate<APC> SaveFixPointInfo (IFixPointInfo<APC, bool> fixPointInfo)
76 public void Dump (Pair<bool, TextWriter> pair)