| Index: tools/gn/value.cc
|
| diff --git a/tools/gn/value.cc b/tools/gn/value.cc
|
| index 1fb7155dc1b609d410f884d5f3163b7b016ca760..3632ddf4a80c5b1cfaab255c00b2467ca92d2cd5 100644
|
| --- a/tools/gn/value.cc
|
| +++ b/tools/gn/value.cc
|
| @@ -5,6 +5,7 @@
|
| #include "tools/gn/value.h"
|
|
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/string_util.h"
|
| #include "tools/gn/scope.h"
|
|
|
| Value::Value()
|
| @@ -130,8 +131,17 @@ std::string Value::ToString(bool quote_string) const {
|
| case INTEGER:
|
| return base::Int64ToString(int_value_);
|
| case STRING:
|
| - if (quote_string)
|
| - return "\"" + string_value_ + "\"";
|
| + if (quote_string) {
|
| + std::string escaped = string_value_;
|
| + // First escape all special uses of a backslash.
|
| + ReplaceSubstringsAfterOffset(&escaped, 0, "\\$", "\\\\$");
|
| + ReplaceSubstringsAfterOffset(&escaped, 0, "\\\"", "\\\\\"");
|
| +
|
| + // Now escape special chars.
|
| + ReplaceSubstringsAfterOffset(&escaped, 0, "$", "\\$");
|
| + ReplaceSubstringsAfterOffset(&escaped, 0, "\"", "\\\"");
|
| + return "\"" + escaped + "\"";
|
| + }
|
| return string_value_;
|
| case LIST: {
|
| std::string result = "[";
|
|
|