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);
        }