[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