Browse Source

Clean up the contributed diagnostic code.

pull/1/head
triton 12 years ago
parent
commit
cb41f904e8
  1. 95
      src/Generator/Parser.cs
  2. 11
      src/Parser/Parser.cpp
  3. 6
      src/Parser/Parser.h

95
src/Generator/Parser.cs

@ -1,22 +1,22 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Cxxi namespace Cxxi
{ {
public class Parser public class Parser
{ {
public Library Library { get; private set; } public Library Library { get; private set; }
private readonly DriverOptions options; private readonly DriverOptions options;
public Parser(DriverOptions options) public Parser(DriverOptions options)
{
this.options = options;
Library = new Library(options.OutputNamespace, options.LibraryName);
}
public bool ParseHeaders(IEnumerable<string> headers)
{ {
bool bHasErrors = false; this.options = options;
Library = new Library(options.OutputNamespace, options.LibraryName);
}
public bool ParseHeaders(IEnumerable<string> headers)
{
bool hasErrors = false;
foreach (var header in headers) foreach (var header in headers)
{ {
var result = ParseHeader(header); var result = ParseHeader(header);
@ -26,36 +26,39 @@ namespace Cxxi
{ {
foreach (var diag in result.Diagnostics) foreach (var diag in result.Diagnostics)
{ {
if (diag.Level == ParserDiagnosticLevel.Error || diag.Level == ParserDiagnosticLevel.Fatal) if (diag.Level == ParserDiagnosticLevel.Error ||
diag.Level == ParserDiagnosticLevel.Fatal)
{ {
Console.WriteLine(String.Format("{0}({1},{2}): error: {3}", diag.FileName, diag.lineNumber, diag.columnNumber, diag.Message)); Console.WriteLine(string.Format("{0}({1},{2}): error: {3}",
bHasErrors = true; diag.FileName, diag.LineNumber, diag.ColumnNumber,
diag.Message));
hasErrors = true;
} }
} }
} //if }
} }
return !bHasErrors; return !hasErrors;
} }
public ParserResult ParseHeader(string file) public ParserResult ParseHeader(string file)
{ {
var parserOptions = new ParserOptions var parserOptions = new ParserOptions
{ {
Library = Library, Library = Library,
FileName = file, FileName = file,
Verbose = false, Verbose = false,
IncludeDirs = options.IncludeDirs, IncludeDirs = options.IncludeDirs,
Defines = options.Defines, Defines = options.Defines,
ToolSetToUse = options.ToolsetToUse ToolSetToUse = options.ToolsetToUse
}; };
var result = ClangParser.Parse(parserOptions); var result = ClangParser.Parse(parserOptions);
HeaderParsed(file, result); HeaderParsed(file, result);
return result; return result;
} }
public Action<string, ParserResult> HeaderParsed = delegate {}; public Action<string, ParserResult> HeaderParsed = delegate {};
} }
} }

11
src/Parser/Parser.cpp

@ -1638,19 +1638,16 @@ ParserResult^ Parser::Parse(const std::string& File)
auto PDiag = ParserDiagnostic(); auto PDiag = ParserDiagnostic();
PDiag.FileName = marshalString<E_UTF8>(FileName.str()); PDiag.FileName = marshalString<E_UTF8>(FileName.str());
PDiag.Message = marshalString<E_UTF8>(Diag.Message.str()); PDiag.Message = marshalString<E_UTF8>(Diag.Message.str());
PDiag.lineNumber = 0; PDiag.LineNumber = 0;
PDiag.columnNumber = 0; PDiag.ColumnNumber = 0;
//
// Idea copied from CGDebugInfo::getLineNumber
//
if( !Diag.Location.isInvalid() ) if( !Diag.Location.isInvalid() )
{ {
clang::PresumedLoc PLoc = Source.getPresumedLoc(Diag.Location); clang::PresumedLoc PLoc = Source.getPresumedLoc(Diag.Location);
if( PLoc.isValid() ) if( PLoc.isValid() )
{ {
PDiag.lineNumber = PLoc.getLine(); PDiag.LineNumber = PLoc.getLine();
PDiag.columnNumber = PLoc.getColumn(); PDiag.ColumnNumber = PLoc.getColumn();
} }
} }

6
src/Parser/Parser.h

@ -55,7 +55,6 @@ public ref struct ParserOptions
bool Verbose; bool Verbose;
}; };
public enum struct ParserDiagnosticLevel public enum struct ParserDiagnosticLevel
{ {
Ignored, Ignored,
@ -65,14 +64,13 @@ public enum struct ParserDiagnosticLevel
Fatal Fatal
}; };
public value struct ParserDiagnostic public value struct ParserDiagnostic
{ {
System::String^ FileName; System::String^ FileName;
int lineNumber;
int columnNumber;
System::String^ Message; System::String^ Message;
ParserDiagnosticLevel Level; ParserDiagnosticLevel Level;
int LineNumber;
int ColumnNumber;
}; };
public enum struct ParserResultKind public enum struct ParserResultKind

Loading…
Cancel
Save