Browse Source

Setup the code generator before processing code.

pull/1/head
triton 13 years ago
parent
commit
7a682ca2c4
  1. 32
      src/Generator/Driver.cs

32
src/Generator/Driver.cs

@ -16,6 +16,7 @@ namespace Cxxi
public IDiagnosticConsumer Diagnostics { get; private set; } public IDiagnosticConsumer Diagnostics { get; private set; }
public TypeMapDatabase TypeDatabase { get; private set; } public TypeMapDatabase TypeDatabase { get; private set; }
public Library Library { get; private set; } public Library Library { get; private set; }
public Generator Generator { get; private set; }
public Driver(DriverOptions options, ILibrary transform) public Driver(DriverOptions options, ILibrary transform)
{ {
@ -31,6 +32,8 @@ namespace Cxxi
Transform.Setup(Options); Transform.Setup(Options);
ValidateOptions(); ValidateOptions();
Generator = CreateGenerator();
} }
private void ValidateOptions() private void ValidateOptions()
@ -55,6 +58,19 @@ namespace Cxxi
Options.OutputNamespace = Options.LibraryName; Options.OutputNamespace = Options.LibraryName;
} }
Generator CreateGenerator()
{
switch (Options.GeneratorKind)
{
case LanguageGeneratorKind.CSharp:
return new CSharpGenerator(this);
case LanguageGeneratorKind.CPlusPlusCLI:
return new CLIGenerator(this);
default:
throw new NotImplementedException("Unknown language generator kind");
}
}
private void OnFileParsed(string file, ParserResult result) private void OnFileParsed(string file, ParserResult result)
{ {
switch (result.Kind) switch (result.Kind)
@ -143,20 +159,6 @@ namespace Cxxi
Console.WriteLine("Generating wrapper code..."); Console.WriteLine("Generating wrapper code...");
Generator generator = null;
switch (Options.GeneratorKind)
{
case LanguageGeneratorKind.CSharp:
generator = new CSharpGenerator(this);
break;
case LanguageGeneratorKind.CPlusPlusCLI:
generator = new CLIGenerator(this);
break;
default:
throw new NotImplementedException("Unknown language generator kind");
}
if (!Directory.Exists(Options.OutputDir)) if (!Directory.Exists(Options.OutputDir))
Directory.CreateDirectory(Options.OutputDir); Directory.CreateDirectory(Options.OutputDir);
@ -170,7 +172,7 @@ namespace Cxxi
continue; continue;
// Generate the target code. // Generate the target code.
generator.Generate(unit); Generator.Generate(unit);
} }
} }

Loading…
Cancel
Save