| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/ast.h" | 8 #include "src/ast.h" |
| 9 #include "src/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
| 10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
| (...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 isolate()->counters()->total_parse_size()->Increment(source->length()); | 828 isolate()->counters()->total_parse_size()->Increment(source->length()); |
| 829 base::ElapsedTimer timer; | 829 base::ElapsedTimer timer; |
| 830 if (FLAG_trace_parse) { | 830 if (FLAG_trace_parse) { |
| 831 timer.Start(); | 831 timer.Start(); |
| 832 } | 832 } |
| 833 fni_ = new (zone()) FuncNameInferrer(ast_value_factory(), zone()); | 833 fni_ = new (zone()) FuncNameInferrer(ast_value_factory(), zone()); |
| 834 | 834 |
| 835 // Initialize parser state. | 835 // Initialize parser state. |
| 836 CompleteParserRecorder recorder; | 836 CompleteParserRecorder recorder; |
| 837 | 837 |
| 838 debug_saved_compile_options_ = compile_options(); | |
| 839 if (produce_cached_parse_data()) { | 838 if (produce_cached_parse_data()) { |
| 840 log_ = &recorder; | 839 log_ = &recorder; |
| 841 } else if (consume_cached_parse_data()) { | 840 } else if (consume_cached_parse_data()) { |
| 842 cached_parse_data_->Initialize(); | 841 cached_parse_data_->Initialize(); |
| 843 } | 842 } |
| 844 | 843 |
| 845 source = String::Flatten(source); | 844 source = String::Flatten(source); |
| 846 FunctionLiteral* result; | 845 FunctionLiteral* result; |
| 847 | 846 |
| 848 Scope* top_scope = NULL; | 847 Scope* top_scope = NULL; |
| (...skipping 2972 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3821 | 3820 |
| 3822 if (fni_ != NULL && should_infer_name) fni_->AddFunction(function_literal); | 3821 if (fni_ != NULL && should_infer_name) fni_->AddFunction(function_literal); |
| 3823 return function_literal; | 3822 return function_literal; |
| 3824 } | 3823 } |
| 3825 | 3824 |
| 3826 | 3825 |
| 3827 void Parser::SkipLazyFunctionBody(const AstRawString* function_name, | 3826 void Parser::SkipLazyFunctionBody(const AstRawString* function_name, |
| 3828 int* materialized_literal_count, | 3827 int* materialized_literal_count, |
| 3829 int* expected_property_count, | 3828 int* expected_property_count, |
| 3830 bool* ok) { | 3829 bool* ok) { |
| 3831 // Temporary debugging code for tracking down a mystery crash which should | |
| 3832 // never happen. The crash happens on the line where we log the function in | |
| 3833 // the preparse data: log_->LogFunction(...). TODO(marja): remove this once | |
| 3834 // done. | |
| 3835 CHECK(materialized_literal_count); | |
| 3836 CHECK(expected_property_count); | |
| 3837 CHECK(debug_saved_compile_options_ == compile_options()); | |
| 3838 if (produce_cached_parse_data()) CHECK(log_); | 3830 if (produce_cached_parse_data()) CHECK(log_); |
| 3839 | 3831 |
| 3840 int function_block_pos = position(); | 3832 int function_block_pos = position(); |
| 3841 if (consume_cached_parse_data()) { | 3833 if (consume_cached_parse_data()) { |
| 3842 // If we have cached data, we use it to skip parsing the function body. The | 3834 // If we have cached data, we use it to skip parsing the function body. The |
| 3843 // data contains the information we need to construct the lazy function. | 3835 // data contains the information we need to construct the lazy function. |
| 3844 FunctionEntry entry = | 3836 FunctionEntry entry = |
| 3845 cached_parse_data_->GetFunctionEntry(function_block_pos); | 3837 cached_parse_data_->GetFunctionEntry(function_block_pos); |
| 3846 // Check that cached data is valid. | 3838 // Check that cached data is valid. |
| 3847 CHECK(entry.is_valid()); | 3839 CHECK(entry.is_valid()); |
| (...skipping 1293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5141 return (result != NULL); | 5133 return (result != NULL); |
| 5142 } | 5134 } |
| 5143 | 5135 |
| 5144 | 5136 |
| 5145 void Parser::ParseOnBackground() { | 5137 void Parser::ParseOnBackground() { |
| 5146 DCHECK(info()->function() == NULL); | 5138 DCHECK(info()->function() == NULL); |
| 5147 FunctionLiteral* result = NULL; | 5139 FunctionLiteral* result = NULL; |
| 5148 fni_ = new (zone()) FuncNameInferrer(ast_value_factory(), zone()); | 5140 fni_ = new (zone()) FuncNameInferrer(ast_value_factory(), zone()); |
| 5149 | 5141 |
| 5150 CompleteParserRecorder recorder; | 5142 CompleteParserRecorder recorder; |
| 5151 debug_saved_compile_options_ = compile_options(); | |
| 5152 if (produce_cached_parse_data()) log_ = &recorder; | 5143 if (produce_cached_parse_data()) log_ = &recorder; |
| 5153 | 5144 |
| 5154 DCHECK(info()->source_stream() != NULL); | 5145 DCHECK(info()->source_stream() != NULL); |
| 5155 ExternalStreamingStream stream(info()->source_stream(), | 5146 ExternalStreamingStream stream(info()->source_stream(), |
| 5156 info()->source_stream_encoding()); | 5147 info()->source_stream_encoding()); |
| 5157 scanner_.Initialize(&stream); | 5148 scanner_.Initialize(&stream); |
| 5158 DCHECK(info()->context().is_null() || info()->context()->IsNativeContext()); | 5149 DCHECK(info()->context().is_null() || info()->context()->IsNativeContext()); |
| 5159 | 5150 |
| 5160 // When streaming, we don't know the length of the source until we have parsed | 5151 // When streaming, we don't know the length of the source until we have parsed |
| 5161 // it. The raw data can be UTF-8, so we wouldn't know the source length until | 5152 // it. The raw data can be UTF-8, so we wouldn't know the source length until |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5348 } | 5339 } |
| 5349 | 5340 |
| 5350 // Hash key is used exclusively by template call site caching. There are no | 5341 // Hash key is used exclusively by template call site caching. There are no |
| 5351 // real security implications for unseeded hashes, and no issues with changing | 5342 // real security implications for unseeded hashes, and no issues with changing |
| 5352 // the hashing algorithm to improve performance or entropy. | 5343 // the hashing algorithm to improve performance or entropy. |
| 5353 *hash = running_hash; | 5344 *hash = running_hash; |
| 5354 | 5345 |
| 5355 return raw_strings; | 5346 return raw_strings; |
| 5356 } | 5347 } |
| 5357 } } // namespace v8::internal | 5348 } } // namespace v8::internal |
| OLD | NEW |