From c32f4b0d7891b00924270664ce2c26a63e0697cb Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Sat, 4 Feb 2023 11:37:21 +0000 Subject: [PATCH] Cleanup driver code. --- src/Generator/Driver.cs | 202 +++++++++++++++++++--------------------- 1 file changed, 96 insertions(+), 106 deletions(-) diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index e5b8cd2c..df2d70ae 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -183,27 +183,22 @@ namespace CppSharp ClangParser.LibraryParsed += OnFileParsed; foreach (var module in Options.Modules) { - using (var linkerOptions = new LinkerOptions(Context.LinkerOptions)) + using var linkerOptions = new LinkerOptions(Context.LinkerOptions); + foreach (var libraryDir in module.LibraryDirs) + linkerOptions.AddLibraryDirs(libraryDir); + + foreach (var library in module.Libraries.Where(library => + Context.Symbols.Libraries.All(l => l.FileName != library))) { - foreach (var libraryDir in module.LibraryDirs) - linkerOptions.AddLibraryDirs(libraryDir); - - foreach (string library in module.Libraries) - { - if (Context.Symbols.Libraries.Any(l => l.FileName == library)) - continue; - linkerOptions.AddLibraries(library); - } - - using (var res = ClangParser.ParseLibrary(linkerOptions)) - { - if (res.Kind != ParserResultKind.Success) - continue; - - for (uint i = 0; i < res.LibrariesCount; i++) - Context.Symbols.Libraries.Add(ClangParser.ConvertLibrary(res.GetLibraries(i))); - } + linkerOptions.AddLibraries(library); } + + using var res = ClangParser.ParseLibrary(linkerOptions); + if (res.Kind != ParserResultKind.Success) + continue; + + for (uint i = 0; i < res.LibrariesCount; i++) + Context.Symbols.Libraries.Add(ClangParser.ConvertLibrary(res.GetLibraries(i))); } ClangParser.LibraryParsed -= OnFileParsed; @@ -215,99 +210,99 @@ namespace CppSharp public void SetupPasses(ILibrary library) { - var TranslationUnitPasses = Context.TranslationUnitPasses; + var passes = Context.TranslationUnitPasses; - TranslationUnitPasses.AddPass(new ResolveIncompleteDeclsPass()); - TranslationUnitPasses.AddPass(new IgnoreSystemDeclarationsPass()); - TranslationUnitPasses.AddPass(new MatchParamNamesWithInstantiatedFromPass()); + passes.AddPass(new ResolveIncompleteDeclsPass()); + passes.AddPass(new IgnoreSystemDeclarationsPass()); + passes.AddPass(new MatchParamNamesWithInstantiatedFromPass()); if (Options.IsCSharpGenerator) - TranslationUnitPasses.AddPass(new EqualiseAccessOfOverrideAndBasePass()); + passes.AddPass(new EqualiseAccessOfOverrideAndBasePass()); - TranslationUnitPasses.AddPass(new FlattenAnonymousTypesToFields()); - TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass()); - TranslationUnitPasses.AddPass(new MarkUsedClassInternalsPass()); + passes.AddPass(new FlattenAnonymousTypesToFields()); + passes.AddPass(new CheckIgnoredDeclsPass()); + passes.AddPass(new MarkUsedClassInternalsPass()); if (Options.IsCSharpGenerator) { - TranslationUnitPasses.AddPass(new TrimSpecializationsPass()); - TranslationUnitPasses.AddPass(new CheckAmbiguousFunctions()); - TranslationUnitPasses.AddPass(new GenerateSymbolsPass()); - TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass()); + passes.AddPass(new TrimSpecializationsPass()); + passes.AddPass(new CheckAmbiguousFunctions()); + passes.AddPass(new GenerateSymbolsPass()); + passes.AddPass(new CheckIgnoredDeclsPass()); } if (Options.IsCLIGenerator || Options.IsCSharpGenerator) { - TranslationUnitPasses.AddPass(new MoveFunctionToClassPass()); - TranslationUnitPasses.AddPass(new ValidateOperatorsPass()); + passes.AddPass(new MoveFunctionToClassPass()); + passes.AddPass(new ValidateOperatorsPass()); } library.SetupPasses(this); - TranslationUnitPasses.AddPass(new FindSymbolsPass()); - TranslationUnitPasses.AddPass(new CheckMacroPass()); - TranslationUnitPasses.AddPass(new CheckStaticClass()); + passes.AddPass(new FindSymbolsPass()); + passes.AddPass(new CheckMacroPass()); + passes.AddPass(new CheckStaticClass()); if (Options.IsCLIGenerator || Options.IsCSharpGenerator || Options.IsCppGenerator) { - TranslationUnitPasses.AddPass(new CheckAmbiguousFunctions()); + passes.AddPass(new CheckAmbiguousFunctions()); } - TranslationUnitPasses.AddPass(new ConstructorToConversionOperatorPass()); - TranslationUnitPasses.AddPass(new MarshalPrimitivePointersAsRefTypePass()); + passes.AddPass(new ConstructorToConversionOperatorPass()); + passes.AddPass(new MarshalPrimitivePointersAsRefTypePass()); if (Options.IsCLIGenerator || Options.IsCSharpGenerator) { - TranslationUnitPasses.AddPass(new CheckOperatorsOverloadsPass()); + passes.AddPass(new CheckOperatorsOverloadsPass()); } - TranslationUnitPasses.AddPass(new CheckVirtualOverrideReturnCovariance()); - TranslationUnitPasses.AddPass(new CleanCommentsPass()); + passes.AddPass(new CheckVirtualOverrideReturnCovariance()); + passes.AddPass(new CleanCommentsPass()); Generator.SetupPasses(); - TranslationUnitPasses.AddPass(new CleanInvalidDeclNamesPass()); - TranslationUnitPasses.AddPass(new FastDelegateToDelegatesPass()); - TranslationUnitPasses.AddPass(new FieldToPropertyPass()); - TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass()); - TranslationUnitPasses.AddPass(new CheckFlagEnumsPass()); - TranslationUnitPasses.AddPass(new MakeProtectedNestedTypesPublicPass()); + passes.AddPass(new CleanInvalidDeclNamesPass()); + passes.AddPass(new FastDelegateToDelegatesPass()); + passes.AddPass(new FieldToPropertyPass()); + passes.AddPass(new CheckIgnoredDeclsPass()); + passes.AddPass(new CheckFlagEnumsPass()); + passes.AddPass(new MakeProtectedNestedTypesPublicPass()); if (Options.IsCSharpGenerator) { - TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass()); - TranslationUnitPasses.AddPass(new MultipleInheritancePass()); + passes.AddPass(new GenerateAbstractImplementationsPass()); + passes.AddPass(new MultipleInheritancePass()); } if (Options.IsCLIGenerator || Options.IsCSharpGenerator) { - TranslationUnitPasses.AddPass(new DelegatesPass()); + passes.AddPass(new DelegatesPass()); } if (Options.GeneratorKind != GeneratorKind.C) { - TranslationUnitPasses.AddPass(new GetterSetterToPropertyPass()); + passes.AddPass(new GetterSetterToPropertyPass()); } - TranslationUnitPasses.AddPass(new StripUnusedSystemTypesPass()); + passes.AddPass(new StripUnusedSystemTypesPass()); if (Options.IsCSharpGenerator) { - TranslationUnitPasses.AddPass(new SpecializationMethodsWithDependentPointersPass()); - TranslationUnitPasses.AddPass(new ParamTypeToInterfacePass()); + passes.AddPass(new SpecializationMethodsWithDependentPointersPass()); + passes.AddPass(new ParamTypeToInterfacePass()); } - TranslationUnitPasses.AddPass(new CheckDuplicatedNamesPass()); + passes.AddPass(new CheckDuplicatedNamesPass()); if (Options.IsCLIGenerator || Options.IsCSharpGenerator) { - TranslationUnitPasses.RenameDeclsUpperCase(RenameTargets.Any & ~RenameTargets.Parameter); - TranslationUnitPasses.AddPass(new CheckKeywordNamesPass()); + passes.RenameDeclsUpperCase(RenameTargets.Any & ~RenameTargets.Parameter); + passes.AddPass(new CheckKeywordNamesPass()); } - Context.TranslationUnitPasses.AddPass(new HandleVariableInitializerPass()); + passes.AddPass(new HandleVariableInitializerPass()); - TranslationUnitPasses.AddPass(new MarkEventsWithUniqueIdPass()); + passes.AddPass(new MarkEventsWithUniqueIdPass()); } public void ProcessCode() @@ -349,8 +344,7 @@ namespace CppSharp var file = Path.Combine(outputPath, fileRelativePath); WriteGeneratedCodeToFile(file, template.Generate()); - if (output.TranslationUnit.Module != null) - output.TranslationUnit.Module.CodeFiles.Add(file); + output.TranslationUnit.Module?.CodeFiles.Add(file); Diagnostics.Message("Generated '{0}'", fileRelativePath); } @@ -419,67 +413,63 @@ namespace CppSharp public static void Run(ILibrary library) { var options = new DriverOptions(); - using (var driver = new Driver(options)) - { - library.Setup(driver); + using var driver = new Driver(options); + library.Setup(driver); - driver.Setup(); + driver.Setup(); - if (driver.Options.Verbose) - Diagnostics.Level = DiagnosticKind.Debug; + if (driver.Options.Verbose) + Diagnostics.Level = DiagnosticKind.Debug; - if (!options.Quiet) - Diagnostics.Message("Parsing libraries..."); + if (!options.Quiet) + Diagnostics.Message("Parsing libraries..."); - if (!driver.ParseLibraries()) - return; + if (!driver.ParseLibraries()) + return; - if (!options.Quiet) - Diagnostics.Message("Parsing code..."); + if (!options.Quiet) + Diagnostics.Message("Parsing code..."); - if (!driver.ParseCode()) - { - Diagnostics.Error("CppSharp has encountered an error while parsing code."); - return; - } + if (!driver.ParseCode()) + { + Diagnostics.Error("CppSharp has encountered an error while parsing code."); + return; + } - new CleanUnitPass { Context = driver.Context }.VisitASTContext(driver.Context.ASTContext); - options.Modules.RemoveAll(m => m != options.SystemModule && !m.Units.GetGenerated().Any()); + new CleanUnitPass { Context = driver.Context }.VisitASTContext(driver.Context.ASTContext); + options.Modules.RemoveAll(m => m != options.SystemModule && !m.Units.GetGenerated().Any()); - if (!options.Quiet) - Diagnostics.Message("Processing code..."); + if (!options.Quiet) + Diagnostics.Message("Processing code..."); - driver.SetupPasses(library); - driver.SetupTypeMaps(); - driver.SetupDeclMaps(); + driver.SetupPasses(library); + driver.SetupTypeMaps(); + driver.SetupDeclMaps(); - library.Preprocess(driver, driver.Context.ASTContext); + library.Preprocess(driver, driver.Context.ASTContext); - driver.ProcessCode(); - library.Postprocess(driver, driver.Context.ASTContext); + driver.ProcessCode(); + library.Postprocess(driver, driver.Context.ASTContext); - if (!options.Quiet) - Diagnostics.Message("Generating code..."); + if (!options.Quiet) + Diagnostics.Message("Generating code..."); - if (!options.DryRun) - { - var outputs = driver.GenerateCode(); + if (options.DryRun) + return; - library.GenerateCode(driver, outputs); + var outputs = driver.GenerateCode(); - foreach (var output in outputs) - { - foreach (var pass in driver.Context.GeneratorOutputPasses.Passes) - { - pass.VisitGeneratorOutput(output); - } - } + library.GenerateCode(driver, outputs); - driver.SaveCode(outputs); - if (driver.Options.IsCSharpGenerator && driver.Options.CompileCode) - driver.Options.Modules.Any(m => !driver.CompileCode(m)); - } + foreach (var output in outputs) + { + foreach (var pass in driver.Context.GeneratorOutputPasses.Passes) + pass.VisitGeneratorOutput(output); } + + driver.SaveCode(outputs); + if (driver.Options.IsCSharpGenerator && driver.Options.CompileCode) + driver.Options.Modules.Any(m => !driver.CompileCode(m)); } } }