From a9f9a5e8217bbd63423f53123fa758dcc0506618 Mon Sep 17 00:00:00 2001 From: triton Date: Sat, 16 Nov 2013 03:04:17 +0000 Subject: [PATCH] Fixed library parsing. --- src/Generator/Driver.cs | 3 ++- src/Parser/Parser.cpp | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 54b57c2a..f8f9df74 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -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 foreach (var library in Options.Libraries) { var parser = new ClangParser(); + parser.LibraryParsed += OnFileParsed; + var res = parser.ParseLibrary(library, Options); if (res.Kind != ParserResultKind.Success) diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index ab8325f2..f07fc2c2 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -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, return ParserResultKind::Error; auto LibName = clix::marshalString(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, } 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, return ParserResultKind::Error; auto LibName = clix::marshalString(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) 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;