diff options
| author | Sayan Nandan <17377258+sntdevco@users.noreply.github.com> | 2019-08-09 13:01:05 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-09 13:01:05 +0530 |
| commit | fb3a01354ffecc41d7a189e4dd225d706387a522 (patch) | |
| tree | 41492dfe93f1dccba847dadb56ac6aa079edaaa9 /src/rustllvm/ArchiveWrapper.cpp | |
| parent | 33445aea509cadcd715009c79795d289268daa7c (diff) | |
| parent | 5aa3d9a7b5d3a46a7f158e8881146331a6bc9243 (diff) | |
| download | rust-fb3a01354ffecc41d7a189e4dd225d706387a522.tar.gz rust-fb3a01354ffecc41d7a189e4dd225d706387a522.zip | |
Merge pull request #1 from rust-lang/master
Merge recent changes into master
Diffstat (limited to 'src/rustllvm/ArchiveWrapper.cpp')
| -rw-r--r-- | src/rustllvm/ArchiveWrapper.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/rustllvm/ArchiveWrapper.cpp b/src/rustllvm/ArchiveWrapper.cpp index 65975ec574c..dd0111d3f2c 100644 --- a/src/rustllvm/ArchiveWrapper.cpp +++ b/src/rustllvm/ArchiveWrapper.cpp @@ -24,9 +24,14 @@ struct RustArchiveIterator { bool First; Archive::child_iterator Cur; Archive::child_iterator End; - Error Err; - - RustArchiveIterator() : First(true), Err(Error::success()) {} + std::unique_ptr<Error> Err; + + RustArchiveIterator(Archive::child_iterator Cur, Archive::child_iterator End, + std::unique_ptr<Error> Err) + : First(true), + Cur(Cur), + End(End), + Err(std::move(Err)) {} }; enum class LLVMRustArchiveKind { @@ -84,15 +89,14 @@ extern "C" void LLVMRustDestroyArchive(LLVMRustArchiveRef RustArchive) { extern "C" LLVMRustArchiveIteratorRef LLVMRustArchiveIteratorNew(LLVMRustArchiveRef RustArchive) { Archive *Archive = RustArchive->getBinary(); - RustArchiveIterator *RAI = new RustArchiveIterator(); - RAI->Cur = Archive->child_begin(RAI->Err); - if (RAI->Err) { - LLVMRustSetLastError(toString(std::move(RAI->Err)).c_str()); - delete RAI; + std::unique_ptr<Error> Err = llvm::make_unique<Error>(Error::success()); + auto Cur = Archive->child_begin(*Err); + if (*Err) { + LLVMRustSetLastError(toString(std::move(*Err)).c_str()); return nullptr; } - RAI->End = Archive->child_end(); - return RAI; + auto End = Archive->child_end(); + return new RustArchiveIterator(Cur, End, std::move(Err)); } extern "C" LLVMRustArchiveChildConstRef @@ -108,8 +112,8 @@ LLVMRustArchiveIteratorNext(LLVMRustArchiveIteratorRef RAI) { // but instead advance it *before* fetching the child in all later calls. if (!RAI->First) { ++RAI->Cur; - if (RAI->Err) { - LLVMRustSetLastError(toString(std::move(RAI->Err)).c_str()); + if (*RAI->Err) { + LLVMRustSetLastError(toString(std::move(*RAI->Err)).c_str()); return nullptr; } } else { |
