From 0be133da708cb0a37ada90195295d36db6ab65fb Mon Sep 17 00:00:00 2001 From: triton Date: Wed, 6 Feb 2013 22:12:39 +0000 Subject: [PATCH] Extract some generator logic into the driver. --- src/Generator/Driver.cs | 30 +++++++++- src/Generator/Generators/Generator.cs | 82 +++------------------------ 2 files changed, 35 insertions(+), 77 deletions(-) diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 1cb75398..90eb32ba 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -70,8 +70,34 @@ namespace Cxxi Console.WriteLine("Generating wrapper code..."); - var gen = new Generator(options, library, transform, typeDatabase); - gen.Generate(); + Generator generator = null; + + switch (Options.GeneratorKind) + { + case LanguageGeneratorKind.CSharp: + generator = new CSharpGenerator(this); + break; + case LanguageGeneratorKind.CPlusPlusCLI: + default: + generator = new CLIGenerator(this); + break; + } + + if (!Directory.Exists(Options.OutputDir)) + Directory.CreateDirectory(Options.OutputDir); + + // Process everything in the global namespace for now. + foreach (var unit in Library.TranslationUnits) + { + if (unit.ExplicityIgnored || !unit.HasDeclarations) + continue; + + if (unit.IsSystemHeader) + continue; + + // Generate the target code. + generator.Generate(unit); + } } } diff --git a/src/Generator/Generators/Generator.cs b/src/Generator/Generators/Generator.cs index fb42d04d..02f11bec 100644 --- a/src/Generator/Generators/Generator.cs +++ b/src/Generator/Generators/Generator.cs @@ -1,6 +1,4 @@ -using Cxxi.Generators.CLI; -using Cxxi.Types; -using System.IO; +using Cxxi.Types; namespace Cxxi.Generators { @@ -10,86 +8,20 @@ namespace Cxxi.Generators CSharp } - public interface ILanguageGenerator + public interface IGenerator { - DriverOptions Options { get; set; } - Library Library { get; set; } - ILibrary Transform { get; set; } - ITypeMapDatabase TypeMapDatabase { get; set; } - Generator Generator { get; set; } - bool Generate(TranslationUnit unit); } - public partial class Generator + public abstract class Generator : IGenerator { - public DriverOptions Options; - public Library Library; - public ILibrary LibraryTransform; - public ITypeMapDatabase TypeMapDatabase; - - public Generator(DriverOptions options, Library library, ILibrary libraryTransform, - ITypeMapDatabase typeMapDatabase) - { - this.Options = options; - this.Library = library; - this.LibraryTransform = libraryTransform; - this.TypeMapDatabase = typeMapDatabase; - } - - public void Generate() - { - var generator = CreateLanguageGenerator(Options.Template); - - if (!Directory.Exists(Options.OutputDir)) - Directory.CreateDirectory(Options.OutputDir); - - // Process everything in the global namespace for now. - foreach (var module in Library.TranslationUnits) - { - if (module.ExplicityIgnored || !module.HasDeclarations) - continue; + public Driver Driver { get; private set; } - if (module.IsSystemHeader) - continue; - - // Generate the target code. - generator.Generate(module); - } - } - - ILanguageGenerator CreateLanguageGenerator(LanguageGeneratorKind kind) + protected Generator(Driver driver) { - ILanguageGenerator generator = null; - - switch (kind) - { - case LanguageGeneratorKind.CPlusPlusCLI: - generator = new CLIGenerator(this); - break; - case LanguageGeneratorKind.CSharp: - //generator = new CSharpGenerator(); - break; - } - - generator.Options = Options; - generator.Library = Library; - generator.Transform = LibraryTransform; - generator.TypeMapDatabase = TypeMapDatabase; - - return generator; + Driver = driver; } - ILanguageGenerator CreateLanguageGenerator(string kind) - { - switch (kind) - { - default: - case "cli": - return CreateLanguageGenerator(LanguageGeneratorKind.CPlusPlusCLI); - case "cs": - return CreateLanguageGenerator(LanguageGeneratorKind.CSharp); - } - } + public abstract bool Generate(TranslationUnit unit); } } \ No newline at end of file