Index: src/parser.cc |
diff --git a/src/parser.cc b/src/parser.cc |
index e6c0e2645e4decdf522c9118af01ddf56b6d240c..efc7df7b48885309c48993853f83c96cc25ee601 100644 |
--- a/src/parser.cc |
+++ b/src/parser.cc |
@@ -5336,8 +5336,13 @@ ZoneList<Expression*>* Parser::TemplateRawStrings(const TemplateLiteral* lit, |
raw_chars[to_index++] = ch; |
} |
- const AstRawString* raw_str = ast_value_factory()->GetOneByteString( |
- OneByteVector(raw_chars.get(), to_index)); |
+ unibrow::Utf8Decoder<256> decoder(raw_chars.get(), to_index); |
Dmitry Lomov (no reviews)
2014/11/25 13:16:21
Use cached decoder from isoalte()->unicode_cache()
caitp (gmail)
2014/11/26 14:12:01
Should this be cached outside of the loop? But, do
|
+ int utf16_length = decoder.Utf16Length(); |
+ uc16* utf16_buffer = zone()->NewArray<uc16>(utf16_length); |
+ to_index = decoder.WriteUtf16(utf16_buffer, utf16_length); |
+ const AstRawString* raw_str = ast_value_factory()->GetTwoByteString( |
+ Vector<const uint16_t>(reinterpret_cast<const uint16_t*>(utf16_buffer), |
+ to_index)); |
Literal* raw_lit = factory()->NewStringLiteral(raw_str, span_start - 1); |
raw_strings->Add(raw_lit, zone()); |
} |