From 9114439df2293a277709f94004d738f0cc830d57 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Wed, 20 Nov 2013 23:51:41 +0000 Subject: [PATCH] Move member functions to its own cpp file. llvm-svn: 195281 --- lld/include/lld/Driver/WinLinkInputGraph.h | 39 +------------ lld/lib/Driver/CMakeLists.txt | 1 + lld/lib/Driver/WinLinkDriver.cpp | 14 ----- lld/lib/Driver/WinLinkInputGraph.cpp | 68 ++++++++++++++++++++++ 4 files changed, 71 insertions(+), 51 deletions(-) create mode 100644 lld/lib/Driver/WinLinkInputGraph.cpp diff --git a/lld/include/lld/Driver/WinLinkInputGraph.h b/lld/include/lld/Driver/WinLinkInputGraph.h index 471bde7c25ef..eb698415bafa 100644 --- a/lld/include/lld/Driver/WinLinkInputGraph.h +++ b/lld/include/lld/Driver/WinLinkInputGraph.h @@ -38,38 +38,7 @@ public: virtual ErrorOr getPath(const LinkingContext &ctx) const; /// \brief Parse the input file to lld::File. - error_code parse(const LinkingContext &ctx, raw_ostream &diagnostics) { - ErrorOr filePath = getPath(ctx); - if (!filePath) - return error_code(filePath); - - if (error_code ec = getBuffer(*filePath)) - return ec; - - if (ctx.logInputFiles()) - diagnostics << *filePath << "\n"; - - if (filePath->endswith(".objtxt")) - return ctx.getYAMLReader().parseFile(_buffer, _files); - - llvm::sys::fs::file_magic FileType = - llvm::sys::fs::identify_magic(_buffer->getBuffer()); - std::unique_ptr f; - - switch (FileType) { - case llvm::sys::fs::file_magic::archive: { - // Archive File - error_code ec; - f.reset(new FileArchive(ctx, std::move(_buffer), ec, false)); - _files.push_back(std::move(f)); - return ec; - } - - case llvm::sys::fs::file_magic::coff_object: - default: - return _ctx.getDefaultReader().parseFile(_buffer, _files); - } - } + error_code parse(const LinkingContext &ctx, raw_ostream &diagnostics); /// \brief validates the Input Element virtual bool validate() { return true; } @@ -77,11 +46,7 @@ public: /// \brief Dump the Input Element virtual bool dump(raw_ostream &) { return true; } - virtual ErrorOr getNextFile() { - if (_nextFileIndex == _files.size()) - return make_error_code(InputGraphError::no_more_files); - return *_files[_nextFileIndex++]; - } + virtual ErrorOr getNextFile(); protected: const PECOFFLinkingContext &_ctx; diff --git a/lld/lib/Driver/CMakeLists.txt b/lld/lib/Driver/CMakeLists.txt index 2006b2a92dfd..6670bf097e2e 100644 --- a/lld/lib/Driver/CMakeLists.txt +++ b/lld/lib/Driver/CMakeLists.txt @@ -16,6 +16,7 @@ add_lld_library(lldDriver Driver.cpp GnuLdDriver.cpp WinLinkDriver.cpp + WinLinkInputGraph.cpp UniversalDriver.cpp ) diff --git a/lld/lib/Driver/WinLinkDriver.cpp b/lld/lib/Driver/WinLinkDriver.cpp index cda13aa98a85..1d8cede07b23 100644 --- a/lld/lib/Driver/WinLinkDriver.cpp +++ b/lld/lib/Driver/WinLinkDriver.cpp @@ -547,20 +547,6 @@ parseArgs(int argc, const char *argv[], raw_ostream &diagnostics, // Main driver // -ErrorOr PECOFFFileNode::getPath(const LinkingContext &) const { - if (_path.endswith_lower(".lib")) - return _ctx.searchLibraryFile(_path); - if (llvm::sys::path::extension(_path).empty()) - return _ctx.allocateString(_path.str() + ".obj"); - return _path; -} - -ErrorOr PECOFFLibraryNode::getPath(const LinkingContext &) const { - if (!_path.endswith_lower(".lib")) - return _ctx.searchLibraryFile(_ctx.allocateString(_path.str() + ".lib")); - return _ctx.searchLibraryFile(_path); -} - bool WinLinkDriver::linkPECOFF(int argc, const char *argv[], raw_ostream &diagnostics) { PECOFFLinkingContext context; diff --git a/lld/lib/Driver/WinLinkInputGraph.cpp b/lld/lib/Driver/WinLinkInputGraph.cpp new file mode 100644 index 000000000000..b8bfcc131ab2 --- /dev/null +++ b/lld/lib/Driver/WinLinkInputGraph.cpp @@ -0,0 +1,68 @@ +//===- lib/Driver/WinLinkDriver.cpp ---------------------------------------===// +// +// The LLVM Linker +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lld/Driver/WinLinkInputGraph.h" + +namespace lld { + +/// \brief Parse the input file to lld::File. +error_code PECOFFFileNode::parse(const LinkingContext &ctx, + raw_ostream &diagnostics) { + ErrorOr filePath = getPath(ctx); + if (!filePath) + return error_code(filePath); + + if (error_code ec = getBuffer(*filePath)) + return ec; + + if (ctx.logInputFiles()) + diagnostics << *filePath << "\n"; + + if (filePath->endswith(".objtxt")) + return ctx.getYAMLReader().parseFile(_buffer, _files); + + llvm::sys::fs::file_magic FileType = + llvm::sys::fs::identify_magic(_buffer->getBuffer()); + std::unique_ptr f; + + switch (FileType) { + case llvm::sys::fs::file_magic::archive: { + // Archive File + error_code ec; + f.reset(new FileArchive(ctx, std::move(_buffer), ec, false)); + _files.push_back(std::move(f)); + return ec; + } + case llvm::sys::fs::file_magic::coff_object: + default: + return _ctx.getDefaultReader().parseFile(_buffer, _files); + } +} + +ErrorOr PECOFFFileNode::getNextFile() { + if (_nextFileIndex == _files.size()) + return make_error_code(InputGraphError::no_more_files); + return *_files[_nextFileIndex++]; +} + +ErrorOr PECOFFFileNode::getPath(const LinkingContext &) const { + if (_path.endswith_lower(".lib")) + return _ctx.searchLibraryFile(_path); + if (llvm::sys::path::extension(_path).empty()) + return _ctx.allocateString(_path.str() + ".obj"); + return _path; +} + +ErrorOr PECOFFLibraryNode::getPath(const LinkingContext &) const { + if (!_path.endswith_lower(".lib")) + return _ctx.searchLibraryFile(_ctx.allocateString(_path.str() + ".lib")); + return _ctx.searchLibraryFile(_path); +} + +} // end anonymous namespace