From 43c24282039f03caabf7a7b2196d22a076f5b592 Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Mon, 28 Nov 2016 04:57:04 +0000 Subject: [PATCH] Revert "Improve error handling in YAML parsing" This reverts commit r288014, the unittest isn't passing llvm-svn: 288015 --- llvm/include/llvm/Support/YAMLTraits.h | 1 - llvm/lib/Support/YAMLTraits.cpp | 20 +++++++++----------- llvm/unittests/Support/YAMLIOTest.cpp | 8 -------- 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/llvm/include/llvm/Support/YAMLTraits.h b/llvm/include/llvm/Support/YAMLTraits.h index d1dd34a..f38c85a 100644 --- a/llvm/include/llvm/Support/YAMLTraits.h +++ b/llvm/include/llvm/Support/YAMLTraits.h @@ -1085,7 +1085,6 @@ private: void scalarString(StringRef &, bool) override; void blockScalarString(StringRef &) override; void setError(const Twine &message) override; - bool hasError() const; bool canElideEmptySequence() override; class HNode { diff --git a/llvm/lib/Support/YAMLTraits.cpp b/llvm/lib/Support/YAMLTraits.cpp index ccd0f45..75fac20 100644 --- a/llvm/lib/Support/YAMLTraits.cpp +++ b/llvm/lib/Support/YAMLTraits.cpp @@ -112,7 +112,7 @@ bool Input::mapTag(StringRef Tag, bool Default) { } void Input::beginMapping() { - if (hasError()) + if (EC) return; // CurrentNode can be null if the document is empty. MapHNode *MN = dyn_cast_or_null(CurrentNode); @@ -124,7 +124,7 @@ void Input::beginMapping() { bool Input::preflightKey(const char *Key, bool Required, bool, bool &UseDefault, void *&SaveInfo) { UseDefault = false; - if (hasError()) + if (EC) return false; // CurrentNode is null for empty documents, which is an error in case required @@ -159,7 +159,7 @@ void Input::postflightKey(void *saveInfo) { } void Input::endMapping() { - if (hasError()) + if (EC) return; // CurrentNode can be null if the document is empty. MapHNode *MN = dyn_cast_or_null(CurrentNode); @@ -196,7 +196,7 @@ void Input::endSequence() { } bool Input::preflightElement(unsigned Index, void *&SaveInfo) { - if (hasError()) + if (EC) return false; if (SequenceHNode *SQ = dyn_cast(CurrentNode)) { SaveInfo = CurrentNode; @@ -213,7 +213,7 @@ void Input::postflightElement(void *SaveInfo) { unsigned Input::beginFlowSequence() { return beginSequence(); } bool Input::preflightFlowElement(unsigned index, void *&SaveInfo) { - if (hasError()) + if (EC) return false; if (SequenceHNode *SQ = dyn_cast(CurrentNode)) { SaveInfo = CurrentNode; @@ -271,7 +271,7 @@ bool Input::beginBitSetScalar(bool &DoClear) { } bool Input::bitSetMatch(const char *Str, bool) { - if (hasError()) + if (EC) return false; if (SequenceHNode *SQ = dyn_cast(CurrentNode)) { unsigned Index = 0; @@ -293,7 +293,7 @@ bool Input::bitSetMatch(const char *Str, bool) { } void Input::endBitSetScalar() { - if (hasError()) + if (EC) return; if (SequenceHNode *SQ = dyn_cast(CurrentNode)) { assert(BitValuesUsed.size() == SQ->Entries.size()); @@ -321,8 +321,6 @@ void Input::setError(HNode *hnode, const Twine &message) { this->setError(hnode->_node, message); } -bool Input::hasError() const { return EC || Strm->failed(); } - void Input::setError(Node *node, const Twine &message) { Strm->printError(node, message); EC = make_error_code(errc::invalid_argument); @@ -344,7 +342,7 @@ std::unique_ptr Input::createHNodes(Node *N) { auto SQHNode = llvm::make_unique(N); for (Node &SN : *SQ) { auto Entry = this->createHNodes(&SN); - if (hasError()) + if (EC) break; SQHNode->Entries.push_back(std::move(Entry)); } @@ -365,7 +363,7 @@ std::unique_ptr Input::createHNodes(Node *N) { KeyStr = StringStorage.str().copy(StringAllocator); } auto ValueHNode = this->createHNodes(KVN.getValue()); - if (hasError()) + if (EC) break; mapHNode->Mapping[KeyStr] = std::move(ValueHNode); } diff --git a/llvm/unittests/Support/YAMLIOTest.cpp b/llvm/unittests/Support/YAMLIOTest.cpp index c3e18d3..bf70e74 100644 --- a/llvm/unittests/Support/YAMLIOTest.cpp +++ b/llvm/unittests/Support/YAMLIOTest.cpp @@ -2368,11 +2368,3 @@ TEST(YAMLIO, TestMapWithContext) { out); out.clear(); } - -TEST(YAMLIO, InvalidInput) { - // polluting 1 value in the sequence - Input yin("---\n- foo: 3\n bar: 5\n1\n- foo: 3\n bar: 5\n...\n"); - std::vector Data; - yin >> Data; - EXPECT_TRUE((bool)yin.error()); -} -- 2.7.4