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 917 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
928 // the main thread. | 928 // the main thread. |
929 HistogramTimerScope timer_scope(isolate()->counters()->parse_lazy()); | 929 HistogramTimerScope timer_scope(isolate()->counters()->parse_lazy()); |
930 Handle<String> source(String::cast(script()->source())); | 930 Handle<String> source(String::cast(script()->source())); |
931 isolate()->counters()->total_parse_size()->Increment(source->length()); | 931 isolate()->counters()->total_parse_size()->Increment(source->length()); |
932 base::ElapsedTimer timer; | 932 base::ElapsedTimer timer; |
933 if (FLAG_trace_parse) { | 933 if (FLAG_trace_parse) { |
934 timer.Start(); | 934 timer.Start(); |
935 } | 935 } |
936 Handle<SharedFunctionInfo> shared_info = info()->shared_info(); | 936 Handle<SharedFunctionInfo> shared_info = info()->shared_info(); |
937 | 937 |
| 938 // Lazy parsing is only done during runtime, when we're already using the |
| 939 // heap. So make the AstValueFactory also internalize all values when it |
| 940 // creates them (this is more efficient). |
| 941 ast_value_factory()->Internalize(isolate()); |
| 942 |
938 // Initialize parser state. | 943 // Initialize parser state. |
939 source = String::Flatten(source); | 944 source = String::Flatten(source); |
940 FunctionLiteral* result; | 945 FunctionLiteral* result; |
941 if (source->IsExternalTwoByteString()) { | 946 if (source->IsExternalTwoByteString()) { |
942 ExternalTwoByteStringUtf16CharacterStream stream( | 947 ExternalTwoByteStringUtf16CharacterStream stream( |
943 Handle<ExternalTwoByteString>::cast(source), | 948 Handle<ExternalTwoByteString>::cast(source), |
944 shared_info->start_position(), | 949 shared_info->start_position(), |
945 shared_info->end_position()); | 950 shared_info->end_position()); |
946 result = ParseLazy(&stream); | 951 result = ParseLazy(&stream); |
947 } else { | 952 } else { |
(...skipping 4007 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4955 | 4960 |
4956 // We cannot internalize on a background thread; a foreground task will take | 4961 // We cannot internalize on a background thread; a foreground task will take |
4957 // care of calling Parser::Internalize just before compilation. | 4962 // care of calling Parser::Internalize just before compilation. |
4958 | 4963 |
4959 if (compile_options() == ScriptCompiler::kProduceParserCache) { | 4964 if (compile_options() == ScriptCompiler::kProduceParserCache) { |
4960 if (result != NULL) *info_->cached_data() = recorder.GetScriptData(); | 4965 if (result != NULL) *info_->cached_data() = recorder.GetScriptData(); |
4961 log_ = NULL; | 4966 log_ = NULL; |
4962 } | 4967 } |
4963 } | 4968 } |
4964 } } // namespace v8::internal | 4969 } } // namespace v8::internal |
OLD | NEW |