| Index: src/parsing/parser.cc
|
| diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
|
| index 039d924b9737dc8cbde230cdcfe90ba60e22c1b4..db4b1607bbd0fd0479df62017d26753cdf68e693 100644
|
| --- a/src/parsing/parser.cc
|
| +++ b/src/parsing/parser.cc
|
| @@ -1051,17 +1051,21 @@ FunctionLiteral* Parser::ParseLazy(Isolate* isolate, ParseInfo* info) {
|
| // Initialize parser state.
|
| source = String::Flatten(source);
|
| FunctionLiteral* result;
|
| - if (source->IsExternalTwoByteString()) {
|
| - ExternalTwoByteStringUtf16CharacterStream stream(
|
| - Handle<ExternalTwoByteString>::cast(source),
|
| - shared_info->start_position(),
|
| - shared_info->end_position());
|
| - result = ParseLazy(isolate, info, &stream);
|
| - } else {
|
| - GenericStringUtf16CharacterStream stream(source,
|
| - shared_info->start_position(),
|
| - shared_info->end_position());
|
| - result = ParseLazy(isolate, info, &stream);
|
| + {
|
| + std::unique_ptr<Utf16CharacterStream> stream;
|
| + if (source->IsExternalTwoByteString()) {
|
| + stream.reset(new ExternalTwoByteStringUtf16CharacterStream(
|
| + Handle<ExternalTwoByteString>::cast(source),
|
| + shared_info->start_position(), shared_info->end_position()));
|
| + } else if (source->IsExternalOneByteString()) {
|
| + stream.reset(new ExternalOneByteStringUtf16CharacterStream(
|
| + Handle<ExternalOneByteString>::cast(source),
|
| + shared_info->start_position(), shared_info->end_position()));
|
| + } else {
|
| + stream.reset(new GenericStringUtf16CharacterStream(
|
| + source, shared_info->start_position(), shared_info->end_position()));
|
| + }
|
| + result = ParseLazy(isolate, info, stream.get());
|
| }
|
|
|
| if (FLAG_trace_parse && result != NULL) {
|
|
|