private VisualBasicCompilationFactory( string assemblyFileName, CompilationOptionsReader optionsReader, VisualBasicCompilationOptions compilationOptions ) : base(assemblyFileName, optionsReader) { CompilationOptions = compilationOptions; }
protected CompilationFactory( string assemblyFileName, CompilationOptionsReader optionsReader ) { AssemblyFileName = assemblyFileName; OptionsReader = optionsReader; }
private CSharpCompilationFactory( string assemblyFileName, CompilationOptionsReader optionsReader, CSharpParseOptions parseOptions, CSharpCompilationOptions compilationOptions) : base(assemblyFileName, optionsReader) { Debug.Assert(optionsReader.GetLanguageName() == LanguageNames.CSharp); ParseOptions = parseOptions; CompilationOptions = compilationOptions; }
internal static new VisualBasicCompilationFactory Create( string assemblyFileName, CompilationOptionsReader optionsReader ) { Debug.Assert(optionsReader.GetLanguageName() == LanguageNames.VisualBasic); var compilationOptions = CreateVisualBasicCompilationOptions( assemblyFileName, optionsReader ); return(new VisualBasicCompilationFactory( assemblyFileName, optionsReader, compilationOptions )); }
internal static new CSharpCompilationFactory Create( string assemblyFileName, CompilationOptionsReader optionsReader ) { Debug.Assert(optionsReader.GetLanguageName() == LanguageNames.CSharp); var(compilationOptions, parseOptions) = CreateCSharpCompilationOptions( assemblyFileName, optionsReader ); return(new CSharpCompilationFactory( assemblyFileName, optionsReader, parseOptions, compilationOptions )); }
public static CompilationFactory Create(string assemblyFileName, CompilationOptionsReader optionsReader) => optionsReader.GetLanguageName() switch {
private static VisualBasicCompilationOptions CreateVisualBasicCompilationOptions( string assemblyFileName, CompilationOptionsReader optionsReader ) { var pdbOptions = optionsReader.GetMetadataCompilationOptions(); var langVersionString = pdbOptions.GetUniqueOption( CompilationOptionNames.LanguageVersion ); pdbOptions.TryGetUniqueOption( CompilationOptionNames.Optimization, out var optimization ); pdbOptions.TryGetUniqueOption(CompilationOptionNames.Platform, out var platform); pdbOptions.TryGetUniqueOption( CompilationOptionNames.GlobalNamespaces, out var globalNamespacesString ); IEnumerable <GlobalImport>?globalImports = null; if (!string.IsNullOrEmpty(globalNamespacesString)) { globalImports = GlobalImport.Parse(globalNamespacesString.Split(';')); } VB.LanguageVersion langVersion = default; VB.LanguageVersionFacts.TryParse(langVersionString, ref langVersion); IReadOnlyDictionary <string, object>?preprocessorSymbols = null; if (pdbOptions.OptionToString(CompilationOptionNames.Define) is string defineString) { preprocessorSymbols = VisualBasicCommandLineParser.ParseConditionalCompilationSymbols( defineString, out var diagnostics ); var diagnostic = diagnostics?.FirstOrDefault(x => x.IsUnsuppressedError); if (diagnostic is object) { throw new Exception($"Cannot create compilation options: {diagnostic}"); } } var parseOptions = VisualBasicParseOptions.Default .WithLanguageVersion(langVersion) .WithPreprocessorSymbols(preprocessorSymbols.ToImmutableArrayOrEmpty()); var(optimizationLevel, plus) = GetOptimizationLevel(optimization); var isChecked = pdbOptions.OptionToBool(CompilationOptionNames.Checked) ?? true; var embedVBRuntime = pdbOptions.OptionToBool(CompilationOptionNames.EmbedRuntime) ?? false; var rootNamespace = pdbOptions.OptionToString(CompilationOptionNames.RootNamespace); var compilationOptions = new VisualBasicCompilationOptions( pdbOptions.OptionToEnum <OutputKind>(CompilationOptionNames.OutputKind) ?? OutputKind.DynamicallyLinkedLibrary, moduleName: assemblyFileName, mainTypeName: optionsReader.GetMainTypeName(), scriptClassName: "Script", globalImports: globalImports, rootNamespace: rootNamespace, optionStrict: pdbOptions.OptionToEnum <OptionStrict>( CompilationOptionNames.OptionStrict ) ?? OptionStrict.Off, optionInfer: pdbOptions.OptionToBool(CompilationOptionNames.OptionInfer) ?? false, optionExplicit: pdbOptions.OptionToBool(CompilationOptionNames.OptionExplicit) ?? false, optionCompareText: pdbOptions.OptionToBool(CompilationOptionNames.OptionCompareText) ?? false, parseOptions: parseOptions, embedVbCoreRuntime: embedVBRuntime, optimizationLevel: optimizationLevel, checkOverflow: isChecked, cryptoKeyContainer: null, cryptoKeyFile: null, cryptoPublicKey: optionsReader.GetPublicKey()?.ToImmutableArray() ?? default, delaySign: null, platform: GetPlatform(platform), generalDiagnosticOption: ReportDiagnostic.Default, specificDiagnosticOptions: null, concurrentBuild: true, deterministic: true, xmlReferenceResolver: null, sourceReferenceResolver: null, metadataReferenceResolver: null, assemblyIdentityComparer: null, strongNameProvider: null, publicSign: false, reportSuppressedDiagnostics: false, metadataImportOptions: MetadataImportOptions.Public ); compilationOptions.DebugPlusMode = plus; return(compilationOptions); }
private static (CSharpCompilationOptions, CSharpParseOptions) CreateCSharpCompilationOptions(string assemblyFileName, CompilationOptionsReader optionsReader) { var pdbCompilationOptions = optionsReader.GetMetadataCompilationOptions(); var langVersionString = pdbCompilationOptions.GetUniqueOption(CompilationOptionNames.LanguageVersion); pdbCompilationOptions.TryGetUniqueOption(CompilationOptionNames.Optimization, out var optimization); pdbCompilationOptions.TryGetUniqueOption(CompilationOptionNames.Platform, out var platform); // TODO: Check portability policy if needed // pdbCompilationOptions.TryGetValue("portability-policy", out var portabilityPolicyString); pdbCompilationOptions.TryGetUniqueOption(CompilationOptionNames.Define, out var define); pdbCompilationOptions.TryGetUniqueOption(CompilationOptionNames.Checked, out var checkedString); pdbCompilationOptions.TryGetUniqueOption(CompilationOptionNames.Nullable, out var nullable); pdbCompilationOptions.TryGetUniqueOption(CompilationOptionNames.Unsafe, out var unsafeString); CS.LanguageVersionFacts.TryParse(langVersionString, out var langVersion); var preprocessorSymbols = define == null ? ImmutableArray <string> .Empty : define.Split(',').ToImmutableArray(); var parseOptions = CSharpParseOptions.Default.WithLanguageVersion(langVersion) .WithPreprocessorSymbols(preprocessorSymbols); var(optimizationLevel, plus) = GetOptimizationLevel(optimization); var nullableOptions = nullable is null ? NullableContextOptions.Disable : (NullableContextOptions)Enum.Parse(typeof(NullableContextOptions), nullable); var compilationOptions = new CSharpCompilationOptions( optionsReader.GetOutputKind(), reportSuppressedDiagnostics: false, moduleName: assemblyFileName, mainTypeName: optionsReader.GetMainTypeName(), scriptClassName: null, usings: null, optimizationLevel, !string.IsNullOrEmpty(checkedString) && bool.Parse(checkedString), !string.IsNullOrEmpty(unsafeString) && bool.Parse(unsafeString), cryptoKeyContainer: null, cryptoKeyFile: null, cryptoPublicKey: optionsReader.GetPublicKey()?.ToImmutableArray() ?? default, delaySign: null, GetPlatform(platform), // presence of diagnostics is expected to not affect emit. ReportDiagnostic.Suppress, warningLevel: 4, specificDiagnosticOptions: null, concurrentBuild: true, deterministic: true, xmlReferenceResolver: null, sourceReferenceResolver: null, metadataReferenceResolver: null, assemblyIdentityComparer: null, strongNameProvider: null, publicSign: false, metadataImportOptions: MetadataImportOptions.Public, nullableContextOptions: nullableOptions); compilationOptions.DebugPlusMode = plus; return(compilationOptions, parseOptions); }