Chromium Code Reviews| Index: src/parser.cc |
| diff --git a/src/parser.cc b/src/parser.cc |
| index e6c0e2645e4decdf522c9118af01ddf56b6d240c..653cc783bf5680026751029b506289add0e9ff05 100644 |
| --- a/src/parser.cc |
| +++ b/src/parser.cc |
| @@ -5336,9 +5336,23 @@ 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)); |
| - Literal* raw_lit = factory()->NewStringLiteral(raw_str, span_start - 1); |
| + Access<UnicodeCache::Utf8Decoder> |
| + decoder(isolate()->unicode_cache()->utf8_decoder()); |
| + decoder->Reset(raw_chars.get(), to_index); |
|
marja
2014/12/01 15:53:59
Since we're now doing parsing on a background thre
Dmitry Lomov (no reviews)
2014/12/01 16:09:48
Oops, sorry, forgot about that! Good catch!
|
| + int utf16_length = decoder->Utf16Length(); |
| + Literal* raw_lit = NULL; |
| + if (utf16_length > 0) { |
| + uc16* utf16_buffer = zone()->NewArray<uc16>(utf16_length); |
| + to_index = decoder->WriteUtf16(utf16_buffer, utf16_length); |
| + const uint16_t* data = reinterpret_cast<const uint16_t*>(utf16_buffer); |
| + const AstRawString* raw_str = ast_value_factory()->GetTwoByteString( |
| + Vector<const uint16_t>(data, to_index)); |
| + raw_lit = factory()->NewStringLiteral(raw_str, span_start - 1); |
| + } else { |
| + raw_lit = factory()->NewStringLiteral( |
| + ast_value_factory()->empty_string(), span_start - 1); |
| + } |
| + DCHECK_NOT_NULL(raw_lit); |
| raw_strings->Add(raw_lit, zone()); |
| } |