Browse Source

Clean up the console driver by emitting file parsing diagnostics in the main driver.

pull/13/merge
triton 12 years ago
parent
commit
6eef880f7e
  1. 2
      src/Generator/Diagnostics.cs
  2. 55
      src/Generator/Driver.cs

2
src/Generator/Diagnostics.cs

@ -9,6 +9,8 @@ namespace CppSharp
InvalidOperatorOverload, InvalidOperatorOverload,
SymbolNotFound, SymbolNotFound,
FileGenerated, FileGenerated,
ParseResult,
ParserDiagnostic,
} }
public enum DiagnosticKind public enum DiagnosticKind

55
src/Generator/Driver.cs

@ -41,6 +41,8 @@ namespace CppSharp
Options = options; Options = options;
Diagnostics = diagnostics; Diagnostics = diagnostics;
Parser = new Parser(Options); Parser = new Parser(Options);
Parser.OnHeaderParsed += OnFileParsed;
Parser.OnLibraryParsed += OnFileParsed;
TypeDatabase = new TypeMapDatabase(); TypeDatabase = new TypeMapDatabase();
Passes = new PassBuilder(this); Passes = new PassBuilder(this);
} }
@ -75,6 +77,33 @@ namespace CppSharp
TypeDatabase.SetupTypeMaps(); TypeDatabase.SetupTypeMaps();
} }
void OnFileParsed(string file, ParserResult result)
{
switch (result.Kind)
{
case ParserResultKind.Success:
Diagnostics.EmitMessage(DiagnosticId.ParseResult,
"Parsed '{0}'", file);
break;
case ParserResultKind.Error:
Diagnostics.EmitError(DiagnosticId.ParseResult,
"Error parsing '{0}'", file);
break;
case ParserResultKind.FileNotFound:
Diagnostics.EmitError(DiagnosticId.ParseResult,
"File '{0}' was not found", file);
break;
}
foreach (var diag in result.Diagnostics)
{
Diagnostics.EmitMessage(DiagnosticId.ParserDiagnostic,
"{0}({1},{2}): {3}: {4}", diag.FileName, diag.LineNumber,
diag.ColumnNumber, diag.Level.ToString().ToLower(),
diag.Message);
}
}
public bool ParseCode() public bool ParseCode()
{ {
if (!Parser.ParseHeaders(Options.Headers)) if (!Parser.ParseHeaders(Options.Headers))
@ -229,29 +258,6 @@ namespace CppSharp
public static class ConsoleDriver public static class ConsoleDriver
{ {
static void OnFileParsed(string file, ParserResult result)
{
switch (result.Kind)
{
case ParserResultKind.Success:
Console.WriteLine(" Parsed '{0}'", file);
break;
case ParserResultKind.Error:
Console.WriteLine(" Error parsing '{0}'", file);
break;
case ParserResultKind.FileNotFound:
Console.WriteLine(" File '{0}' was not found", file);
break;
}
foreach (var diag in result.Diagnostics)
{
Console.WriteLine(string.Format("{0}({1},{2}): {3}: {4}",
diag.FileName, diag.LineNumber, diag.ColumnNumber,
diag.Level.ToString().ToLower(), diag.Message));
}
}
public static void Run(ILibrary library) public static void Run(ILibrary library)
{ {
Console.BufferHeight = 1999; Console.BufferHeight = 1999;
@ -261,9 +267,6 @@ namespace CppSharp
library.Setup(driver); library.Setup(driver);
driver.Setup(); driver.Setup();
driver.Parser.OnHeaderParsed += OnFileParsed;
driver.Parser.OnLibraryParsed += OnFileParsed;
Console.WriteLine("Parsing libraries..."); Console.WriteLine("Parsing libraries...");
if (!driver.ParseLibraries()) if (!driver.ParseLibraries())
return; return;

Loading…
Cancel
Save