public static MethodData ComputeAndEvaluatePurityOfCall(LocalOperation operation)
        {
            var operationData     = (MethodData)operation.Value;
            var methodInterpreter = operationData.Info.GetInterpreter(Runtime);

            if (AnalyzeFunctionPurity.ReadPurity(methodInterpreter))
            {
                operationData.Interpreter.AnalyzeProperties.IsPure = true;
            }
            else
            {
                if (methodInterpreter == null)
                {
                    return(operationData);
                }
                if (methodInterpreter.Kind != MethodKind.Default)
                {
                    operationData.Interpreter.AnalyzeProperties.IsPure = false;
                    return(operationData);
                }
                var computeIsPure = AnalyzeFunctionPurity.ComputeFunctionPurity(methodInterpreter);
                if (computeIsPure)
                {
                    operationData.Interpreter.AnalyzeProperties.IsPure = true;
                }
            }
            return(operationData);
        }
        public static bool ReadPurity(MethodBase methodBase, ClosureEntities crRuntime)
        {
            var method = methodBase.GetInterpreter(crRuntime);

            return(AnalyzeFunctionPurity.ReadPurity(method as CilMethodInterpreter));
        }
        public static bool ReadPurity(MethodBase methodBase, CrRuntimeLibrary crRuntime)
        {
            var method = methodBase.GetInterpreter(crRuntime);

            return(AnalyzeFunctionPurity.ReadPurity(method));
        }