Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(656)

Unified Diff: src/parser.cc

Issue 5188009: Merge preparser Scanner with main JavaScript scanner. (Closed)
Patch Set: Address review. Fix thinko in keyword matcher. Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/prescanner.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parser.cc
diff --git a/src/parser.cc b/src/parser.cc
index c454099ade7f191a896e780bff7b80eba174af37..8b5e8270b359dd583453c8b85e633d6b49330135 100644
--- a/src/parser.cc
+++ b/src/parser.cc
@@ -37,7 +37,6 @@
#include "parser.h"
#include "platform.h"
#include "preparser.h"
-#include "prescanner.h"
#include "runtime.h"
#include "scopeinfo.h"
#include "string-stream.h"
@@ -4637,12 +4636,15 @@ int ScriptDataImpl::ReadNumber(byte** source) {
}
-static ScriptDataImpl* DoPreParse(UTF16Buffer* stream,
+// Create a Scanner for the preparser to use as input, and preparse the source.
+static ScriptDataImpl* DoPreParse(Handle<String> source,
+ unibrow::CharacterStream* stream,
bool allow_lazy,
- PartialParserRecorder* recorder) {
- preparser::Scanner scanner;
- scanner.Initialize(stream);
- preparser::PreParser<preparser::Scanner, PartialParserRecorder> preparser;
+ PartialParserRecorder* recorder,
+ int literal_flags) {
+ V8JavaScriptScanner scanner;
+ scanner.Initialize(source, stream, literal_flags);
+ preparser::PreParser<JavaScriptScanner, PartialParserRecorder> preparser;
if (!preparser.PreParseProgram(&scanner, recorder, allow_lazy)) {
Top::StackOverflow();
return NULL;
@@ -4655,44 +4657,11 @@ static ScriptDataImpl* DoPreParse(UTF16Buffer* stream,
}
-// Create an UTF16Buffer for the preparser to use as input,
-// and preparse the source.
-static ScriptDataImpl* DoPreParse(Handle<String> source,
- unibrow::CharacterStream* stream,
- bool allow_lazy,
- PartialParserRecorder* recorder) {
- if (source.is_null()) {
- CharacterStreamUTF16Buffer buffer;
- int length = stream->Length();
- buffer.Initialize(source, stream, 0, length);
- return DoPreParse(&buffer, allow_lazy, recorder);
- } else if (source->IsExternalAsciiString()) {
- ExternalStringUTF16Buffer<ExternalAsciiString, char> buffer;
- int length = source->length();
- buffer.Initialize(Handle<ExternalAsciiString>::cast(source), 0, length);
- return DoPreParse(&buffer, allow_lazy, recorder);
- } else if (source->IsExternalTwoByteString()) {
- ExternalStringUTF16Buffer<ExternalTwoByteString, uint16_t> buffer;
- int length = source->length();
- buffer.Initialize(Handle<ExternalTwoByteString>::cast(source), 0, length);
- return DoPreParse(&buffer, allow_lazy, recorder);
- } else {
- CharacterStreamUTF16Buffer buffer;
- SafeStringInputBuffer input;
- input.Reset(0, source.location());
- int length = source->length();
- buffer.Initialize(source, &input, 0, length);
- return DoPreParse(&buffer, allow_lazy, recorder);
- }
-}
-
-
// Preparse, but only collect data that is immediately useful,
// even if the preparser data is only used once.
ScriptDataImpl* ParserApi::PartialPreParse(Handle<String> source,
unibrow::CharacterStream* stream,
v8::Extension* extension) {
- Handle<Script> no_script;
bool allow_lazy = FLAG_lazy && (extension == NULL);
if (!allow_lazy) {
// Partial preparsing is only about lazily compiled functions.
@@ -4701,7 +4670,8 @@ ScriptDataImpl* ParserApi::PartialPreParse(Handle<String> source,
}
PartialParserRecorder recorder;
- return DoPreParse(source, stream, allow_lazy, &recorder);
+ return DoPreParse(source, stream, allow_lazy, &recorder,
+ JavaScriptScanner::kNoLiterals);
}
@@ -4711,7 +4681,10 @@ ScriptDataImpl* ParserApi::PreParse(Handle<String> source,
Handle<Script> no_script;
bool allow_lazy = FLAG_lazy && (extension == NULL);
CompleteParserRecorder recorder;
- return DoPreParse(source, stream, allow_lazy, &recorder);
+ int kPreParseLiteralsFlags =
+ JavaScriptScanner::kLiteralString | JavaScriptScanner::kLiteralIdentifier;
+ return DoPreParse(source, stream, allow_lazy,
+ &recorder, kPreParseLiteralsFlags);
}
« no previous file with comments | « no previous file | src/prescanner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698