Browse Source

Fixed library parsing.

pull/123/head
triton 12 years ago
parent
commit
a9f9a5e821
  1. 3
      src/Generator/Driver.cs
  2. 18
      src/Parser/Parser.cpp

3
src/Generator/Driver.cs

@ -152,7 +152,6 @@ namespace CppSharp @@ -152,7 +152,6 @@ namespace CppSharp
var parser = new ClangParser();
parser.SourceParsed += OnSourceFileParsed;
parser.LibraryParsed += OnFileParsed;
parser.ParseProject(Project, Options);
@ -170,6 +169,8 @@ namespace CppSharp @@ -170,6 +169,8 @@ namespace CppSharp
foreach (var library in Options.Libraries)
{
var parser = new ClangParser();
parser.LibraryParsed += OnFileParsed;
var res = parser.ParseLibrary(library, Options);
if (res.Kind != ParserResultKind.Success)

18
src/Parser/Parser.cpp

@ -2413,7 +2413,8 @@ ParserResult^ Parser::ParseHeader(const std::string& File) @@ -2413,7 +2413,8 @@ ParserResult^ Parser::ParseHeader(const std::string& File)
}
ParserResultKind Parser::ParseArchive(llvm::StringRef File,
llvm::MemoryBuffer *Buffer)
llvm::MemoryBuffer *Buffer,
CppSharp::AST::NativeLibrary^ NativeLib)
{
llvm::error_code Code;
llvm::object::Archive Archive(Buffer, Code);
@ -2422,7 +2423,7 @@ ParserResultKind Parser::ParseArchive(llvm::StringRef File, @@ -2422,7 +2423,7 @@ ParserResultKind Parser::ParseArchive(llvm::StringRef File,
return ParserResultKind::Error;
auto LibName = clix::marshalString<clix::E_UTF8>(File);
auto NativeLib = Symbols->FindOrCreateLibrary(LibName);
NativeLib->FileName = LibName;
for(auto it = Archive.begin_symbols(); it != Archive.end_symbols(); ++it)
{
@ -2439,7 +2440,8 @@ ParserResultKind Parser::ParseArchive(llvm::StringRef File, @@ -2439,7 +2440,8 @@ ParserResultKind Parser::ParseArchive(llvm::StringRef File,
}
ParserResultKind Parser::ParseSharedLib(llvm::StringRef File,
llvm::MemoryBuffer *Buffer)
llvm::MemoryBuffer *Buffer,
CppSharp::AST::NativeLibrary^ NativeLib)
{
auto Object = llvm::object::ObjectFile::createObjectFile(Buffer);
@ -2447,7 +2449,7 @@ ParserResultKind Parser::ParseSharedLib(llvm::StringRef File, @@ -2447,7 +2449,7 @@ ParserResultKind Parser::ParseSharedLib(llvm::StringRef File,
return ParserResultKind::Error;
auto LibName = clix::marshalString<clix::E_UTF8>(File);
auto NativeLib = Symbols->FindOrCreateLibrary(LibName);
NativeLib->FileName = LibName;
llvm::error_code ec;
for(auto it = Object->begin_symbols(); it != Object->end_symbols(); it.increment(ec))
@ -2510,11 +2512,15 @@ ParserResult^ Parser::ParseLibrary(const std::string& File) @@ -2510,11 +2512,15 @@ ParserResult^ Parser::ParseLibrary(const std::string& File)
return res;
}
res->Kind = ParseArchive(File, FM.getBufferForFile(FileEntry));
res->Kind = ParseArchive(File, FM.getBufferForFile(FileEntry),
res->Library);
if (res->Kind == ParserResultKind::Success)
return res;
res->Kind = ParseSharedLib(File, FM.getBufferForFile(FileEntry));
res->Kind = ParseSharedLib(File, FM.getBufferForFile(FileEntry),
res->Library);
if (res->Kind == ParserResultKind::Success)
return res;

Loading…
Cancel
Save