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/compiler.h" | 7 #include "src/compiler.h" |
8 | 8 |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 if (!IsAligned(reinterpret_cast<intptr_t>(data), kPointerAlignment)) { | 37 if (!IsAligned(reinterpret_cast<intptr_t>(data), kPointerAlignment)) { |
38 byte* copy = NewArray<byte>(length); | 38 byte* copy = NewArray<byte>(length); |
39 DCHECK(IsAligned(reinterpret_cast<intptr_t>(copy), kPointerAlignment)); | 39 DCHECK(IsAligned(reinterpret_cast<intptr_t>(copy), kPointerAlignment)); |
40 CopyBytes(copy, data, length); | 40 CopyBytes(copy, data, length); |
41 data_ = copy; | 41 data_ = copy; |
42 AcquireDataOwnership(); | 42 AcquireDataOwnership(); |
43 } | 43 } |
44 } | 44 } |
45 | 45 |
46 | 46 |
47 CompilationInfo::CompilationInfo(Handle<Script> script, | 47 CompilationInfo::CompilationInfo(Handle<Script> script, Zone* zone) |
48 Zone* zone) | |
49 : flags_(StrictModeField::encode(SLOPPY)), | 48 : flags_(StrictModeField::encode(SLOPPY)), |
50 script_(script), | 49 script_(script), |
| 50 source_stream_(NULL), |
51 osr_ast_id_(BailoutId::None()), | 51 osr_ast_id_(BailoutId::None()), |
52 parameter_count_(0), | 52 parameter_count_(0), |
53 this_has_uses_(true), | 53 this_has_uses_(true), |
54 optimization_id_(-1), | 54 optimization_id_(-1), |
55 ast_value_factory_(NULL), | 55 ast_value_factory_(NULL), |
56 ast_value_factory_owned_(false) { | 56 ast_value_factory_owned_(false) { |
57 Initialize(script->GetIsolate(), BASE, zone); | 57 Initialize(script->GetIsolate(), BASE, zone); |
58 } | 58 } |
59 | 59 |
60 | 60 |
61 CompilationInfo::CompilationInfo(Isolate* isolate, Zone* zone) | 61 CompilationInfo::CompilationInfo(Isolate* isolate, Zone* zone) |
62 : flags_(StrictModeField::encode(SLOPPY)), | 62 : flags_(StrictModeField::encode(SLOPPY)), |
63 script_(Handle<Script>::null()), | 63 script_(Handle<Script>::null()), |
64 osr_ast_id_(BailoutId::None()), | 64 osr_ast_id_(BailoutId::None()), |
65 parameter_count_(0), | 65 parameter_count_(0), |
66 this_has_uses_(true), | 66 this_has_uses_(true), |
67 optimization_id_(-1), | 67 optimization_id_(-1), |
68 ast_value_factory_(NULL), | 68 ast_value_factory_(NULL), |
69 ast_value_factory_owned_(false) { | 69 ast_value_factory_owned_(false) { |
70 Initialize(isolate, STUB, zone); | 70 Initialize(isolate, STUB, zone); |
71 } | 71 } |
72 | 72 |
73 | 73 |
74 CompilationInfo::CompilationInfo(Handle<SharedFunctionInfo> shared_info, | 74 CompilationInfo::CompilationInfo(Handle<SharedFunctionInfo> shared_info, |
75 Zone* zone) | 75 Zone* zone) |
76 : flags_(StrictModeField::encode(SLOPPY) | IsLazy::encode(true)), | 76 : flags_(StrictModeField::encode(SLOPPY) | IsLazy::encode(true)), |
77 shared_info_(shared_info), | 77 shared_info_(shared_info), |
78 script_(Handle<Script>(Script::cast(shared_info->script()))), | 78 script_(Handle<Script>(Script::cast(shared_info->script()))), |
| 79 source_stream_(NULL), |
79 osr_ast_id_(BailoutId::None()), | 80 osr_ast_id_(BailoutId::None()), |
80 parameter_count_(0), | 81 parameter_count_(0), |
81 this_has_uses_(true), | 82 this_has_uses_(true), |
82 optimization_id_(-1), | 83 optimization_id_(-1), |
83 ast_value_factory_(NULL), | 84 ast_value_factory_(NULL), |
84 ast_value_factory_owned_(false) { | 85 ast_value_factory_owned_(false) { |
85 Initialize(script_->GetIsolate(), BASE, zone); | 86 Initialize(script_->GetIsolate(), BASE, zone); |
86 } | 87 } |
87 | 88 |
88 | 89 |
89 CompilationInfo::CompilationInfo(Handle<JSFunction> closure, | 90 CompilationInfo::CompilationInfo(Handle<JSFunction> closure, Zone* zone) |
90 Zone* zone) | |
91 : flags_(StrictModeField::encode(SLOPPY) | IsLazy::encode(true)), | 91 : flags_(StrictModeField::encode(SLOPPY) | IsLazy::encode(true)), |
92 closure_(closure), | 92 closure_(closure), |
93 shared_info_(Handle<SharedFunctionInfo>(closure->shared())), | 93 shared_info_(Handle<SharedFunctionInfo>(closure->shared())), |
94 script_(Handle<Script>(Script::cast(shared_info_->script()))), | 94 script_(Handle<Script>(Script::cast(shared_info_->script()))), |
| 95 source_stream_(NULL), |
95 context_(closure->context()), | 96 context_(closure->context()), |
96 osr_ast_id_(BailoutId::None()), | 97 osr_ast_id_(BailoutId::None()), |
97 parameter_count_(0), | 98 parameter_count_(0), |
98 this_has_uses_(true), | 99 this_has_uses_(true), |
99 optimization_id_(-1), | 100 optimization_id_(-1), |
100 ast_value_factory_(NULL), | 101 ast_value_factory_(NULL), |
101 ast_value_factory_owned_(false) { | 102 ast_value_factory_owned_(false) { |
102 Initialize(script_->GetIsolate(), BASE, zone); | 103 Initialize(script_->GetIsolate(), BASE, zone); |
103 } | 104 } |
104 | 105 |
105 | 106 |
106 CompilationInfo::CompilationInfo(HydrogenCodeStub* stub, | 107 CompilationInfo::CompilationInfo(HydrogenCodeStub* stub, Isolate* isolate, |
107 Isolate* isolate, | |
108 Zone* zone) | 108 Zone* zone) |
109 : flags_(StrictModeField::encode(SLOPPY) | IsLazy::encode(true)), | 109 : flags_(StrictModeField::encode(SLOPPY) | IsLazy::encode(true)), |
| 110 source_stream_(NULL), |
110 osr_ast_id_(BailoutId::None()), | 111 osr_ast_id_(BailoutId::None()), |
111 parameter_count_(0), | 112 parameter_count_(0), |
112 this_has_uses_(true), | 113 this_has_uses_(true), |
113 optimization_id_(-1), | 114 optimization_id_(-1), |
114 ast_value_factory_(NULL), | 115 ast_value_factory_(NULL), |
115 ast_value_factory_owned_(false) { | 116 ast_value_factory_owned_(false) { |
116 Initialize(isolate, STUB, zone); | 117 Initialize(isolate, STUB, zone); |
117 code_stub_ = stub; | 118 code_stub_ = stub; |
118 } | 119 } |
119 | 120 |
120 | 121 |
| 122 CompilationInfo::CompilationInfo(ExternalSourceStream* stream, Isolate* isolate, |
| 123 Zone* zone) |
| 124 : flags_(StrictModeField::encode(SLOPPY)), |
| 125 source_stream_(stream), |
| 126 osr_ast_id_(BailoutId::None()), |
| 127 parameter_count_(0), |
| 128 this_has_uses_(true), |
| 129 optimization_id_(-1), |
| 130 ast_value_factory_(NULL), |
| 131 ast_value_factory_owned_(false) { |
| 132 Initialize(isolate, BASE, zone); |
| 133 } |
| 134 |
| 135 |
121 void CompilationInfo::Initialize(Isolate* isolate, | 136 void CompilationInfo::Initialize(Isolate* isolate, |
122 Mode mode, | 137 Mode mode, |
123 Zone* zone) { | 138 Zone* zone) { |
124 isolate_ = isolate; | 139 isolate_ = isolate; |
125 function_ = NULL; | 140 function_ = NULL; |
126 scope_ = NULL; | 141 scope_ = NULL; |
127 global_scope_ = NULL; | 142 global_scope_ = NULL; |
128 extension_ = NULL; | 143 extension_ = NULL; |
129 cached_data_ = NULL; | 144 cached_data_ = NULL; |
130 compile_options_ = ScriptCompiler::kNoCompileOptions; | 145 compile_options_ = ScriptCompiler::kNoCompileOptions; |
131 zone_ = zone; | 146 zone_ = zone; |
132 deferred_handles_ = NULL; | 147 deferred_handles_ = NULL; |
133 code_stub_ = NULL; | 148 code_stub_ = NULL; |
134 prologue_offset_ = Code::kPrologueOffsetNotSet; | 149 prologue_offset_ = Code::kPrologueOffsetNotSet; |
135 opt_count_ = shared_info().is_null() ? 0 : shared_info()->opt_count(); | 150 opt_count_ = shared_info().is_null() ? 0 : shared_info()->opt_count(); |
136 no_frame_ranges_ = isolate->cpu_profiler()->is_profiling() | 151 no_frame_ranges_ = isolate->cpu_profiler()->is_profiling() |
137 ? new List<OffsetRange>(2) : NULL; | 152 ? new List<OffsetRange>(2) : NULL; |
138 for (int i = 0; i < DependentCode::kGroupCount; i++) { | 153 for (int i = 0; i < DependentCode::kGroupCount; i++) { |
139 dependencies_[i] = NULL; | 154 dependencies_[i] = NULL; |
140 } | 155 } |
141 if (mode == STUB) { | 156 if (mode == STUB) { |
142 mode_ = STUB; | 157 mode_ = STUB; |
143 return; | 158 return; |
144 } | 159 } |
145 mode_ = mode; | 160 mode_ = mode; |
146 abort_due_to_dependency_ = false; | 161 abort_due_to_dependency_ = false; |
147 if (script_->type()->value() == Script::TYPE_NATIVE) MarkAsNative(); | 162 if (!script_.is_null() && script_->type()->value() == Script::TYPE_NATIVE) { |
| 163 MarkAsNative(); |
| 164 } |
148 if (isolate_->debug()->is_active()) MarkAsDebug(); | 165 if (isolate_->debug()->is_active()) MarkAsDebug(); |
149 | 166 |
150 if (!shared_info_.is_null()) { | 167 if (!shared_info_.is_null()) { |
151 DCHECK(strict_mode() == SLOPPY); | 168 DCHECK(strict_mode() == SLOPPY); |
152 SetStrictMode(shared_info_->strict_mode()); | 169 SetStrictMode(shared_info_->strict_mode()); |
153 } | 170 } |
154 set_bailout_reason(kUnknown); | 171 set_bailout_reason(kUnknown); |
155 | 172 |
156 if (!shared_info().is_null() && shared_info()->is_compiled()) { | 173 if (!shared_info().is_null() && shared_info()->is_compiled()) { |
157 // We should initialize the CompilationInfo feedback vector from the | 174 // We should initialize the CompilationInfo feedback vector from the |
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
806 if (!CompileUnoptimizedCode(&info)) return; | 823 if (!CompileUnoptimizedCode(&info)) return; |
807 if (!info.shared_info().is_null()) { | 824 if (!info.shared_info().is_null()) { |
808 Handle<ScopeInfo> scope_info = ScopeInfo::Create(info.scope(), | 825 Handle<ScopeInfo> scope_info = ScopeInfo::Create(info.scope(), |
809 info.zone()); | 826 info.zone()); |
810 info.shared_info()->set_scope_info(*scope_info); | 827 info.shared_info()->set_scope_info(*scope_info); |
811 } | 828 } |
812 tracker.RecordRootFunctionInfo(info.code()); | 829 tracker.RecordRootFunctionInfo(info.code()); |
813 } | 830 } |
814 | 831 |
815 | 832 |
816 static bool DebuggerWantsEagerCompilation(CompilationInfo* info, | |
817 bool allow_lazy_without_ctx = false) { | |
818 return LiveEditFunctionTracker::IsActive(info->isolate()) || | |
819 (info->isolate()->DebuggerHasBreakPoints() && !allow_lazy_without_ctx); | |
820 } | |
821 | |
822 | |
823 static Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) { | 833 static Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) { |
824 Isolate* isolate = info->isolate(); | 834 Isolate* isolate = info->isolate(); |
825 PostponeInterruptsScope postpone(isolate); | 835 PostponeInterruptsScope postpone(isolate); |
826 DCHECK(!isolate->native_context().is_null()); | 836 DCHECK(!isolate->native_context().is_null()); |
827 Handle<Script> script = info->script(); | 837 Handle<Script> script = info->script(); |
828 | 838 |
829 // TODO(svenpanne) Obscure place for this, perhaps move to OnBeforeCompile? | 839 // TODO(svenpanne) Obscure place for this, perhaps move to OnBeforeCompile? |
830 FixedArray* array = isolate->native_context()->embedder_data(); | 840 FixedArray* array = isolate->native_context()->embedder_data(); |
831 script->set_context_data(array->get(0)); | 841 script->set_context_data(array->get(0)); |
832 | 842 |
833 isolate->debug()->OnBeforeCompile(script); | 843 isolate->debug()->OnBeforeCompile(script); |
834 | 844 |
835 DCHECK(info->is_eval() || info->is_global()); | 845 DCHECK(info->is_eval() || info->is_global()); |
836 | 846 |
837 bool parse_allow_lazy = | |
838 (info->compile_options() == ScriptCompiler::kConsumeParserCache || | |
839 String::cast(script->source())->length() > FLAG_min_preparse_length) && | |
840 !DebuggerWantsEagerCompilation(info); | |
841 | |
842 if (!parse_allow_lazy && | |
843 (info->compile_options() == ScriptCompiler::kProduceParserCache || | |
844 info->compile_options() == ScriptCompiler::kConsumeParserCache)) { | |
845 // We are going to parse eagerly, but we either 1) have cached data produced | |
846 // by lazy parsing or 2) are asked to generate cached data. We cannot use | |
847 // the existing data, since it won't contain all the symbols we need for | |
848 // eager parsing. In addition, it doesn't make sense to produce the data | |
849 // when parsing eagerly. That data would contain all symbols, but no | |
850 // functions, so it cannot be used to aid lazy parsing later. | |
851 info->SetCachedData(NULL, ScriptCompiler::kNoCompileOptions); | |
852 } | |
853 | |
854 Handle<SharedFunctionInfo> result; | 847 Handle<SharedFunctionInfo> result; |
855 | 848 |
856 { VMState<COMPILER> state(info->isolate()); | 849 { VMState<COMPILER> state(info->isolate()); |
857 if (!Parser::Parse(info, parse_allow_lazy)) { | 850 if (info->function() == NULL) { |
858 return Handle<SharedFunctionInfo>::null(); | 851 // Parse the script if needed (if it's already parsed, function() returns |
| 852 // non-NULL. |
| 853 bool parse_allow_lazy = |
| 854 (info->compile_options() == ScriptCompiler::kConsumeParserCache || |
| 855 String::cast(script->source())->length() > |
| 856 FLAG_min_preparse_length) && |
| 857 !Compiler::DebuggerWantsEagerCompilation(info); |
| 858 |
| 859 if (!parse_allow_lazy && |
| 860 (info->compile_options() == ScriptCompiler::kProduceParserCache || |
| 861 info->compile_options() == ScriptCompiler::kConsumeParserCache)) { |
| 862 // We are going to parse eagerly, but we either 1) have cached data |
| 863 // produced |
| 864 // by lazy parsing or 2) are asked to generate cached data. We cannot |
| 865 // use |
| 866 // the existing data, since it won't contain all the symbols we need for |
| 867 // eager parsing. In addition, it doesn't make sense to produce the data |
| 868 // when parsing eagerly. That data would contain all symbols, but no |
| 869 // functions, so it cannot be used to aid lazy parsing later. |
| 870 info->SetCachedData(NULL, ScriptCompiler::kNoCompileOptions); |
| 871 } |
| 872 if (!Parser::Parse(info, parse_allow_lazy)) { |
| 873 return Handle<SharedFunctionInfo>::null(); |
| 874 } |
859 } | 875 } |
860 | 876 |
861 FunctionLiteral* lit = info->function(); | 877 FunctionLiteral* lit = info->function(); |
862 LiveEditFunctionTracker live_edit_tracker(isolate, lit); | 878 LiveEditFunctionTracker live_edit_tracker(isolate, lit); |
863 | 879 |
864 // Measure how long it takes to do the compilation; only take the | 880 // Measure how long it takes to do the compilation; only take the |
865 // rest of the function into account to avoid overlap with the | 881 // rest of the function into account to avoid overlap with the |
866 // parsing statistics. | 882 // parsing statistics. |
867 HistogramTimer* rate = info->is_eval() | 883 HistogramTimer* rate = info->is_eval() |
868 ? info->isolate()->counters()->compile_eval() | 884 ? info->isolate()->counters()->compile_eval() |
(...skipping 26 matching lines...) Expand all Loading... |
895 PROFILE(isolate, CodeCreateEvent( | 911 PROFILE(isolate, CodeCreateEvent( |
896 log_tag, *info->code(), *result, info, *script_name)); | 912 log_tag, *info->code(), *result, info, *script_name)); |
897 GDBJIT(AddCode(script_name, script, info->code(), info)); | 913 GDBJIT(AddCode(script_name, script, info->code(), info)); |
898 | 914 |
899 // Hint to the runtime system used when allocating space for initial | 915 // Hint to the runtime system used when allocating space for initial |
900 // property space by setting the expected number of properties for | 916 // property space by setting the expected number of properties for |
901 // the instances of the function. | 917 // the instances of the function. |
902 SetExpectedNofPropertiesFromEstimate(result, | 918 SetExpectedNofPropertiesFromEstimate(result, |
903 lit->expected_property_count()); | 919 lit->expected_property_count()); |
904 | 920 |
905 script->set_compilation_state(Script::COMPILATION_STATE_COMPILED); | 921 if (!script.is_null()) |
| 922 script->set_compilation_state(Script::COMPILATION_STATE_COMPILED); |
906 | 923 |
907 live_edit_tracker.RecordFunctionInfo(result, lit, info->zone()); | 924 live_edit_tracker.RecordFunctionInfo(result, lit, info->zone()); |
908 } | 925 } |
909 | 926 |
910 isolate->debug()->OnAfterCompile(script); | 927 isolate->debug()->OnAfterCompile(script); |
911 | 928 |
912 return result; | 929 return result; |
913 } | 930 } |
914 | 931 |
915 | 932 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1052 } | 1069 } |
1053 | 1070 |
1054 if (result.is_null()) isolate->ReportPendingMessages(); | 1071 if (result.is_null()) isolate->ReportPendingMessages(); |
1055 } else if (result->ic_age() != isolate->heap()->global_ic_age()) { | 1072 } else if (result->ic_age() != isolate->heap()->global_ic_age()) { |
1056 result->ResetForNewContext(isolate->heap()->global_ic_age()); | 1073 result->ResetForNewContext(isolate->heap()->global_ic_age()); |
1057 } | 1074 } |
1058 return result; | 1075 return result; |
1059 } | 1076 } |
1060 | 1077 |
1061 | 1078 |
| 1079 Handle<SharedFunctionInfo> Compiler::CompileStreamedScript( |
| 1080 CompilationInfo* info, int source_length) { |
| 1081 Isolate* isolate = info->isolate(); |
| 1082 isolate->counters()->total_load_size()->Increment(source_length); |
| 1083 isolate->counters()->total_compile_size()->Increment(source_length); |
| 1084 |
| 1085 // TODO(marja): FLAG_use_strict is not honoured and won't be; when the real |
| 1086 // code caching lands, streaming needs to be adapted to use it. |
| 1087 |
| 1088 if (FLAG_use_strict) info->SetStrictMode(STRICT); |
| 1089 |
| 1090 Handle<SharedFunctionInfo> result = CompileToplevel(info); |
| 1091 |
| 1092 if (result.is_null()) isolate->ReportPendingMessages(); |
| 1093 return result; |
| 1094 } |
| 1095 |
| 1096 |
1062 Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo( | 1097 Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo( |
1063 FunctionLiteral* literal, Handle<Script> script, | 1098 FunctionLiteral* literal, Handle<Script> script, |
1064 CompilationInfo* outer_info) { | 1099 CompilationInfo* outer_info) { |
1065 // Precondition: code has been parsed and scopes have been analyzed. | 1100 // Precondition: code has been parsed and scopes have been analyzed. |
1066 CompilationInfoWithZone info(script); | 1101 CompilationInfoWithZone info(script); |
1067 info.SetFunction(literal); | 1102 info.SetFunction(literal); |
1068 info.PrepareForCompilation(literal->scope()); | 1103 info.PrepareForCompilation(literal->scope()); |
1069 info.SetStrictMode(literal->scope()->strict_mode()); | 1104 info.SetStrictMode(literal->scope()->strict_mode()); |
1070 if (outer_info->will_serialize()) info.PrepareForSerializing(); | 1105 if (outer_info->will_serialize()) info.PrepareForSerializing(); |
1071 | 1106 |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1351 log_tag, *code, *shared, info, script_name, line_num, column_num)); | 1386 log_tag, *code, *shared, info, script_name, line_num, column_num)); |
1352 } | 1387 } |
1353 | 1388 |
1354 GDBJIT(AddCode(Handle<String>(shared->DebugName()), | 1389 GDBJIT(AddCode(Handle<String>(shared->DebugName()), |
1355 Handle<Script>(info->script()), | 1390 Handle<Script>(info->script()), |
1356 Handle<Code>(info->code()), | 1391 Handle<Code>(info->code()), |
1357 info)); | 1392 info)); |
1358 } | 1393 } |
1359 | 1394 |
1360 | 1395 |
| 1396 bool Compiler::DebuggerWantsEagerCompilation(CompilationInfo* info, |
| 1397 bool allow_lazy_without_ctx) { |
| 1398 return LiveEditFunctionTracker::IsActive(info->isolate()) || |
| 1399 (info->isolate()->DebuggerHasBreakPoints() && !allow_lazy_without_ctx); |
| 1400 } |
| 1401 |
| 1402 |
1361 CompilationPhase::CompilationPhase(const char* name, CompilationInfo* info) | 1403 CompilationPhase::CompilationPhase(const char* name, CompilationInfo* info) |
1362 : name_(name), info_(info), zone_(info->isolate()) { | 1404 : name_(name), info_(info), zone_(info->isolate()) { |
1363 if (FLAG_hydrogen_stats) { | 1405 if (FLAG_hydrogen_stats) { |
1364 info_zone_start_allocation_size_ = info->zone()->allocation_size(); | 1406 info_zone_start_allocation_size_ = info->zone()->allocation_size(); |
1365 timer_.Start(); | 1407 timer_.Start(); |
1366 } | 1408 } |
1367 } | 1409 } |
1368 | 1410 |
1369 | 1411 |
1370 CompilationPhase::~CompilationPhase() { | 1412 CompilationPhase::~CompilationPhase() { |
(...skipping 11 matching lines...) Expand all Loading... |
1382 AllowHandleDereference allow_deref; | 1424 AllowHandleDereference allow_deref; |
1383 bool tracing_on = info()->IsStub() | 1425 bool tracing_on = info()->IsStub() |
1384 ? FLAG_trace_hydrogen_stubs | 1426 ? FLAG_trace_hydrogen_stubs |
1385 : (FLAG_trace_hydrogen && | 1427 : (FLAG_trace_hydrogen && |
1386 info()->closure()->PassesFilter(FLAG_trace_hydrogen_filter)); | 1428 info()->closure()->PassesFilter(FLAG_trace_hydrogen_filter)); |
1387 return (tracing_on && | 1429 return (tracing_on && |
1388 base::OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL); | 1430 base::OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL); |
1389 } | 1431 } |
1390 | 1432 |
1391 } } // namespace v8::internal | 1433 } } // namespace v8::internal |
OLD | NEW |