internal static CompileResult CompileExpressionWithRetry(
            ImmutableArray <MetadataBlock> metadataBlocks,
            string expr,
            ImmutableArray <Alias> aliases,
            ExpressionCompiler.CreateContextDelegate createContext,
            DkmUtilities.GetMetadataBytesPtrFunction getMetaDataBytesPtr,
            out string errorMessage,
            out CompilationTestData testData)
        {
            var r = ExpressionCompiler.CompileWithRetry(
                metadataBlocks,
                DebuggerDiagnosticFormatter.Instance,
                createContext,
                (context, diagnostics) =>
            {
                var td = new CompilationTestData();
                ResultProperties resultProperties;
                var compileResult = context.CompileExpression(
                    expr,
                    DkmEvaluationFlags.TreatAsExpression,
                    aliases,
                    diagnostics,
                    out resultProperties,
                    td);
                return(new CompileExpressionResult(compileResult, td));
            },
                getMetaDataBytesPtr,
                out errorMessage);

            testData = r.TestData;
            return(r.CompileResult);
        }
 internal static CompileResult CompileExpressionWithRetry(
     ImmutableArray <MetadataBlock> metadataBlocks,
     EvaluationContextBase context,
     ExpressionCompiler.CompileDelegate <CompileResult> compile,
     DkmUtilities.GetMetadataBytesPtrFunction getMetaDataBytesPtr,
     out string errorMessage)
 {
     return(ExpressionCompiler.CompileWithRetry(
                metadataBlocks,
                DebuggerDiagnosticFormatter.Instance,
                (blocks, useReferencedModulesOnly) => context,
                compile,
                getMetaDataBytesPtr,
                out errorMessage));
 }