YAMLParser: get rid of global ctors & dtors.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155907 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2012-05-01 10:19:59 +00:00
parent 7c4ce30ea6
commit 34df1600e0
2 changed files with 18 additions and 13 deletions

View File

@ -513,37 +513,44 @@ private:
/// @brief Iterator abstraction for Documents over a Stream.
class document_iterator {
public:
document_iterator() : Doc(NullDoc) {}
document_iterator(OwningPtr<Document> &D) : Doc(D) {}
document_iterator() : Doc(0) {}
document_iterator(OwningPtr<Document> &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<Document> &operator ->() {
return Doc;
return *Doc;
}
private:
static OwningPtr<Document> NullDoc;
OwningPtr<Document> &Doc;
bool isAtEnd() const {
return Doc == 0 || *Doc == 0;
}
OwningPtr<Document> *Doc;
};
}

View File

@ -2125,5 +2125,3 @@ bool Document::expectToken(int TK) {
}
return true;
}
OwningPtr<Document> document_iterator::NullDoc;