| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index a0f3b7147f20eda1457d4f41276c550d70b2b612..e6a57e313952c4ce57b4ff5169cc4b49c24e1ab6 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -36,6 +36,7 @@
|
| #include "messages.h"
|
| #include "parser.h"
|
| #include "platform.h"
|
| +#include "prescanner.h"
|
| #include "preparser.h"
|
| #include "runtime.h"
|
| #include "scopeinfo.h"
|
| @@ -4667,9 +4668,21 @@ ScriptDataImpl* ParserApi::PreParse(Handle<String> source,
|
| unibrow::CharacterStream* stream,
|
| v8::Extension* extension) {
|
| Handle<Script> no_script;
|
| - preparser::PreParser<Scanner, CompleteParserRecorder> parser;
|
| - Scanner scanner;
|
| - scanner.Initialize(source, stream, JAVASCRIPT);
|
| + int length = 0;
|
| + SafeStringInputBuffer safe_stream;
|
| + if (!source.is_null()) {
|
| + length = source->length();
|
| + safe_stream.Reset(source.location());
|
| + stream = &safe_stream;
|
| + } else {
|
| + length = stream->Length();
|
| + }
|
| + typedef preparser::Scanner<CharacterStreamUTF16Buffer, UTF8Buffer> PreScanner;
|
| + preparser::PreParser<PreScanner, CompleteParserRecorder> parser;
|
| + CharacterStreamUTF16Buffer buffer;
|
| + buffer.Initialize(source, stream, 0, length);
|
| + PreScanner scanner;
|
| + scanner.Initialize(&buffer);
|
| bool allow_lazy = FLAG_lazy && (extension == NULL);
|
| CompleteParserRecorder recorder;
|
| if (!parser.PreParseProgram(&scanner, &recorder, allow_lazy)) {
|
|
|