public GenericValueAnalysisCacher(
     ExpressionCacheMode expCachingMode,
     IExpressionContext <Local, Parameter, Method, Field, Type, Expression, Variable> context,
     IFullExpressionDecoder <Type, Variable, Expression> decoder
     )
 {
     this.ExpCachingMode = expCachingMode;
     this.Context        = context;
     this.Decoder        = decoder;
 }
                    public ToBoxedExpressionConverter(
                        ExpressionCacheMode mode,
                        IExpressionContext <Local, Parameter, Method, Field, Type, Expression, Variable> context,
                        IFullExpressionDecoder <Type, Variable, Expression> outdecoder)
                    {
                        Contract.Requires(context != null);

                        this.cachingMode = mode;
                        this.context     = context.ExpressionContext;
                        this.outdecoder  = outdecoder;

                        if (mode == ExpressionCacheMode.Mem)
                        {
                            this.weakrefMap = new Dictionary <Pair <APC, Variable>, WeakReference>();
                            Contract.Assert((this.weakrefMap != null) == (this.fullMap == null), "Help the WP of Clousot prove the invariant");
                        }
                        else if (mode == ExpressionCacheMode.Time)
                        {
                            this.fullMap = new Dictionary <Pair <APC, Variable>, BoxedExpression>();
                        }
                    }