OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 27 matching lines...) Expand all Loading... |
38 #include "liveedit.h" | 38 #include "liveedit.h" |
39 #include "oprofile-agent.h" | 39 #include "oprofile-agent.h" |
40 #include "parser.h" | 40 #include "parser.h" |
41 #include "rewriter.h" | 41 #include "rewriter.h" |
42 #include "scopeinfo.h" | 42 #include "scopeinfo.h" |
43 #include "scopes.h" | 43 #include "scopes.h" |
44 | 44 |
45 namespace v8 { | 45 namespace v8 { |
46 namespace internal { | 46 namespace internal { |
47 | 47 |
| 48 |
| 49 CompilationInfo::CompilationInfo(Handle<Script> script) |
| 50 : flags_(0), |
| 51 function_(NULL), |
| 52 scope_(NULL), |
| 53 script_(script), |
| 54 extension_(NULL), |
| 55 pre_parse_data_(NULL) { |
| 56 } |
| 57 |
| 58 |
| 59 CompilationInfo::CompilationInfo(Handle<SharedFunctionInfo> shared_info) |
| 60 : flags_(IsLazy::encode(true)), |
| 61 function_(NULL), |
| 62 scope_(NULL), |
| 63 shared_info_(shared_info), |
| 64 script_(Handle<Script>(Script::cast(shared_info->script()))), |
| 65 extension_(NULL), |
| 66 pre_parse_data_(NULL) { |
| 67 } |
| 68 |
| 69 |
| 70 CompilationInfo::CompilationInfo(Handle<JSFunction> closure) |
| 71 : flags_(IsLazy::encode(true)), |
| 72 function_(NULL), |
| 73 scope_(NULL), |
| 74 closure_(closure), |
| 75 shared_info_(Handle<SharedFunctionInfo>(closure->shared())), |
| 76 script_(Handle<Script>(Script::cast(shared_info_->script()))), |
| 77 extension_(NULL), |
| 78 pre_parse_data_(NULL) { |
| 79 } |
| 80 |
| 81 |
48 // For normal operation the syntax checker is used to determine whether to | 82 // For normal operation the syntax checker is used to determine whether to |
49 // use the full compiler for top level code or not. However if the flag | 83 // use the full compiler for top level code or not. However if the flag |
50 // --always-full-compiler is specified or debugging is active the full | 84 // --always-full-compiler is specified or debugging is active the full |
51 // compiler will be used for all code. | 85 // compiler will be used for all code. |
52 static bool AlwaysFullCompiler() { | 86 static bool AlwaysFullCompiler() { |
53 #ifdef ENABLE_DEBUGGER_SUPPORT | 87 #ifdef ENABLE_DEBUGGER_SUPPORT |
54 return FLAG_always_full_compiler || Debugger::IsDebuggerActive(); | 88 return FLAG_always_full_compiler || Debugger::IsDebuggerActive(); |
55 #else | 89 #else |
56 return FLAG_always_full_compiler; | 90 return FLAG_always_full_compiler; |
57 #endif | 91 #endif |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 if (!info->shared_info().is_null()) { | 158 if (!info->shared_info().is_null()) { |
125 Handle<SerializedScopeInfo> scope_info = | 159 Handle<SerializedScopeInfo> scope_info = |
126 SerializedScopeInfo::Create(info->scope()); | 160 SerializedScopeInfo::Create(info->scope()); |
127 info->shared_info()->set_scope_info(*scope_info); | 161 info->shared_info()->set_scope_info(*scope_info); |
128 } | 162 } |
129 return code; | 163 return code; |
130 } | 164 } |
131 #endif | 165 #endif |
132 | 166 |
133 | 167 |
134 static Handle<SharedFunctionInfo> MakeFunctionInfo(bool is_global, | 168 static Handle<SharedFunctionInfo> MakeFunctionInfo(CompilationInfo* info, |
135 bool is_eval, | 169 Handle<Context> context) { |
136 Compiler::ValidationState validate, | |
137 Handle<Script> script, | |
138 Handle<Context> context, | |
139 v8::Extension* extension, | |
140 ScriptDataImpl* pre_data) { | |
141 CompilationZoneScope zone_scope(DELETE_ON_EXIT); | 170 CompilationZoneScope zone_scope(DELETE_ON_EXIT); |
142 | 171 |
143 PostponeInterruptsScope postpone; | 172 PostponeInterruptsScope postpone; |
144 | 173 |
145 ASSERT(!i::Top::global_context().is_null()); | 174 ASSERT(!i::Top::global_context().is_null()); |
| 175 Handle<Script> script = info->script(); |
146 script->set_context_data((*i::Top::global_context())->data()); | 176 script->set_context_data((*i::Top::global_context())->data()); |
147 | 177 |
148 bool is_json = (validate == Compiler::VALIDATE_JSON); | |
149 #ifdef ENABLE_DEBUGGER_SUPPORT | 178 #ifdef ENABLE_DEBUGGER_SUPPORT |
150 if (is_eval || is_json) { | 179 if (info->is_eval() || info->is_json()) { |
151 Script::CompilationType compilation_type = is_json | 180 Script::CompilationType compilation_type = info->is_json() |
152 ? Script::COMPILATION_TYPE_JSON | 181 ? Script::COMPILATION_TYPE_JSON |
153 : Script::COMPILATION_TYPE_EVAL; | 182 : Script::COMPILATION_TYPE_EVAL; |
154 script->set_compilation_type(Smi::FromInt(compilation_type)); | 183 script->set_compilation_type(Smi::FromInt(compilation_type)); |
155 // For eval scripts add information on the function from which eval was | 184 // For eval scripts add information on the function from which eval was |
156 // called. | 185 // called. |
157 if (is_eval) { | 186 if (info->is_eval()) { |
158 StackTraceFrameIterator it; | 187 StackTraceFrameIterator it; |
159 if (!it.done()) { | 188 if (!it.done()) { |
160 script->set_eval_from_shared( | 189 script->set_eval_from_shared( |
161 JSFunction::cast(it.frame()->function())->shared()); | 190 JSFunction::cast(it.frame()->function())->shared()); |
162 int offset = static_cast<int>( | 191 int offset = static_cast<int>( |
163 it.frame()->pc() - it.frame()->code()->instruction_start()); | 192 it.frame()->pc() - it.frame()->code()->instruction_start()); |
164 script->set_eval_from_instructions_offset(Smi::FromInt(offset)); | 193 script->set_eval_from_instructions_offset(Smi::FromInt(offset)); |
165 } | 194 } |
166 } | 195 } |
167 } | 196 } |
168 | 197 |
169 // Notify debugger | 198 // Notify debugger |
170 Debugger::OnBeforeCompile(script); | 199 Debugger::OnBeforeCompile(script); |
171 #endif | 200 #endif |
172 | 201 |
173 // Only allow non-global compiles for eval. | 202 // Only allow non-global compiles for eval. |
174 ASSERT(is_eval || is_global); | 203 ASSERT(info->is_eval() || info->is_global()); |
175 | 204 |
176 // Build AST. | 205 if (!Parser::Parse(info)) return Handle<SharedFunctionInfo>::null(); |
177 EagerCompilationInfo info(script, is_eval); | |
178 FunctionLiteral* lit = | |
179 Parser::MakeAST(is_global, script, extension, pre_data, is_json); | |
180 | |
181 // Check for parse errors. | |
182 if (lit == NULL) { | |
183 ASSERT(Top::has_pending_exception()); | |
184 return Handle<SharedFunctionInfo>::null(); | |
185 } | |
186 info.set_function(lit); | |
187 | 206 |
188 // Measure how long it takes to do the compilation; only take the | 207 // Measure how long it takes to do the compilation; only take the |
189 // rest of the function into account to avoid overlap with the | 208 // rest of the function into account to avoid overlap with the |
190 // parsing statistics. | 209 // parsing statistics. |
191 HistogramTimer* rate = is_eval | 210 HistogramTimer* rate = info->is_eval() |
192 ? &Counters::compile_eval | 211 ? &Counters::compile_eval |
193 : &Counters::compile; | 212 : &Counters::compile; |
194 HistogramTimerScope timer(rate); | 213 HistogramTimerScope timer(rate); |
195 | 214 |
196 // Compile the code. | 215 // Compile the code. |
| 216 FunctionLiteral* lit = info->function(); |
197 LiveEditFunctionTracker live_edit_tracker(lit); | 217 LiveEditFunctionTracker live_edit_tracker(lit); |
198 Handle<Code> code = MakeCode(context, &info); | 218 Handle<Code> code = MakeCode(context, info); |
199 | 219 |
200 // Check for stack-overflow exceptions. | 220 // Check for stack-overflow exceptions. |
201 if (code.is_null()) { | 221 if (code.is_null()) { |
202 Top::StackOverflow(); | 222 Top::StackOverflow(); |
203 return Handle<SharedFunctionInfo>::null(); | 223 return Handle<SharedFunctionInfo>::null(); |
204 } | 224 } |
205 | 225 |
206 if (script->name()->IsString()) { | 226 if (script->name()->IsString()) { |
207 PROFILE(CodeCreateEvent( | 227 PROFILE(CodeCreateEvent( |
208 is_eval ? Logger::EVAL_TAG : | 228 info->is_eval() |
209 Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), | 229 ? Logger::EVAL_TAG |
210 *code, String::cast(script->name()))); | 230 : Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), |
| 231 *code, |
| 232 String::cast(script->name()))); |
211 OPROFILE(CreateNativeCodeRegion(String::cast(script->name()), | 233 OPROFILE(CreateNativeCodeRegion(String::cast(script->name()), |
212 code->instruction_start(), | 234 code->instruction_start(), |
213 code->instruction_size())); | 235 code->instruction_size())); |
214 } else { | 236 } else { |
215 PROFILE(CodeCreateEvent( | 237 PROFILE(CodeCreateEvent( |
216 is_eval ? Logger::EVAL_TAG : | 238 info->is_eval() |
217 Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), | 239 ? Logger::EVAL_TAG |
218 *code, "")); | 240 : Logger::ToNativeByScript(Logger::SCRIPT_TAG, *script), |
219 OPROFILE(CreateNativeCodeRegion(is_eval ? "Eval" : "Script", | 241 *code, |
| 242 "")); |
| 243 OPROFILE(CreateNativeCodeRegion(info->is_eval() ? "Eval" : "Script", |
220 code->instruction_start(), | 244 code->instruction_start(), |
221 code->instruction_size())); | 245 code->instruction_size())); |
222 } | 246 } |
223 | 247 |
224 // Allocate function. | 248 // Allocate function. |
225 Handle<SharedFunctionInfo> result = | 249 Handle<SharedFunctionInfo> result = |
226 Factory::NewSharedFunctionInfo( | 250 Factory::NewSharedFunctionInfo( |
227 lit->name(), | 251 lit->name(), |
228 lit->materialized_literal_count(), | 252 lit->materialized_literal_count(), |
229 code, | 253 code, |
230 SerializedScopeInfo::Create(info.scope())); | 254 SerializedScopeInfo::Create(info->scope())); |
231 | 255 |
232 ASSERT_EQ(RelocInfo::kNoPosition, lit->function_token_position()); | 256 ASSERT_EQ(RelocInfo::kNoPosition, lit->function_token_position()); |
233 Compiler::SetFunctionInfo(result, lit, true, script); | 257 Compiler::SetFunctionInfo(result, lit, true, script); |
234 | 258 |
235 // Hint to the runtime system used when allocating space for initial | 259 // Hint to the runtime system used when allocating space for initial |
236 // property space by setting the expected number of properties for | 260 // property space by setting the expected number of properties for |
237 // the instances of the function. | 261 // the instances of the function. |
238 SetExpectedNofPropertiesFromEstimate(result, lit->expected_property_count()); | 262 SetExpectedNofPropertiesFromEstimate(result, lit->expected_property_count()); |
239 | 263 |
240 #ifdef ENABLE_DEBUGGER_SUPPORT | 264 #ifdef ENABLE_DEBUGGER_SUPPORT |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 if (!script_name.is_null()) { | 320 if (!script_name.is_null()) { |
297 script->set_name(*script_name); | 321 script->set_name(*script_name); |
298 script->set_line_offset(Smi::FromInt(line_offset)); | 322 script->set_line_offset(Smi::FromInt(line_offset)); |
299 script->set_column_offset(Smi::FromInt(column_offset)); | 323 script->set_column_offset(Smi::FromInt(column_offset)); |
300 } | 324 } |
301 | 325 |
302 script->set_data(script_data.is_null() ? Heap::undefined_value() | 326 script->set_data(script_data.is_null() ? Heap::undefined_value() |
303 : *script_data); | 327 : *script_data); |
304 | 328 |
305 // Compile the function and add it to the cache. | 329 // Compile the function and add it to the cache. |
306 result = MakeFunctionInfo(true, | 330 CompilationInfo info(script); |
307 false, | 331 info.MarkAsGlobal(); |
308 DONT_VALIDATE_JSON, | 332 info.SetExtension(extension); |
309 script, | 333 info.SetPreParseData(pre_data); |
310 Handle<Context>::null(), | 334 result = MakeFunctionInfo(&info, Handle<Context>::null()); |
311 extension, | |
312 pre_data); | |
313 if (extension == NULL && !result.is_null()) { | 335 if (extension == NULL && !result.is_null()) { |
314 CompilationCache::PutScript(source, result); | 336 CompilationCache::PutScript(source, result); |
315 } | 337 } |
316 | 338 |
317 // Get rid of the pre-parsing data (if necessary). | 339 // Get rid of the pre-parsing data (if necessary). |
318 if (input_pre_data == NULL && pre_data != NULL) { | 340 if (input_pre_data == NULL && pre_data != NULL) { |
319 delete pre_data; | 341 delete pre_data; |
320 } | 342 } |
321 } | 343 } |
322 | 344 |
323 if (result.is_null()) Top::ReportPendingMessages(); | 345 if (result.is_null()) Top::ReportPendingMessages(); |
324 return result; | 346 return result; |
325 } | 347 } |
326 | 348 |
327 | 349 |
328 Handle<SharedFunctionInfo> Compiler::CompileEval(Handle<String> source, | 350 Handle<SharedFunctionInfo> Compiler::CompileEval(Handle<String> source, |
329 Handle<Context> context, | 351 Handle<Context> context, |
330 bool is_global, | 352 bool is_global, |
331 ValidationState validate) { | 353 ValidationState validate) { |
332 // Note that if validation is required then no path through this | 354 // Note that if validation is required then no path through this function |
333 // function is allowed to return a value without validating that | 355 // is allowed to return a value without validating that the input is legal |
334 // the input is legal json. | 356 // json. |
| 357 bool is_json = (validate == VALIDATE_JSON); |
335 | 358 |
336 int source_length = source->length(); | 359 int source_length = source->length(); |
337 Counters::total_eval_size.Increment(source_length); | 360 Counters::total_eval_size.Increment(source_length); |
338 Counters::total_compile_size.Increment(source_length); | 361 Counters::total_compile_size.Increment(source_length); |
339 | 362 |
340 // The VM is in the COMPILER state until exiting this function. | 363 // The VM is in the COMPILER state until exiting this function. |
341 VMState state(COMPILER); | 364 VMState state(COMPILER); |
342 | 365 |
343 // Do a lookup in the compilation cache; if the entry is not there, | 366 // Do a lookup in the compilation cache; if the entry is not there, invoke |
344 // invoke the compiler and add the result to the cache. If we're | 367 // the compiler and add the result to the cache. If we're evaluating json |
345 // evaluating json we bypass the cache since we can't be sure a | 368 // we bypass the cache since we can't be sure a potential value in the |
346 // potential value in the cache has been validated. | 369 // cache has been validated. |
347 Handle<SharedFunctionInfo> result; | 370 Handle<SharedFunctionInfo> result; |
348 if (validate == DONT_VALIDATE_JSON) | 371 if (!is_json) { |
349 result = CompilationCache::LookupEval(source, context, is_global); | 372 result = CompilationCache::LookupEval(source, context, is_global); |
| 373 } |
350 | 374 |
351 if (result.is_null()) { | 375 if (result.is_null()) { |
352 // Create a script object describing the script to be compiled. | 376 // Create a script object describing the script to be compiled. |
353 Handle<Script> script = Factory::NewScript(source); | 377 Handle<Script> script = Factory::NewScript(source); |
354 result = MakeFunctionInfo(is_global, | 378 CompilationInfo info(script); |
355 true, | 379 info.MarkAsEval(); |
356 validate, | 380 if (is_global) info.MarkAsGlobal(); |
357 script, | 381 if (is_json) info.MarkAsJson(); |
358 context, | 382 result = MakeFunctionInfo(&info, context); |
359 NULL, | 383 if (!result.is_null() && !is_json) { |
360 NULL); | 384 // For json it's unlikely that we'll ever see exactly the same string |
361 if (!result.is_null() && validate != VALIDATE_JSON) { | 385 // again so we don't use the compilation cache. |
362 // For json it's unlikely that we'll ever see exactly the same | |
363 // string again so we don't use the compilation cache. | |
364 CompilationCache::PutEval(source, context, is_global, result); | 386 CompilationCache::PutEval(source, context, is_global, result); |
365 } | 387 } |
366 } | 388 } |
367 | 389 |
368 return result; | 390 return result; |
369 } | 391 } |
370 | 392 |
371 | 393 |
372 bool Compiler::CompileLazy(CompilationInfo* info) { | 394 bool Compiler::CompileLazy(CompilationInfo* info) { |
373 CompilationZoneScope zone_scope(DELETE_ON_EXIT); | 395 CompilationZoneScope zone_scope(DELETE_ON_EXIT); |
374 | 396 |
375 // The VM is in the COMPILER state until exiting this function. | 397 // The VM is in the COMPILER state until exiting this function. |
376 VMState state(COMPILER); | 398 VMState state(COMPILER); |
377 | 399 |
378 PostponeInterruptsScope postpone; | 400 PostponeInterruptsScope postpone; |
379 | 401 |
380 // Compute name, source code and script data. | 402 // Compute name, source code and script data. |
381 Handle<SharedFunctionInfo> shared = info->shared_info(); | 403 Handle<SharedFunctionInfo> shared = info->shared_info(); |
382 int compiled_size = shared->end_position() - shared->start_position(); | 404 int compiled_size = shared->end_position() - shared->start_position(); |
383 Counters::total_compile_size.Increment(compiled_size); | 405 Counters::total_compile_size.Increment(compiled_size); |
384 | 406 |
385 // Generate the AST for the lazily compiled function. The AST may be | 407 // Generate the AST for the lazily compiled function. |
386 // NULL in case of parser stack overflow. | 408 if (!Parser::Parse(info)) return false; |
387 FunctionLiteral* lit = Parser::MakeLazyAST(shared); | |
388 | |
389 // Check for parse errors. | |
390 if (lit == NULL) { | |
391 ASSERT(Top::has_pending_exception()); | |
392 return false; | |
393 } | |
394 info->set_function(lit); | |
395 | 409 |
396 // Measure how long it takes to do the lazy compilation; only take | 410 // Measure how long it takes to do the lazy compilation; only take |
397 // the rest of the function into account to avoid overlap with the | 411 // the rest of the function into account to avoid overlap with the |
398 // lazy parsing statistics. | 412 // lazy parsing statistics. |
399 HistogramTimerScope timer(&Counters::compile_lazy); | 413 HistogramTimerScope timer(&Counters::compile_lazy); |
400 | 414 |
401 // Compile the code. | 415 // Compile the code. |
402 Handle<Code> code = MakeCode(Handle<Context>::null(), info); | 416 Handle<Code> code = MakeCode(Handle<Context>::null(), info); |
403 | 417 |
404 // Check for stack-overflow exception. | 418 // Check for stack-overflow exception. |
(...skipping 16 matching lines...) Expand all Loading... |
421 // object last we avoid this. | 435 // object last we avoid this. |
422 Handle<SerializedScopeInfo> scope_info = | 436 Handle<SerializedScopeInfo> scope_info = |
423 SerializedScopeInfo::Create(info->scope()); | 437 SerializedScopeInfo::Create(info->scope()); |
424 shared->set_scope_info(*scope_info); | 438 shared->set_scope_info(*scope_info); |
425 shared->set_code(*code); | 439 shared->set_code(*code); |
426 if (!info->closure().is_null()) { | 440 if (!info->closure().is_null()) { |
427 info->closure()->set_code(*code); | 441 info->closure()->set_code(*code); |
428 } | 442 } |
429 | 443 |
430 // Set the expected number of properties for instances. | 444 // Set the expected number of properties for instances. |
| 445 FunctionLiteral* lit = info->function(); |
431 SetExpectedNofPropertiesFromEstimate(shared, lit->expected_property_count()); | 446 SetExpectedNofPropertiesFromEstimate(shared, lit->expected_property_count()); |
432 | 447 |
433 // Set the optimication hints after performing lazy compilation, as these are | 448 // Set the optimication hints after performing lazy compilation, as these are |
434 // not set when the function is set up as a lazily compiled function. | 449 // not set when the function is set up as a lazily compiled function. |
435 shared->SetThisPropertyAssignmentsInfo( | 450 shared->SetThisPropertyAssignmentsInfo( |
436 lit->has_only_simple_this_property_assignments(), | 451 lit->has_only_simple_this_property_assignments(), |
437 *lit->this_property_assignments()); | 452 *lit->this_property_assignments()); |
438 | 453 |
439 // Check the function has compiled code. | 454 // Check the function has compiled code. |
440 ASSERT(shared->is_compiled()); | 455 ASSERT(shared->is_compiled()); |
(...skipping 29 matching lines...) Expand all Loading... |
470 } else { | 485 } else { |
471 // The bodies of function literals have not yet been visited by | 486 // The bodies of function literals have not yet been visited by |
472 // the AST optimizer/analyzer. | 487 // the AST optimizer/analyzer. |
473 if (!Rewriter::Optimize(literal)) { | 488 if (!Rewriter::Optimize(literal)) { |
474 return Handle<SharedFunctionInfo>::null(); | 489 return Handle<SharedFunctionInfo>::null(); |
475 } | 490 } |
476 | 491 |
477 // Generate code and return it. The way that the compilation mode | 492 // Generate code and return it. The way that the compilation mode |
478 // is controlled by the command-line flags is described in | 493 // is controlled by the command-line flags is described in |
479 // the static helper function MakeCode. | 494 // the static helper function MakeCode. |
480 EagerCompilationInfo info(script, false); | 495 CompilationInfo info(script); |
481 info.set_function(literal); | 496 info.SetFunction(literal); |
482 | 497 |
483 bool is_run_once = literal->try_full_codegen(); | 498 bool is_run_once = literal->try_full_codegen(); |
484 bool use_full = FLAG_full_compiler && !literal->contains_loops(); | 499 bool use_full = FLAG_full_compiler && !literal->contains_loops(); |
485 if (AlwaysFullCompiler() || (use_full && is_run_once)) { | 500 if (AlwaysFullCompiler() || (use_full && is_run_once)) { |
486 code = FullCodeGenerator::MakeCode(&info); | 501 code = FullCodeGenerator::MakeCode(&info); |
487 } else { | 502 } else { |
488 // We fall back to the classic V8 code generator. | 503 // We fall back to the classic V8 code generator. |
489 AssignedVariablesAnalyzer ava(literal); | 504 AssignedVariablesAnalyzer ava(literal); |
490 if (!ava.Analyze()) return Handle<SharedFunctionInfo>::null(); | 505 if (!ava.Analyze()) return Handle<SharedFunctionInfo>::null(); |
491 code = CodeGenerator::MakeCode(&info); | 506 code = CodeGenerator::MakeCode(&info); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 PROFILE(CodeCreateEvent(Logger::ToNativeByScript(tag, *script), | 592 PROFILE(CodeCreateEvent(Logger::ToNativeByScript(tag, *script), |
578 *code, *func_name)); | 593 *code, *func_name)); |
579 OPROFILE(CreateNativeCodeRegion(*func_name, | 594 OPROFILE(CreateNativeCodeRegion(*func_name, |
580 code->instruction_start(), | 595 code->instruction_start(), |
581 code->instruction_size())); | 596 code->instruction_size())); |
582 } | 597 } |
583 } | 598 } |
584 } | 599 } |
585 | 600 |
586 } } // namespace v8::internal | 601 } } // namespace v8::internal |
OLD | NEW |