From 34df1600e003bf83678b308f7aa63522dfbd4f4a Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 1 May 2012 10:19:59 +0000 Subject: [PATCH] YAMLParser: get rid of global ctors & dtors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155907 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/YAMLParser.h | 29 ++++++++++++++++++----------- lib/Support/YAMLParser.cpp | 2 -- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/include/llvm/Support/YAMLParser.h b/include/llvm/Support/YAMLParser.h index 87117fdd4da..10239958f33 100644 --- a/include/llvm/Support/YAMLParser.h +++ b/include/llvm/Support/YAMLParser.h @@ -513,37 +513,44 @@ private: /// @brief Iterator abstraction for Documents over a Stream. class document_iterator { public: - document_iterator() : Doc(NullDoc) {} - document_iterator(OwningPtr &D) : Doc(D) {} + document_iterator() : Doc(0) {} + document_iterator(OwningPtr &D) : Doc(&D) {} bool operator ==(const document_iterator &Other) { - return Doc == Other.Doc; + if (isAtEnd() || Other.isAtEnd()) + return isAtEnd() && Other.isAtEnd(); + + return *Doc == *Other.Doc; } bool operator !=(const document_iterator &Other) { return !(*this == Other); } document_iterator operator ++() { - if (!Doc->skip()) { - Doc.reset(0); + assert(Doc != 0 && "incrementing iterator past the end."); + if (!(*Doc)->skip()) { + Doc->reset(0); } else { - Stream &S = Doc->stream; - Doc.reset(new Document(S)); + Stream &S = (*Doc)->stream; + Doc->reset(new Document(S)); } return *this; } Document &operator *() { - return *Doc; + return *Doc->get(); } OwningPtr &operator ->() { - return Doc; + return *Doc; } private: - static OwningPtr NullDoc; - OwningPtr &Doc; + bool isAtEnd() const { + return Doc == 0 || *Doc == 0; + } + + OwningPtr *Doc; }; } diff --git a/lib/Support/YAMLParser.cpp b/lib/Support/YAMLParser.cpp index fbb6ce95bd5..211ed2cdc3d 100644 --- a/lib/Support/YAMLParser.cpp +++ b/lib/Support/YAMLParser.cpp @@ -2125,5 +2125,3 @@ bool Document::expectToken(int TK) { } return true; } - -OwningPtr document_iterator::NullDoc;