[llvm-commits] [llvm] r171514 - in /llvm/trunk: include/llvm/Support/YAMLTraits.h lib/Support/YAMLTraits.cpp unittests/Support/YAMLIOTest.cpp
Nick Kledzik
kledzik at apple.com
Fri Jan 4 11:32:00 PST 2013
Author: kledzik
Date: Fri Jan 4 13:32:00 2013
New Revision: 171514
URL: http://llvm.org/viewvc/llvm-project?rev=171514&view=rev
Log:
Fix how YAML I/O detects flow sequences.
Update test case to verify flow sequence is
written as a flow sequence.
Modified:
llvm/trunk/include/llvm/Support/YAMLTraits.h
llvm/trunk/lib/Support/YAMLTraits.cpp
llvm/trunk/unittests/Support/YAMLIOTest.cpp
Modified: llvm/trunk/include/llvm/Support/YAMLTraits.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/YAMLTraits.h?rev=171514&r1=171513&r2=171514&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/YAMLTraits.h (original)
+++ llvm/trunk/include/llvm/Support/YAMLTraits.h Fri Jan 4 13:32:00 2013
@@ -276,20 +276,9 @@
// 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 @@
&& !has_ScalarTraits<T>::value
&& !has_MappingTraits<T>::value
&& !has_SequenceTraits<T>::value
- && !has_FlowSequenceTraits<T>::value
&& !has_DocumentListTraits<T>::value > {};
@@ -510,35 +498,33 @@
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 &);
Modified: llvm/trunk/lib/Support/YAMLTraits.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/YAMLTraits.cpp?rev=171514&r1=171513&r2=171514&view=diff
==============================================================================
--- llvm/trunk/lib/Support/YAMLTraits.cpp (original)
+++ llvm/trunk/lib/Support/YAMLTraits.cpp Fri Jan 4 13:32:00 2013
@@ -411,8 +411,8 @@
}
unsigned Output::beginFlowSequence() {
- this->newLineCheck();
StateStack.push_back(inFlowSeq);
+ this->newLineCheck();
ColumnAtFlowStart = Column;
output("[ ");
NeedFlowSequenceComma = false;
Modified: llvm/trunk/unittests/Support/YAMLIOTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/YAMLIOTest.cpp?rev=171514&r1=171513&r2=171514&view=diff
==============================================================================
--- llvm/trunk/unittests/Support/YAMLIOTest.cpp (original)
+++ llvm/trunk/unittests/Support/YAMLIOTest.cpp Fri Jan 4 13:32:00 2013
@@ -600,8 +600,14 @@
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 @@
typedef std::vector<TotalSeconds> SecondsSequence;
-LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(TotalSeconds)
+LLVM_YAML_IS_SEQUENCE_VECTOR(TotalSeconds)
namespace llvm {
@@ -745,7 +751,7 @@
typedef std::vector<KindAndFlags> KindAndFlagsSequence;
-LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(KindAndFlags)
+LLVM_YAML_IS_SEQUENCE_VECTOR(KindAndFlags)
namespace llvm {
namespace yaml {
More information about the llvm-commits
mailing list