| OLD | NEW |
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 6374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6385 } | 6385 } |
| 6386 | 6386 |
| 6387 | 6387 |
| 6388 static void TrySettingInlineConstructStub(Handle<JSFunction> function) { | 6388 static void TrySettingInlineConstructStub(Handle<JSFunction> function) { |
| 6389 Handle<Object> prototype = Factory::null_value(); | 6389 Handle<Object> prototype = Factory::null_value(); |
| 6390 if (function->has_instance_prototype()) { | 6390 if (function->has_instance_prototype()) { |
| 6391 prototype = Handle<Object>(function->instance_prototype()); | 6391 prototype = Handle<Object>(function->instance_prototype()); |
| 6392 } | 6392 } |
| 6393 if (function->shared()->CanGenerateInlineConstructor(*prototype)) { | 6393 if (function->shared()->CanGenerateInlineConstructor(*prototype)) { |
| 6394 ConstructStubCompiler compiler; | 6394 ConstructStubCompiler compiler; |
| 6395 MaybeObject* code = compiler.CompileConstructStub(function->shared()); | 6395 MaybeObject* code = compiler.CompileConstructStub(*function); |
| 6396 if (!code->IsFailure()) { | 6396 if (!code->IsFailure()) { |
| 6397 function->shared()->set_construct_stub( | 6397 function->shared()->set_construct_stub( |
| 6398 Code::cast(code->ToObjectUnchecked())); | 6398 Code::cast(code->ToObjectUnchecked())); |
| 6399 } | 6399 } |
| 6400 } | 6400 } |
| 6401 } | 6401 } |
| 6402 | 6402 |
| 6403 | 6403 |
| 6404 static MaybeObject* Runtime_NewObject(Arguments args) { | 6404 static MaybeObject* Runtime_NewObject(Arguments args) { |
| 6405 HandleScope scope; | 6405 HandleScope scope; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6453 // The function should be compiled for the optimization hints to be available. | 6453 // The function should be compiled for the optimization hints to be available. |
| 6454 Handle<SharedFunctionInfo> shared(function->shared()); | 6454 Handle<SharedFunctionInfo> shared(function->shared()); |
| 6455 EnsureCompiled(shared, CLEAR_EXCEPTION); | 6455 EnsureCompiled(shared, CLEAR_EXCEPTION); |
| 6456 | 6456 |
| 6457 if (!function->has_initial_map() && | 6457 if (!function->has_initial_map() && |
| 6458 shared->IsInobjectSlackTrackingInProgress()) { | 6458 shared->IsInobjectSlackTrackingInProgress()) { |
| 6459 // The tracking is already in progress for another function. We can only | 6459 // The tracking is already in progress for another function. We can only |
| 6460 // track one initial_map at a time, so we force the completion before the | 6460 // track one initial_map at a time, so we force the completion before the |
| 6461 // function is called as a constructor for the first time. | 6461 // function is called as a constructor for the first time. |
| 6462 shared->CompleteInobjectSlackTracking(); | 6462 shared->CompleteInobjectSlackTracking(); |
| 6463 TrySettingInlineConstructStub(function); | |
| 6464 } | 6463 } |
| 6465 | 6464 |
| 6466 bool first_allocation = !shared->live_objects_may_exist(); | 6465 bool first_allocation = !shared->live_objects_may_exist(); |
| 6467 Handle<JSObject> result = Factory::NewJSObject(function); | 6466 Handle<JSObject> result = Factory::NewJSObject(function); |
| 6468 // Delay setting the stub if inobject slack tracking is in progress. | 6467 // Delay setting the stub if inobject slack tracking is in progress. |
| 6469 if (first_allocation && !shared->IsInobjectSlackTrackingInProgress()) { | 6468 if (first_allocation && !shared->IsInobjectSlackTrackingInProgress()) { |
| 6470 TrySettingInlineConstructStub(function); | 6469 TrySettingInlineConstructStub(function); |
| 6471 } | 6470 } |
| 6472 | 6471 |
| 6473 Counters::constructed_objects.Increment(); | 6472 Counters::constructed_objects.Increment(); |
| (...skipping 3852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10326 } else { | 10325 } else { |
| 10327 // Handle last resort GC and make sure to allow future allocations | 10326 // Handle last resort GC and make sure to allow future allocations |
| 10328 // to grow the heap without causing GCs (if possible). | 10327 // to grow the heap without causing GCs (if possible). |
| 10329 Counters::gc_last_resort_from_js.Increment(); | 10328 Counters::gc_last_resort_from_js.Increment(); |
| 10330 Heap::CollectAllGarbage(false); | 10329 Heap::CollectAllGarbage(false); |
| 10331 } | 10330 } |
| 10332 } | 10331 } |
| 10333 | 10332 |
| 10334 | 10333 |
| 10335 } } // namespace v8::internal | 10334 } } // namespace v8::internal |
| OLD | NEW |