| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index d523d77856b098ef848ae4668ec389a1366c44c7..b09e1a0530c5c4c9077ae4e01c0ea5c2db6b9135 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -11205,13 +11205,30 @@ void Code::ClearInlineCaches(Code::Kind* kind) {
|
| void SharedFunctionInfo::ClearTypeFeedbackInfo() {
|
| FixedArray* vector = feedback_vector();
|
| Heap* heap = GetHeap();
|
| - for (int i = 0; i < vector->length(); i++) {
|
| + int length = vector->length();
|
| +
|
| + for (int i = 0; i < length; i++) {
|
| Object* obj = vector->get(i);
|
| - if (!obj->IsAllocationSite()) {
|
| - vector->set(
|
| - i,
|
| - TypeFeedbackInfo::RawUninitializedSentinel(heap),
|
| - SKIP_WRITE_BARRIER);
|
| + if (obj->IsHeapObject()) {
|
| + InstanceType instance_type =
|
| + HeapObject::cast(obj)->map()->instance_type();
|
| + switch (instance_type) {
|
| + case ALLOCATION_SITE_TYPE:
|
| + // AllocationSites are not cleared because they do not store
|
| + // information that leaks.
|
| + break;
|
| + case JS_FUNCTION_TYPE:
|
| + // No need to clear the native context array function.
|
| + if (obj == JSFunction::cast(obj)->context()->native_context()->
|
| + get(Context::ARRAY_FUNCTION_INDEX)) {
|
| + break;
|
| + }
|
| + // Fall through...
|
| +
|
| + default:
|
| + vector->set(i, TypeFeedbackInfo::RawUninitializedSentinel(heap),
|
| + SKIP_WRITE_BARRIER);
|
| + }
|
| }
|
| }
|
| }
|
|
|