[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