Index: src/parser.cc |
diff --git a/src/parser.cc b/src/parser.cc |
index a9ca9bca9883c8cb38f44feeb672ed4562359052..b8f89a1f460793102d31e607863e03ca584666f7 100644 |
--- a/src/parser.cc |
+++ b/src/parser.cc |
@@ -202,6 +202,7 @@ int ParseData::FunctionCount() { |
bool ParseData::IsSane() { |
+ if (!IsAligned(script_data_->length(), sizeof(unsigned))) return false; |
// Check that the header data is valid and doesn't specify |
// point to positions outside the store. |
int data_length = Length(); |
@@ -256,7 +257,7 @@ void Parser::SetCachedData() { |
} else { |
DCHECK(info_->cached_data() != NULL); |
if (compile_options() == ScriptCompiler::kConsumeParserCache) { |
- cached_parse_data_ = new ParseData(*info_->cached_data()); |
+ cached_parse_data_ = ParseData::FromCachedData(*info_->cached_data()); |
} |
} |
} |
@@ -844,9 +845,9 @@ FunctionLiteral* Parser::ParseProgram() { |
CompleteParserRecorder recorder; |
debug_saved_compile_options_ = compile_options(); |
- if (compile_options() == ScriptCompiler::kProduceParserCache) { |
+ if (produce_cached_parse_data()) { |
log_ = &recorder; |
- } else if (compile_options() == ScriptCompiler::kConsumeParserCache) { |
+ } else if (consume_cached_parse_data()) { |
cached_parse_data_->Initialize(); |
} |
@@ -887,7 +888,7 @@ FunctionLiteral* Parser::ParseProgram() { |
} |
PrintF(" - took %0.3f ms]\n", ms); |
} |
- if (compile_options() == ScriptCompiler::kProduceParserCache) { |
+ if (produce_cached_parse_data()) { |
if (result != NULL) *info_->cached_data() = recorder.GetScriptData(); |
log_ = NULL; |
} |
@@ -3761,12 +3762,10 @@ void Parser::SkipLazyFunctionBody(const AstRawString* function_name, |
CHECK(materialized_literal_count); |
CHECK(expected_property_count); |
CHECK(debug_saved_compile_options_ == compile_options()); |
- if (compile_options() == ScriptCompiler::kProduceParserCache) { |
- CHECK(log_); |
- } |
+ if (produce_cached_parse_data()) CHECK(log_); |
int function_block_pos = position(); |
- if (compile_options() == ScriptCompiler::kConsumeParserCache) { |
+ if (consume_cached_parse_data()) { |
// If we have cached data, we use it to skip parsing the function body. The |
// data contains the information we need to construct the lazy function. |
FunctionEntry entry = |
@@ -3814,7 +3813,7 @@ void Parser::SkipLazyFunctionBody(const AstRawString* function_name, |
*materialized_literal_count = logger.literals(); |
*expected_property_count = logger.properties(); |
scope_->SetStrictMode(logger.strict_mode()); |
- if (compile_options() == ScriptCompiler::kProduceParserCache) { |
+ if (produce_cached_parse_data()) { |
DCHECK(log_); |
// Position right after terminal '}'. |
int body_end = scanner()->location().end_pos; |
@@ -4990,9 +4989,7 @@ void Parser::ParseOnBackground() { |
CompleteParserRecorder recorder; |
debug_saved_compile_options_ = compile_options(); |
- if (compile_options() == ScriptCompiler::kProduceParserCache) { |
- log_ = &recorder; |
- } |
+ if (produce_cached_parse_data()) log_ = &recorder; |
DCHECK(info()->source_stream() != NULL); |
ExternalStreamingStream stream(info()->source_stream(), |
@@ -5020,7 +5017,7 @@ void Parser::ParseOnBackground() { |
// We cannot internalize on a background thread; a foreground task will take |
// care of calling Parser::Internalize just before compilation. |
- if (compile_options() == ScriptCompiler::kProduceParserCache) { |
+ if (produce_cached_parse_data()) { |
if (result != NULL) *info_->cached_data() = recorder.GetScriptData(); |
log_ = NULL; |
} |