Browse Source

Fixed the C++ parser to properly parser libraries.

pull/146/merge
triton 12 years ago
parent
commit
786ea61a7b
  1. 18
      src/CppParser/Parser.cpp
  2. 6
      src/CppParser/Parser.h

18
src/CppParser/Parser.cpp

@ -2440,7 +2440,8 @@ ParserResult* Parser::ParseHeader(const std::string& File) @@ -2440,7 +2440,8 @@ ParserResult* Parser::ParseHeader(const std::string& File)
}
ParserResultKind Parser::ParseArchive(llvm::StringRef File,
llvm::MemoryBuffer *Buffer)
llvm::MemoryBuffer *Buffer,
CppSharp::CppParser::NativeLibrary*& NativeLib)
{
llvm::error_code Code;
llvm::object::Archive Archive(Buffer, Code);
@ -2449,7 +2450,7 @@ ParserResultKind Parser::ParseArchive(llvm::StringRef File, @@ -2449,7 +2450,7 @@ ParserResultKind Parser::ParseArchive(llvm::StringRef File,
return ParserResultKind::Error;
auto LibName = File;
auto NativeLib = new NativeLibrary();
NativeLib = new NativeLibrary();
NativeLib->FileName = LibName;
for(auto it = Archive.begin_symbols(); it != Archive.end_symbols(); ++it)
@ -2466,7 +2467,8 @@ ParserResultKind Parser::ParseArchive(llvm::StringRef File, @@ -2466,7 +2467,8 @@ ParserResultKind Parser::ParseArchive(llvm::StringRef File,
}
ParserResultKind Parser::ParseSharedLib(llvm::StringRef File,
llvm::MemoryBuffer *Buffer)
llvm::MemoryBuffer *Buffer,
CppSharp::CppParser::NativeLibrary*& NativeLib)
{
auto Object = llvm::object::ObjectFile::createObjectFile(Buffer);
@ -2474,7 +2476,7 @@ ParserResultKind Parser::ParseSharedLib(llvm::StringRef File, @@ -2474,7 +2476,7 @@ ParserResultKind Parser::ParseSharedLib(llvm::StringRef File,
return ParserResultKind::Error;
auto LibName = File;
auto NativeLib = new NativeLibrary();
NativeLib = new NativeLibrary();
NativeLib->FileName = LibName;
llvm::error_code ec;
@ -2535,11 +2537,15 @@ ParserResultKind Parser::ParseSharedLib(llvm::StringRef File, @@ -2535,11 +2537,15 @@ ParserResultKind Parser::ParseSharedLib(llvm::StringRef 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;

6
src/CppParser/Parser.h

@ -51,9 +51,11 @@ struct Parser @@ -51,9 +51,11 @@ struct Parser
ParserResult* ParseHeader(const std::string& File);
ParserResult* ParseLibrary(const std::string& File);
ParserResultKind ParseArchive(llvm::StringRef File,
llvm::MemoryBuffer *Buffer);
llvm::MemoryBuffer *Buffer,
CppSharp::CppParser::NativeLibrary*& NativeLib);
ParserResultKind ParseSharedLib(llvm::StringRef File,
llvm::MemoryBuffer *Buffer);
llvm::MemoryBuffer *Buffer,
CppSharp::CppParser::NativeLibrary*& NativeLib);
protected:

Loading…
Cancel
Save