[llvm] r190469 - YAMLIO: Fix string quoting logic.
Rui Ueyama
ruiu at google.com
Tue Sep 10 19:13:20 PDT 2013
Sorry about the breakage and thank you for rolling it back.
On Tue, Sep 10, 2013 at 7:03 PM, Hans Wennborg <hans at chromium.org> wrote:
> Hi Rui,
>
> I reverted this in r190480 as it was turning the bots red.
>
> Example error output:
>
> http://lab.llvm.org:8011/builders/clang-x86_64-ubuntu-gdb-75/builds/8663/steps/check-all/logs/Clang%20Tools%3A%3Amain.cpp
>
> http://lab.llvm.org:8011/builders/clang-x86_64-ubuntu-gdb-75/builds/8663/steps/check-all/logs/Clang-Unit%3A%3AReplacementsYamlTest.serializesReplacements
>
> - Hans
>
> On Tue, Sep 10, 2013 at 5:45 PM, Rui Ueyama <ruiu at google.com> wrote:
> > Author: ruiu
> > Date: Tue Sep 10 19:45:48 2013
> > New Revision: 190469
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=190469&view=rev
> > Log:
> > YAMLIO: Fix string quoting logic.
> >
> > YAMLIO printed a string as is without quotes unless it contains a newline
> > character. That did not suffice. We also need to quote a string if it
> starts
> > with a backquote, quote, double quote or atsign, or it's the empty
> string.
> >
> > Modified:
> > llvm/trunk/lib/Support/YAMLTraits.cpp
> > llvm/trunk/unittests/Support/YAMLIOTest.cpp
> >
> > Modified: llvm/trunk/lib/Support/YAMLTraits.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/YAMLTraits.cpp?rev=190469&r1=190468&r2=190469&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/Support/YAMLTraits.cpp (original)
> > +++ llvm/trunk/lib/Support/YAMLTraits.cpp Tue Sep 10 19:45:48 2013
> > @@ -510,8 +510,16 @@ void Output::endBitSetScalar() {
> >
> > void Output::scalarString(StringRef &S) {
> > this->newLineCheck();
> > - if (S.find('\n') == StringRef::npos) {
> > - // No embedded new-line chars, just print string.
> > +
> > + if (S.empty()) {
> > + // Print '' for the empty string because leaving the field empty is
> not
> > + // allowed.
> > + this->outputUpToEndOfLine("''");
> > + return;
> > + }
> > + if (!strchr("'`@\"", S.front()) && S.find('\n') == StringRef::npos) {
> > + // Plain string cannot start with double quote or single quote.
> Backquote
> > + // and atsign are reserved characters. Newline is not allowed.
> > this->outputUpToEndOfLine(S);
> > return;
> > }
> >
> > Modified: llvm/trunk/unittests/Support/YAMLIOTest.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/YAMLIOTest.cpp?rev=190469&r1=190468&r2=190469&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/unittests/Support/YAMLIOTest.cpp (original)
> > +++ llvm/trunk/unittests/Support/YAMLIOTest.cpp Tue Sep 10 19:45:48 2013
> > @@ -273,7 +273,64 @@ TEST(YAMLIO, TestReadWriteBuiltInTypes)
> > }
> > }
> >
> > +struct StringTypes {
> > + llvm::StringRef str1;
> > + llvm::StringRef str2;
> > + llvm::StringRef str3;
> > + llvm::StringRef str4;
> > + llvm::StringRef str5;
> > +};
> >
> > +namespace llvm {
> > +namespace yaml {
> > + template <>
> > + struct MappingTraits<StringTypes> {
> > + static void mapping(IO &io, StringTypes& st) {
> > + io.mapRequired("str1", st.str1);
> > + io.mapRequired("str2", st.str2);
> > + io.mapRequired("str3", st.str3);
> > + io.mapRequired("str4", st.str4);
> > + io.mapRequired("str5", st.str5);
> > + }
> > + };
> > +}
> > +}
> > +
> > +TEST(YAMLIO, TestReadWriteStringTypes) {
> > + std::string intermediate;
> > + {
> > + StringTypes map;
> > + map.str1 = "'aaa";
> > + map.str2 = "\"bbb";
> > + map.str3 = "`ccc";
> > + map.str4 = "@ddd";
> > + map.str5 = "";
> > +
> > + llvm::raw_string_ostream ostr(intermediate);
> > + Output yout(ostr);
> > + yout << map;
> > + }
> > +
> > + llvm::StringRef flowOut(intermediate);
> > + EXPECT_NE(llvm::StringRef::npos, flowOut.find("'''aaa"));
> > + EXPECT_NE(llvm::StringRef::npos, flowOut.find("'\"bbb'"));
> > + EXPECT_NE(llvm::StringRef::npos, flowOut.find("'`ccc'"));
> > + EXPECT_NE(llvm::StringRef::npos, flowOut.find("'@ddd'"));
> > + EXPECT_NE(llvm::StringRef::npos, flowOut.find("''\n"));
> > +
> > + {
> > + Input yin(intermediate);
> > + StringTypes map;
> > + yin >> map;
> > +
> > + EXPECT_FALSE(yin.error());
> > + EXPECT_TRUE(map.str1.equals("'aaa"));
> > + EXPECT_TRUE(map.str2.equals("\"bbb"));
> > + EXPECT_TRUE(map.str3.equals("`ccc"));
> > + EXPECT_TRUE(map.str4.equals("@ddd"));
> > + EXPECT_TRUE(map.str5.equals(""));
> > + }
> > +}
> >
> >
> //===----------------------------------------------------------------------===//
> > // Test ScalarEnumerationTraits
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130910/92bb909b/attachment.html>
More information about the llvm-commits
mailing list