Chromium Code Reviews| Index: pkg/front_end/lib/src/fasta/scanner/token.dart |
| diff --git a/pkg/front_end/lib/src/fasta/scanner/token.dart b/pkg/front_end/lib/src/fasta/scanner/token.dart |
| index 8a7222867abbf5ff0cb2a473df3b25359ee359d0..0c3976e8ae682c04b3943f0768cc7e41dde46c9f 100644 |
| --- a/pkg/front_end/lib/src/fasta/scanner/token.dart |
| +++ b/pkg/front_end/lib/src/fasta/scanner/token.dart |
| @@ -21,6 +21,8 @@ import 'precedence.dart' show |
| import 'token_constants.dart' show |
| IDENTIFIER_TOKEN; |
| +import 'canonicalizer.dart'; |
| + |
| /** |
| * A token that doubles as a linked list. |
| */ |
| @@ -195,7 +197,8 @@ class StringToken extends Token { |
| */ |
| StringToken.fromString(this.info, String value, int charOffset, |
| {bool canonicalize: false}) |
| - : valueOrLazySubstring = canonicalizedString(value, canonicalize), |
| + : valueOrLazySubstring = canonicalizedString(value, |
| + 0, value.length, canonicalize), |
| super(charOffset); |
| /** |
| @@ -209,7 +212,7 @@ class StringToken extends Token { |
| int length = end - start; |
| if (length <= LAZY_THRESHOLD) { |
| valueOrLazySubstring = |
| - canonicalizedString(data.substring(start, end), canonicalize); |
| + canonicalizedString(data, start, end, canonicalize); |
| } else { |
| valueOrLazySubstring = |
| new LazySubstring(data, start, length, canonicalize); |
| @@ -241,7 +244,7 @@ class StringToken extends Token { |
| int end = start + valueOrLazySubstring.length; |
| if (data is String) { |
| valueOrLazySubstring = canonicalizedString( |
| - data.substring(start, end), valueOrLazySubstring.boolValue); |
| + data, start, end, valueOrLazySubstring.boolValue); |
| } else { |
| valueOrLazySubstring = |
| decodeUtf8(data, start, end, valueOrLazySubstring.boolValue); |
| @@ -257,24 +260,15 @@ class StringToken extends Token { |
| String toString() => "StringToken($value)"; |
| - static final HashSet<String> canonicalizedSubstrings = new HashSet<String>(); |
| + static final HashCanonicalizer canonicalizer = new HashCanonicalizer(); |
| - static String canonicalizedString(String s, bool canonicalize) { |
| + static String canonicalizedString(String s, int start, int end, bool canonicalize) { |
|
ahe
2017/02/14 13:52:46
Long line.
|
| if (!canonicalize) return s; |
| - var result = canonicalizedSubstrings.lookup(s); |
| - if (result != null) return result; |
| - canonicalizedSubstrings.add(s); |
| - return s; |
| + return canonicalizer.canonicalize(s, start, end, false); |
| } |
| static String decodeUtf8(List<int> data, int start, int end, bool asciiOnly) { |
| - var s; |
| - if (asciiOnly) { |
| - s = new String.fromCharCodes(data, start, end); |
| - } else { |
| - s = UTF8.decoder.convert(data, start, end); |
| - } |
| - return canonicalizedString(s, true); |
| + return canonicalizer.canonicalize(data, start, end, asciiOnly); |
| } |
| } |