OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 int count, | 277 int count, |
278 BailoutType type) { | 278 BailoutType type) { |
279 TableEntryGenerator generator(masm, type, count); | 279 TableEntryGenerator generator(masm, type, count); |
280 generator.Generate(); | 280 generator.Generate(); |
281 } | 281 } |
282 | 282 |
283 | 283 |
284 void Deoptimizer::VisitAllOptimizedFunctionsForContext( | 284 void Deoptimizer::VisitAllOptimizedFunctionsForContext( |
285 Context* context, OptimizedFunctionVisitor* visitor) { | 285 Context* context, OptimizedFunctionVisitor* visitor) { |
286 Isolate* isolate = context->GetIsolate(); | 286 Isolate* isolate = context->GetIsolate(); |
287 ZoneScope zone_scope(isolate->runtime_zone(), DELETE_ON_EXIT); | 287 Zone zone(isolate); |
288 DisallowHeapAllocation no_allocation; | 288 DisallowHeapAllocation no_allocation; |
289 | 289 |
290 ASSERT(context->IsNativeContext()); | 290 ASSERT(context->IsNativeContext()); |
291 | 291 |
292 visitor->EnterContext(context); | 292 visitor->EnterContext(context); |
293 | 293 |
294 // Create a snapshot of the optimized functions list. This is needed because | 294 // Create a snapshot of the optimized functions list. This is needed because |
295 // visitors might remove more than one link from the list at once. | 295 // visitors might remove more than one link from the list at once. |
296 ZoneList<JSFunction*> snapshot(1, isolate->runtime_zone()); | 296 ZoneList<JSFunction*> snapshot(1, &zone); |
297 Object* element = context->OptimizedFunctionsListHead(); | 297 Object* element = context->OptimizedFunctionsListHead(); |
298 while (!element->IsUndefined()) { | 298 while (!element->IsUndefined()) { |
299 JSFunction* element_function = JSFunction::cast(element); | 299 JSFunction* element_function = JSFunction::cast(element); |
300 snapshot.Add(element_function, isolate->runtime_zone()); | 300 snapshot.Add(element_function, &zone); |
301 element = element_function->next_function_link(); | 301 element = element_function->next_function_link(); |
302 } | 302 } |
303 | 303 |
304 // Run through the snapshot of optimized functions and visit them. | 304 // Run through the snapshot of optimized functions and visit them. |
305 for (int i = 0; i < snapshot.length(); ++i) { | 305 for (int i = 0; i < snapshot.length(); ++i) { |
306 visitor->VisitFunction(snapshot.at(i)); | 306 visitor->VisitFunction(snapshot.at(i)); |
307 } | 307 } |
308 | 308 |
309 visitor->LeaveContext(context); | 309 visitor->LeaveContext(context); |
310 } | 310 } |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 } | 413 } |
414 } | 414 } |
415 | 415 |
416 | 416 |
417 void Deoptimizer::DeoptimizeFunction(JSFunction* function) { | 417 void Deoptimizer::DeoptimizeFunction(JSFunction* function) { |
418 if (!function->IsOptimized()) return; | 418 if (!function->IsOptimized()) return; |
419 Code* code = function->code(); | 419 Code* code = function->code(); |
420 Context* context = function->context()->native_context(); | 420 Context* context = function->context()->native_context(); |
421 Isolate* isolate = context->GetIsolate(); | 421 Isolate* isolate = context->GetIsolate(); |
422 Object* undefined = isolate->heap()->undefined_value(); | 422 Object* undefined = isolate->heap()->undefined_value(); |
423 Zone* zone = isolate->runtime_zone(); | 423 Zone zone(isolate); |
424 ZoneScope zone_scope(zone, DELETE_ON_EXIT); | 424 ZoneList<Code*> codes(1, &zone); |
425 ZoneList<Code*> codes(1, zone); | |
426 DeoptimizeWithMatchingCodeFilter filter(code); | 425 DeoptimizeWithMatchingCodeFilter filter(code); |
427 PartitionOptimizedFunctions(context, &filter, &codes, zone, undefined); | 426 PartitionOptimizedFunctions(context, &filter, &codes, &zone, undefined); |
428 ASSERT_EQ(1, codes.length()); | 427 ASSERT_EQ(1, codes.length()); |
429 DeoptimizeFunctionWithPreparedFunctionList( | 428 DeoptimizeFunctionWithPreparedFunctionList( |
430 JSFunction::cast(codes.at(0)->deoptimizing_functions())); | 429 JSFunction::cast(codes.at(0)->deoptimizing_functions())); |
431 codes.at(0)->set_deoptimizing_functions(undefined); | 430 codes.at(0)->set_deoptimizing_functions(undefined); |
432 } | 431 } |
433 | 432 |
434 | 433 |
435 void Deoptimizer::DeoptimizeAllFunctionsForContext( | 434 void Deoptimizer::DeoptimizeAllFunctionsForContext( |
436 Context* context, OptimizedFunctionFilter* filter) { | 435 Context* context, OptimizedFunctionFilter* filter) { |
437 ASSERT(context->IsNativeContext()); | 436 ASSERT(context->IsNativeContext()); |
438 Isolate* isolate = context->GetIsolate(); | 437 Isolate* isolate = context->GetIsolate(); |
439 Object* undefined = isolate->heap()->undefined_value(); | 438 Object* undefined = isolate->heap()->undefined_value(); |
440 Zone* zone = isolate->runtime_zone(); | 439 Zone zone(isolate); |
441 ZoneScope zone_scope(zone, DELETE_ON_EXIT); | 440 ZoneList<Code*> codes(1, &zone); |
442 ZoneList<Code*> codes(1, zone); | 441 PartitionOptimizedFunctions(context, filter, &codes, &zone, undefined); |
443 PartitionOptimizedFunctions(context, filter, &codes, zone, undefined); | |
444 for (int i = 0; i < codes.length(); ++i) { | 442 for (int i = 0; i < codes.length(); ++i) { |
445 DeoptimizeFunctionWithPreparedFunctionList( | 443 DeoptimizeFunctionWithPreparedFunctionList( |
446 JSFunction::cast(codes.at(i)->deoptimizing_functions())); | 444 JSFunction::cast(codes.at(i)->deoptimizing_functions())); |
447 codes.at(i)->set_deoptimizing_functions(undefined); | 445 codes.at(i)->set_deoptimizing_functions(undefined); |
448 } | 446 } |
449 } | 447 } |
450 | 448 |
451 | 449 |
452 void Deoptimizer::DeoptimizeAllFunctionsWith(Isolate* isolate, | 450 void Deoptimizer::DeoptimizeAllFunctionsWith(Isolate* isolate, |
453 OptimizedFunctionFilter* filter) { | 451 OptimizedFunctionFilter* filter) { |
(...skipping 2637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3091 | 3089 |
3092 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { | 3090 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { |
3093 v->VisitPointer(BitCast<Object**>(&function_)); | 3091 v->VisitPointer(BitCast<Object**>(&function_)); |
3094 v->VisitPointers(parameters_, parameters_ + parameters_count_); | 3092 v->VisitPointers(parameters_, parameters_ + parameters_count_); |
3095 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); | 3093 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); |
3096 } | 3094 } |
3097 | 3095 |
3098 #endif // ENABLE_DEBUGGER_SUPPORT | 3096 #endif // ENABLE_DEBUGGER_SUPPORT |
3099 | 3097 |
3100 } } // namespace v8::internal | 3098 } } // namespace v8::internal |
OLD | NEW |