Browse Source

Extract the parser-related code to a Parser.cs file.

pull/1/head
triton 13 years ago
parent
commit
8cd61f8c1b
  1. 32
      src/Generator/Driver.cs
  2. 45
      src/Generator/Parser.cs

32
src/Generator/Driver.cs

@ -12,15 +12,14 @@ namespace Cxxi
public class Driver public class Driver
{ {
private readonly Options options; private readonly Options options;
private readonly Library library;
private readonly ILibrary transform; private readonly ILibrary transform;
private readonly TypeMapDatabase typeDatabase; private readonly TypeMapDatabase typeDatabase;
private Library library;
public Driver(Options options, ILibrary transform) public Driver(Options options, ILibrary transform)
{ {
this.options = options; this.options = options;
this.transform = transform; this.transform = transform;
this.library = new Library(options.OutputNamespace, options.LibraryName);
typeDatabase = new TypeMapDatabase(); typeDatabase = new TypeMapDatabase();
typeDatabase.SetupTypeMaps(); typeDatabase.SetupTypeMaps();
} }
@ -32,32 +31,11 @@ namespace Cxxi
var headers = new List<string>(); var headers = new List<string>();
transform.SetupHeaders(headers); transform.SetupHeaders(headers);
foreach (var header in headers) var parser = new Parser(options);
ParseHeader(header); parser.ParseHeaders(headers);
parser.ParseHeaders(options.Headers);
foreach (var header in options.Headers) library = parser.Library;
ParseHeader(header);
}
void ParseHeader(string file)
{
var parserOptions = new ParserOptions
{
Library = library,
Verbose = false,
IncludeDirs = options.IncludeDirs,
FileName = file,
Defines = options.Defines,
toolSetToUse = options.ToolsetToUse
};
if (!ClangParser.Parse(parserOptions))
{
Console.WriteLine(" Could not parse '" + file + "'.");
return;
}
Console.WriteLine(" Parsed '" + file + "'.");
} }
public void ProcessCode() public void ProcessCode()

45
src/Generator/Parser.cs

@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
namespace Cxxi
{
public class Parser
{
public Library Library { get; private set; }
private readonly Options options;
public Parser(Options options)
{
this.options = options;
Library = new Library(options.OutputNamespace, options.LibraryName);
}
public void ParseHeaders(IEnumerable<string> headers)
{
foreach (var header in headers)
ParseHeader(header);
}
bool ParseHeader(string file)
{
var parserOptions = new ParserOptions
{
Library = Library,
FileName = file,
Verbose = false,
IncludeDirs = options.IncludeDirs,
Defines = options.Defines,
toolSetToUse = options.ToolsetToUse
};
if (!ClangParser.Parse(parserOptions))
{
//Console.WriteLine(" Could not parse '" + file + "'.");
return false;
}
//Console.WriteLine(" Parsed '" + file + "'.");
return true;
}
}
}
Loading…
Cancel
Save