Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
                }
            }
        }