internal Dictionary<MethodDef, Interval> finallyMethodToStateInterval; // used only for IteratorDispose
		
		/// <summary>
		/// Initializes the state range logic:
		/// Clears 'ranges' and sets 'ranges[entryPoint]' to the full range (int.MinValue to int.MaxValue)
		/// </summary>
		public StateRangeAnalysis(ILNode entryPoint, StateRangeAnalysisMode mode, FieldDef stateField)
		{
			this.mode = mode;
			this.stateField = stateField;
			if (mode == StateRangeAnalysisMode.IteratorDispose) {
				finallyMethodToStateInterval = new Dictionary<MethodDef, Interval>();
			}
			
			ranges = new DefaultDictionary<ILNode, StateRange>(n => new StateRange());
			ranges[entryPoint] = new StateRange(int.MinValue, int.MaxValue);
			evalContext = new SymbolicEvaluationContext(stateField);
		}
Exemple #2
0
        internal Dictionary <MethodDefinition, StateRange> finallyMethodToStateRange;        // used only for IteratorDispose

        /// <summary>
        /// Initializes the state range logic:
        /// Clears 'ranges' and sets 'ranges[entryPoint]' to the full range (int.MinValue to int.MaxValue)
        /// </summary>
        public StateRangeAnalysis(ILNode entryPoint, StateRangeAnalysisMode mode, FieldDefinition stateField, ILVariable cachedStateVar = null)
        {
            this.mode       = mode;
            this.stateField = stateField;
            if (mode == StateRangeAnalysisMode.IteratorDispose)
            {
                finallyMethodToStateRange = new Dictionary <MethodDefinition, StateRange>();
            }

            ranges             = new DefaultDictionary <ILNode, StateRange>(n => new StateRange());
            ranges[entryPoint] = new StateRange(int.MinValue, int.MaxValue);
            evalContext        = new SymbolicEvaluationContext(stateField);
            if (cachedStateVar != null)
            {
                evalContext.AddStateVariable(cachedStateVar);
            }
        }