Browse Source

Improve error handling for failed library parsing.

pull/1765/head
Joao Matos 2 years ago
parent
commit
53e20e9f88
  1. 6
      src/CppParser/CppParser.h
  2. 8
      src/CppParser/Parser.cpp
  3. 13
      src/Generator/Driver.cs

6
src/CppParser/CppParser.h

@ -82,9 +82,9 @@ struct CS_API ParserDiagnostic @@ -82,9 +82,9 @@ struct CS_API ParserDiagnostic
~ParserDiagnostic();
std::string fileName;
std::string message;
ParserDiagnosticLevel level;
int lineNumber;
int columnNumber;
ParserDiagnosticLevel level { ParserDiagnosticLevel::Ignored };
int lineNumber {0};
int columnNumber {0};
};
enum class ParserResultKind

8
src/CppParser/Parser.cpp

@ -4713,7 +4713,13 @@ ParserResult* Parser::ParseLibrary(const CppLinkerOptions* Opts) @@ -4713,7 +4713,13 @@ ParserResult* Parser::ParseLibrary(const CppLinkerOptions* Opts)
auto BinaryOrErr = llvm::object::createBinary(FileEntry);
if (!BinaryOrErr)
{
auto Error = BinaryOrErr.takeError();
auto ErrMsg = llvm::toString(BinaryOrErr.takeError());
auto Diag = ParserDiagnostic();
Diag.fileName = FileEntry;
Diag.message = ErrMsg;
Diag.level = ParserDiagnosticLevel::Error;
res->Diagnostics.push_back(Diag);
res->kind = ParserResultKind::Error;
return res;
}

13
src/Generator/Driver.cs

@ -137,11 +137,19 @@ namespace CppSharp @@ -137,11 +137,19 @@ namespace CppSharp
if (diag.Level == ParserDiagnosticLevel.Note)
continue;
if (diag.LineNumber == 0 && diag.ColumnNumber == 0)
{
Diagnostics.Message("{0}: {1}: {2}",
diag.FileName, diag.Level.ToString().ToLower(), diag.Message);
}
else
{
Diagnostics.Message("{0}({1},{2}): {3}: {4}",
diag.FileName, diag.LineNumber, diag.ColumnNumber,
diag.Level.ToString().ToLower(), diag.Message);
}
}
}
public bool ParseCode()
{
@ -196,7 +204,10 @@ namespace CppSharp @@ -196,7 +204,10 @@ namespace CppSharp
using var res = ClangParser.ParseLibrary(linkerOptions);
if (res.Kind != ParserResultKind.Success)
{
res.Dispose();
continue;
}
for (uint i = 0; i < res.LibrariesCount; i++)
Context.Symbols.Libraries.Add(ClangParser.ConvertLibrary(res.GetLibraries(i)));
@ -206,7 +217,7 @@ namespace CppSharp @@ -206,7 +217,7 @@ namespace CppSharp
Context.Symbols.IndexSymbols();
SortModulesByDependencies();
return true;
return !hasParsingErrors;
}
public void SetupPasses(ILibrary library)

Loading…
Cancel
Save