private void GenerateSymbols() { var modules = Options.Modules.Where(symbolsCodeGenerators.ContainsKey).ToList(); remainingCompilationTasks = modules.Count; foreach (var module in modules) { var symbolsCodeGenerator = symbolsCodeGenerators[module]; var cpp = $"{module.SymbolsLibraryName}.{symbolsCodeGenerator.FileExtension}"; Directory.CreateDirectory(Options.OutputDir); var path = Path.Combine(Options.OutputDir, cpp); File.WriteAllText(path, symbolsCodeGenerator.Generate()); var e = new SymbolsCodeEventArgs(module); SymbolsCodeGenerated?.Invoke(this, e); if (string.IsNullOrEmpty(e.CustomCompiler)) { RemainingCompilationTasks--; } else { InvokeCompiler(e.CustomCompiler, e.CompilerArguments, e.OutputDir, module); } } }
private void GenerateSymbols() { var modules = (from module in Options.Modules where symbolsCodeGenerators.ContainsKey(module) select module).ToList(); remainingCompilationTasks = modules.Count; foreach (var module in modules.Where(symbolsCodeGenerators.ContainsKey)) { var symbolsCodeGenerator = symbolsCodeGenerators[module]; if (specializations.ContainsKey(module)) { symbolsCodeGenerator.NewLine(); foreach (var specialization in specializations[module]) symbolsCodeGenerator.VisitClassTemplateSpecializationDecl(specialization); } var cpp = $"{module.SymbolsLibraryName}.{symbolsCodeGenerator.FileExtension}"; Directory.CreateDirectory(Options.OutputDir); var path = Path.Combine(Options.OutputDir, cpp); File.WriteAllText(path, symbolsCodeGenerator.Generate()); var e = new SymbolsCodeEventArgs(module); SymbolsCodeGenerated?.Invoke(this, e); if (string.IsNullOrEmpty(e.CustomCompiler)) RemainingCompilationTasks--; else InvokeCompiler(e.CustomCompiler, e.CompilerArguments, e.OutputDir, module.SymbolsLibraryName); } }
private void GenerateSymbols() { var modules = Options.Modules.Where(symbolsCodeGenerators.ContainsKey).ToList(); remainingCompilationTasks = modules.Count; foreach (var module in modules) { var symbolsCodeGenerator = symbolsCodeGenerators[module]; if (specializations.ContainsKey(module)) { symbolsCodeGenerator.NewLine(); foreach (var specialization in specializations[module]) { Func <Method, bool> exportable = m => !m.IsDependent && !m.IsImplicit && !m.IsDeleted && !m.IsDefaulted; if (specialization.Methods.Any(m => m.IsInvalid && exportable(m))) { foreach (var method in specialization.Methods.Where( m => m.IsGenerated && (m.InstantiatedFrom == null || m.InstantiatedFrom.IsGenerated) && exportable(m))) { symbolsCodeGenerator.VisitMethodDecl(method); } } else { symbolsCodeGenerator.VisitClassTemplateSpecializationDecl(specialization); } } } var cpp = $"{module.SymbolsLibraryName}.{symbolsCodeGenerator.FileExtension}"; Directory.CreateDirectory(Options.OutputDir); var path = Path.Combine(Options.OutputDir, cpp); File.WriteAllText(path, symbolsCodeGenerator.Generate()); var e = new SymbolsCodeEventArgs(module); SymbolsCodeGenerated?.Invoke(this, e); if (string.IsNullOrEmpty(e.CustomCompiler)) { RemainingCompilationTasks--; } else { InvokeCompiler(e.CustomCompiler, e.CompilerArguments, e.OutputDir, module); } } }