diff options
| author | Nicholas Nethercote <nnethercote@mozilla.com> | 2018-05-02 11:50:21 +1000 |
|---|---|---|
| committer | Nicholas Nethercote <nnethercote@mozilla.com> | 2018-05-03 10:31:39 +1000 |
| commit | d5d389e4f11b1fad2d42453942f81271bbddee78 (patch) | |
| tree | 72bdd392052191eb5683d5923bdea6b8433f98f3 | |
| parent | f76f6fbdea497c3cb536e33387f405cc74b99b76 (diff) | |
| download | rust-d5d389e4f11b1fad2d42453942f81271bbddee78.tar.gz rust-d5d389e4f11b1fad2d42453942f81271bbddee78.zip | |
Use escape_default() for strings in LitKind::token().
This avoids converting every char to \u{...} form, which bloats the
resulting strings unnecessarily. It also provides consistency with the
existing escape_default() calls in LitKind::token() used for raw
string literals, char literals, and raw byte char literals.
There are two benefits from this change.
- Compilation is faster. Most of the rustc-perf benchmarks see a
non-trivial speedup, particularly for incremental rebuilds, with the
best speedup over 13%, and multiple others over 10%.
- Generated rlibs are smaller. An extreme example is libfutures.rlib,
which shrinks from 2073306 bytes to 1765927 bytes, a 15% reduction.
| -rw-r--r-- | src/libsyntax/attr.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/lib.rs | 1 |
2 files changed, 2 insertions, 4 deletions
diff --git a/src/libsyntax/attr.rs b/src/libsyntax/attr.rs index c68a743303a..05fabbee389 100644 --- a/src/libsyntax/attr.rs +++ b/src/libsyntax/attr.rs @@ -1228,10 +1228,7 @@ impl LitKind { match *self { LitKind::Str(string, ast::StrStyle::Cooked) => { - let mut escaped = String::new(); - for ch in string.as_str().chars() { - escaped.extend(ch.escape_unicode()); - } + let escaped = string.as_str().escape_default(); Token::Literal(token::Lit::Str_(Symbol::intern(&escaped)), None) } LitKind::Str(string, ast::StrStyle::Raw(n)) => { diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs index 870ce1926ad..f148aaf7267 100644 --- a/src/libsyntax/lib.rs +++ b/src/libsyntax/lib.rs @@ -25,6 +25,7 @@ #![feature(non_exhaustive)] #![feature(const_atomic_usize_new)] #![feature(rustc_attrs)] +#![feature(str_escape)] #![recursion_limit="256"] |
