internal ICompilationVerifier CompileAndVerify( Compilation compilation, IEnumerable <ResourceDescription> manifestResources = null, IEnumerable <ModuleData> dependencies = null, Action <IModuleSymbol> sourceSymbolValidator = null, Action <PEAssembly> assemblyValidator = null, Action <IModuleSymbol> symbolValidator = null, SignatureDescription[] expectedSignatures = null, string expectedOutput = null, bool verify = true) { Assert.NotNull(compilation); Assert.True(expectedOutput == null || (compilation.Options.OutputKind == OutputKind.ConsoleApplication || compilation.Options.OutputKind == OutputKind.WindowsApplication), "Compilation must be executable if output is expected."); if (verify) { // Unsafe code might not verify, so don't try. var csharpOptions = compilation.Options as CSharp.CSharpCompilationOptions; verify = (csharpOptions == null || !csharpOptions.AllowUnsafe); } if (sourceSymbolValidator != null) { var module = compilation.Assembly.Modules.First(); sourceSymbolValidator(module); } ICompilationVerifier result = null; var verifier = Emit(compilation, dependencies, manifestResources, expectedSignatures, expectedOutput, assemblyValidator, symbolValidator, verify); if (result == null) { result = verifier; } else { // only one emitter should return a verifier Assert.Null(verifier); } // If this fails, it means that more that all emitters failed to return a validator // (i.e. none thought that they were applicable for the given input parameters). Assert.NotNull(result); return(result); }
static internal void RunValidators(ICompilationVerifier verifier, Action <PEAssembly> assemblyValidator, Action <IModuleSymbol> symbolValidator) { if (assemblyValidator != null) { using (var emittedMetadata = AssemblyMetadata.Create(verifier.GetAllModuleMetadata())) { assemblyValidator(emittedMetadata.GetAssembly()); } } if (symbolValidator != null) { var peModuleSymbol = verifier.GetModuleSymbolForEmittedImage(); Debug.Assert(peModuleSymbol != null); symbolValidator(peModuleSymbol); } }
static internal void RunValidators(ICompilationVerifier verifier, Action<PEAssembly> assemblyValidator, Action<IModuleSymbol> symbolValidator) { if (assemblyValidator != null) { using (var emittedMetadata = AssemblyMetadata.Create(verifier.GetAllModuleMetadata())) { assemblyValidator(emittedMetadata.GetAssembly()); } } if (symbolValidator != null) { var peModuleSymbol = verifier.GetModuleSymbolForEmittedImage(); Debug.Assert(peModuleSymbol != null); symbolValidator(peModuleSymbol); } }