[lld] r225814 - Replace vector<unique_ptr<File> with unique_ptr<File>.
Rui Ueyama
ruiu at google.com
Tue Jan 13 13:10:32 PST 2015
Addressed in r225829. Thanks!
On Tue, Jan 13, 2015 at 10:58 AM, David Blaikie <dblaikie at gmail.com> wrote:
>
>
> On Tue, Jan 13, 2015 at 10:47 AM, Rui Ueyama <ruiu at google.com> wrote:
>
>> Author: ruiu
>> Date: Tue Jan 13 12:47:25 2015
>> New Revision: 225814
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=225814&view=rev
>> Log:
>> Replace vector<unique_ptr<File> with unique_ptr<File>.
>>
>> Because each InputElement has exactly one File, we no longer have
>> to use a vector to store pointers to Files.
>>
>> Modified:
>> lld/trunk/include/lld/Core/InputGraph.h
>> lld/trunk/include/lld/Driver/WrapperInputGraph.h
>> lld/trunk/lib/Core/InputGraph.cpp
>> lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
>>
>> Modified: lld/trunk/include/lld/Core/InputGraph.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/InputGraph.h?rev=225814&r1=225813&r2=225814&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/include/lld/Core/InputGraph.h (original)
>> +++ lld/trunk/include/lld/Core/InputGraph.h Tue Jan 13 12:47:25 2015
>> @@ -148,7 +148,7 @@ private:
>> class FileNode : public InputElement {
>> public:
>> FileNode(StringRef path)
>> - : InputElement(InputElement::Kind::File), _path(path),
>> _nextFileIndex(0) {
>> + : InputElement(InputElement::Kind::File), _path(path),
>> _done(false) {
>> }
>>
>> virtual ErrorOr<StringRef> getPath(const LinkingContext &) const {
>> @@ -169,35 +169,33 @@ public:
>> }
>>
>> /// \brief Get the list of files
>> - range<InputGraph::FileIterT> files() {
>> - return make_range(_files.begin(), _files.end());
>> - }
>> + File *getFile() { return _file.get(); }
>>
>> /// \brief add a file to the list of files
>> virtual void addFiles(InputGraph::FileVectorT files) {
>> assert(files.size() == 1);
>> - assert(_files.empty());
>> - for (std::unique_ptr<File> &ai : files)
>> - _files.push_back(std::move(ai));
>> + assert(!_file);
>> + _file.swap(files[0]);
>
>
> _file = std::move(files[0]);
>
> perhaps?
>
>
>> }
>>
>> /// \brief Return the next File thats part of this node to the
>> /// resolver.
>> File *getNextFile() override {
>> - assert(_files.size() == 1);
>> - if (_nextFileIndex == _files.size())
>> + assert(_file);
>> + if (_done)
>> return nullptr;
>> - return _files[_nextFileIndex++].get();
>> + _done = true;
>> + return _file.get();
>> }
>>
>> std::error_code parse(const LinkingContext &, raw_ostream &) override;
>>
>> protected:
>> StringRef _path; // The path of the Input file
>> - InputGraph::FileVectorT _files; // A vector of lld File objects
>> + std::unique_ptr<File> _file; // A vector of lld File objects
>>
>> // The next file that would be processed by the resolver
>> - uint32_t _nextFileIndex;
>> + bool _done;
>> };
>>
>> /// \brief Represents Internal Input files
>> @@ -206,14 +204,14 @@ public:
>> SimpleFileNode(StringRef path) : FileNode(path) {}
>> SimpleFileNode(StringRef path, std::unique_ptr<File> f)
>> : FileNode(path) {
>> - _files.push_back(std::move(f));
>> + _file.swap(f);
>>
>
> Use the init list?
>
> : FileNode(path), _file(std::move(f)) {
> }
>
>
>> }
>>
>> virtual ~SimpleFileNode() {}
>>
>> /// \brief add a file to the list of files
>> virtual void appendInputFile(std::unique_ptr<File> f) {
>> - _files.push_back(std::move(f));
>> + _file.swap(f);
>>
>
> _file = std::move(f);
>
>
>> }
>> };
>>
>>
>> Modified: lld/trunk/include/lld/Driver/WrapperInputGraph.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Driver/WrapperInputGraph.h?rev=225814&r1=225813&r2=225814&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/include/lld/Driver/WrapperInputGraph.h (original)
>> +++ lld/trunk/include/lld/Driver/WrapperInputGraph.h Tue Jan 13 12:47:25
>> 2015
>> @@ -22,7 +22,7 @@ namespace lld {
>> class WrapperNode : public FileNode {
>> public:
>> WrapperNode(std::unique_ptr<File> file) : FileNode(file->path()) {
>> - _files.push_back(std::move(file));
>> + _file.swap(file);
>>
>
> Init list again ?(oh, I guess FileNode would need a ctor taking the
> unique_ptr<File> for this case and the last - that might be a good thing?)
>
>
>> }
>> };
>>
>>
>> Modified: lld/trunk/lib/Core/InputGraph.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/InputGraph.cpp?rev=225814&r1=225813&r2=225814&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/Core/InputGraph.cpp (original)
>> +++ lld/trunk/lib/Core/InputGraph.cpp Tue Jan 13 12:47:25 2015
>> @@ -69,8 +69,8 @@ void InputGraph::skipGroup() {
>> }
>>
>> std::error_code FileNode::parse(const LinkingContext &, raw_ostream &) {
>> - for (std::unique_ptr<File> &file : _files)
>> - if (std::error_code ec = file->parse())
>> + if (_file)
>> + if (std::error_code ec = _file->parse())
>> return ec;
>> return std::error_code();
>> }
>>
>> Modified: lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp?rev=225814&r1=225813&r2=225814&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp (original)
>> +++ lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp Tue Jan 13
>> 12:47:25 2015
>> @@ -928,9 +928,7 @@ bool MachOLinkingContext::customAtomOrde
>>
>> static File *getFirstFile(const std::unique_ptr<InputElement> &elem) {
>> FileNode *e = dyn_cast<FileNode>(const_cast<InputElement
>> *>(elem.get()));
>> - if (!e || e->files().empty())
>> - return nullptr;
>> - return e->files()[0].get();
>> + return e ? e->getFile() : nullptr;
>> }
>>
>> static bool isLibrary(const std::unique_ptr<InputElement> &elem) {
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150113/b9e8ed2a/attachment.html>
More information about the llvm-commits
mailing list