diff options
author | Nick Kledzik <kledzik@apple.com> | 2013-01-04 19:32:00 +0000 |
---|---|---|
committer | Nick Kledzik <kledzik@apple.com> | 2013-01-04 19:32:00 +0000 |
commit | 11964f2a8f097eab281fb97370f65a31499a3594 (patch) | |
tree | 7d0e0faa5edfb922b98d10e5670ad1446871dd55 /llvm | |
parent | f412e7501a54a44f4010d032c48377a30a2c77c6 (diff) | |
download | bcm5719-llvm-11964f2a8f097eab281fb97370f65a31499a3594.tar.gz bcm5719-llvm-11964f2a8f097eab281fb97370f65a31499a3594.zip |
Fix how YAML I/O detects flow sequences.
Update test case to verify flow sequence is
written as a flow sequence.
llvm-svn: 171514
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/Support/YAMLTraits.h | 56 | ||||
-rw-r--r-- | llvm/lib/Support/YAMLTraits.cpp | 2 | ||||
-rw-r--r-- | llvm/unittests/Support/YAMLIOTest.cpp | 12 |
3 files changed, 31 insertions, 39 deletions
diff --git a/llvm/include/llvm/Support/YAMLTraits.h b/llvm/include/llvm/Support/YAMLTraits.h index 3fb1f09063a..821333bf2f7 100644 --- a/llvm/include/llvm/Support/YAMLTraits.h +++ b/llvm/include/llvm/Support/YAMLTraits.h @@ -276,20 +276,9 @@ public: // Test if SequenceTraits<T> is defined on type T -// and SequenceTraits<T>::flow is *not* defined. template<typename T> struct has_SequenceTraits : public llvm::integral_constant<bool, - has_SequenceMethodTraits<T>::value - && !has_FlowTraits<T>::value > { }; - - -// Test if SequenceTraits<T> is defined on type T -// and SequenceTraits<T>::flow is defined. -template<typename T> -struct has_FlowSequenceTraits : public llvm::integral_constant<bool, - has_SequenceMethodTraits<T>::value - && has_FlowTraits<T>::value > { }; - + has_SequenceMethodTraits<T>::value > { }; // Test if DocumentListTraits<T> is defined on type T @@ -318,7 +307,6 @@ struct missingTraits : public llvm::integral_constant<bool, && !has_ScalarTraits<T>::value && !has_MappingTraits<T>::value && !has_SequenceTraits<T>::value - && !has_FlowSequenceTraits<T>::value && !has_DocumentListTraits<T>::value > {}; @@ -510,35 +498,33 @@ yamlize(IO &io, T &Val, bool) { template<typename T> typename llvm::enable_if_c<has_SequenceTraits<T>::value,void>::type yamlize(IO &io, T &Seq, bool) { - unsigned incount = io.beginSequence(); - unsigned count = io.outputting() ? SequenceTraits<T>::size(io, Seq) : incount; - for(unsigned i=0; i < count; ++i) { - void *SaveInfo; - if ( io.preflightElement(i, SaveInfo) ) { - yamlize(io, SequenceTraits<T>::element(io, Seq, i), true); - io.postflightElement(SaveInfo); + if ( has_FlowTraits< SequenceTraits<T> >::value ) { + unsigned incnt = io.beginFlowSequence(); + unsigned count = io.outputting() ? SequenceTraits<T>::size(io, Seq) : incnt; + for(unsigned i=0; i < count; ++i) { + void *SaveInfo; + if ( io.preflightFlowElement(i, SaveInfo) ) { + yamlize(io, SequenceTraits<T>::element(io, Seq, i), true); + io.postflightFlowElement(SaveInfo); + } } + io.endFlowSequence(); } - io.endSequence(); -} - -template<typename T> -typename llvm::enable_if_c<has_FlowSequenceTraits<T>::value,void>::type -yamlize(IO &io, T &Seq, bool) { - unsigned incount = io.beginFlowSequence(); - unsigned count = io.outputting() ? SequenceTraits<T>::size(io, Seq) : incount; - for(unsigned i=0; i < count; ++i) { - void *SaveInfo; - if ( io.preflightFlowElement(i, SaveInfo) ) { - yamlize(io, SequenceTraits<T>::element(io, Seq, i), true); - io.postflightFlowElement(SaveInfo); + else { + unsigned incnt = io.beginSequence(); + unsigned count = io.outputting() ? SequenceTraits<T>::size(io, Seq) : incnt; + for(unsigned i=0; i < count; ++i) { + void *SaveInfo; + if ( io.preflightElement(i, SaveInfo) ) { + yamlize(io, SequenceTraits<T>::element(io, Seq, i), true); + io.postflightElement(SaveInfo); + } } + io.endSequence(); } - io.endFlowSequence(); } - template<> struct ScalarTraits<bool> { static void output(const bool &, void*, llvm::raw_ostream &); diff --git a/llvm/lib/Support/YAMLTraits.cpp b/llvm/lib/Support/YAMLTraits.cpp index 8fcef40d243..ef3948dfd3a 100644 --- a/llvm/lib/Support/YAMLTraits.cpp +++ b/llvm/lib/Support/YAMLTraits.cpp @@ -411,8 +411,8 @@ void Output::postflightElement(void *) { } unsigned Output::beginFlowSequence() { - this->newLineCheck(); StateStack.push_back(inFlowSeq); + this->newLineCheck(); ColumnAtFlowStart = Column; output("[ "); NeedFlowSequenceComma = false; diff --git a/llvm/unittests/Support/YAMLIOTest.cpp b/llvm/unittests/Support/YAMLIOTest.cpp index fab2d5b666b..afa71cc25ea 100644 --- a/llvm/unittests/Support/YAMLIOTest.cpp +++ b/llvm/unittests/Support/YAMLIOTest.cpp @@ -600,8 +600,14 @@ TEST(YAMLIO, TestReadWriteMyFlowSequence) { map.numbers.push_back(1024); llvm::raw_string_ostream ostr(intermediate); - Output yout(ostr); + Output yout(ostr); yout << map; + + // Verify sequences were written in flow style + ostr.flush(); + llvm::StringRef flowOut(intermediate); + EXPECT_NE(llvm::StringRef::npos, flowOut.find("one, two")); + EXPECT_NE(llvm::StringRef::npos, flowOut.find("10, -30, 1024")); } { @@ -632,7 +638,7 @@ LLVM_YAML_STRONG_TYPEDEF(uint32_t, TotalSeconds) typedef std::vector<TotalSeconds> SecondsSequence; -LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(TotalSeconds) +LLVM_YAML_IS_SEQUENCE_VECTOR(TotalSeconds) namespace llvm { @@ -745,7 +751,7 @@ struct KindAndFlags { typedef std::vector<KindAndFlags> KindAndFlagsSequence; -LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(KindAndFlags) +LLVM_YAML_IS_SEQUENCE_VECTOR(KindAndFlags) namespace llvm { namespace yaml { |