[llvm-commits] [llvm] r84355 - in /llvm/trunk: include/llvm/Support/raw_ostream.h lib/Support/raw_ostream.cpp unittests/Support/raw_ostream_test.cpp
Jim Grosbach
grosbach at apple.com
Mon Oct 19 10:27:06 PDT 2009
Hi Daniel,
This looks very nice. Definitely an improvement over EscapeString.
I assume the choice to restrict the list handled explicitly and not
include things like '\v' and '\b' is due to those being uncommon
enough to just leave to the generic octal expansion?
-Jim
On Oct 17, 2009, at 1:43 PM, Daniel Dunbar wrote:
> Author: ddunbar
> Date: Sat Oct 17 15:43:08 2009
> New Revision: 84355
>
> URL: http://llvm.org/viewvc/llvm-project?rev=84355&view=rev
> Log:
> Add raw_ostream::write_escaped, for writing escaped strings.
>
> Modified:
> llvm/trunk/include/llvm/Support/raw_ostream.h
> llvm/trunk/lib/Support/raw_ostream.cpp
> llvm/trunk/unittests/Support/raw_ostream_test.cpp
>
> Modified: llvm/trunk/include/llvm/Support/raw_ostream.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=84355&r1=84354&r2=84355&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/include/llvm/Support/raw_ostream.h (original)
> +++ llvm/trunk/include/llvm/Support/raw_ostream.h Sat Oct 17
> 15:43:08 2009
> @@ -216,6 +216,10 @@
> /// write_hex - Output \arg N in hexadecimal, without any prefix
> or padding.
> raw_ostream &write_hex(unsigned long long N);
>
> + /// write_escaped - Output \arg Str, turning '\\', '\t', '\n',
> '"', and
> + /// anything that doesn't satisfy std::isprint into an escape
> sequence.
> + raw_ostream &write_escaped(StringRef Str);
> +
> raw_ostream &write(unsigned char C);
> raw_ostream &write(const char *Ptr, size_t Size);
>
>
> Modified: llvm/trunk/lib/Support/raw_ostream.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=84355&r1=84354&r2=84355&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Support/raw_ostream.cpp (original)
> +++ llvm/trunk/lib/Support/raw_ostream.cpp Sat Oct 17 15:43:08 2009
> @@ -168,6 +168,40 @@
> return write(CurPtr, EndPtr-CurPtr);
> }
>
> +raw_ostream &raw_ostream::write_escaped(StringRef Str) {
> + for (unsigned i = 0, e = Str.size(); i != e; ++i) {
> + unsigned char c = Str[i];
> +
> + switch (c) {
> + case '\\':
> + *this << '\\' << '\\';
> + break;
> + case '\t':
> + *this << '\\' << 't';
> + break;
> + case '\n':
> + *this << '\\' << 'n';
> + break;
> + case '"':
> + *this << '\\' << '"';
> + break;
> + default:
> + if (std::isprint(c)) {
> + *this << c;
> + break;
> + }
> +
> + // Always expand to a 3-character octal escape.
> + *this << '\\';
> + *this << char('0' + ((c >> 6) & 7));
> + *this << char('0' + ((c >> 3) & 7));
> + *this << char('0' + ((c >> 0) & 7));
> + }
> + }
> +
> + return *this;
> +}
> +
> raw_ostream &raw_ostream::operator<<(const void *P) {
> *this << '0' << 'x';
>
>
> Modified: llvm/trunk/unittests/Support/raw_ostream_test.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/raw_ostream_test.cpp?rev=84355&r1=84354&r2=84355&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/unittests/Support/raw_ostream_test.cpp (original)
> +++ llvm/trunk/unittests/Support/raw_ostream_test.cpp Sat Oct 17
> 15:43:08 2009
> @@ -127,4 +127,20 @@
> EXPECT_EQ("hello1world", OS.str());
> }
>
> +TEST(raw_ostreamTest, WriteEscaped) {
> + std::string Str;
> +
> + Str = "";
> + raw_string_ostream(Str).write_escaped("hi");
> + EXPECT_EQ("hi", Str);
> +
> + Str = "";
> + raw_string_ostream(Str).write_escaped("\\\t\n\"");
> + EXPECT_EQ("\\\\\\t\\n\\\"", Str);
> +
> + Str = "";
> + raw_string_ostream(Str).write_escaped("\1\10\200");
> + EXPECT_EQ("\\001\\010\\200", Str);
> +}
> +
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list