Chromium Code Reviews| Index: src/ic/handler-compiler.cc |
| diff --git a/src/ic/handler-compiler.cc b/src/ic/handler-compiler.cc |
| index fef1f63116eaff8b91b2297581c7d674da7388d6..9ca434293ae57a117b0fe6a41c7cd5ed0eface25 100644 |
| --- a/src/ic/handler-compiler.cc |
| +++ b/src/ic/handler-compiler.cc |
| @@ -193,27 +193,6 @@ void PropertyHandlerCompiler::NonexistentFrontendHeader(Handle<Name> name, |
| } |
| } |
| - |
| -Handle<Code> NamedLoadHandlerCompiler::CompileLoadField(Handle<Name> name, |
| - FieldIndex field) { |
| - Register reg = Frontend(name); |
| - __ Move(receiver(), reg); |
| - LoadFieldStub stub(isolate(), field); |
| - GenerateTailCall(masm(), stub.GetCode()); |
| - return GetCode(kind(), name); |
| -} |
| - |
| - |
| -Handle<Code> NamedLoadHandlerCompiler::CompileLoadConstant(Handle<Name> name, |
| - int constant_index) { |
| - Register reg = Frontend(name); |
| - __ Move(receiver(), reg); |
| - LoadConstantStub stub(isolate(), constant_index); |
| - GenerateTailCall(masm(), stub.GetCode()); |
| - return GetCode(kind(), name); |
| -} |
| - |
| - |
| Handle<Code> NamedLoadHandlerCompiler::CompileLoadNonexistent( |
| Handle<Name> name) { |
| Label miss; |
| @@ -440,150 +419,11 @@ Handle<Code> NamedLoadHandlerCompiler::CompileLoadViaGetter( |
| return GetCode(kind(), name); |
| } |
| - |
| -// TODO(verwaest): Cleanup. holder() is actually the receiver. |
| -Handle<Code> NamedStoreHandlerCompiler::CompileStoreTransition( |
| - Handle<Map> transition, Handle<Name> name) { |
| - Label miss; |
| - |
| - // Ensure that the StoreTransitionStub we are going to call has the same |
| - // number of stack arguments. This means that we don't have to adapt them |
| - // if we decide to call the transition or miss stub. |
| - STATIC_ASSERT(Descriptor::kStackArgumentsCount == |
| - StoreTransitionDescriptor::kStackArgumentsCount); |
| - STATIC_ASSERT(Descriptor::kStackArgumentsCount == 0 || |
| - Descriptor::kStackArgumentsCount == 3); |
| - STATIC_ASSERT(Descriptor::kParameterCount - Descriptor::kValue == |
| - StoreTransitionDescriptor::kParameterCount - |
| - StoreTransitionDescriptor::kValue); |
| - STATIC_ASSERT(Descriptor::kParameterCount - Descriptor::kSlot == |
| - StoreTransitionDescriptor::kParameterCount - |
| - StoreTransitionDescriptor::kSlot); |
| - STATIC_ASSERT(Descriptor::kParameterCount - Descriptor::kVector == |
| - StoreTransitionDescriptor::kParameterCount - |
| - StoreTransitionDescriptor::kVector); |
| - |
| - if (Descriptor::kPassLastArgsOnStack) { |
| - __ LoadParameterFromStack<Descriptor>(value(), Descriptor::kValue); |
| - } |
| - |
| - bool need_save_restore = IC::ShouldPushPopSlotAndVector(kind()); |
| - if (need_save_restore) { |
| - PushVectorAndSlot(); |
| - } |
| - |
| - // Check that we are allowed to write this. |
| - bool is_nonexistent = holder()->map() == transition->GetBackPointer(); |
| - if (is_nonexistent) { |
| - // Find the top object. |
| - Handle<JSObject> last; |
| - PrototypeIterator::WhereToEnd end = |
| - name->IsPrivate() ? PrototypeIterator::END_AT_NON_HIDDEN |
| - : PrototypeIterator::END_AT_NULL; |
| - PrototypeIterator iter(isolate(), holder(), kStartAtPrototype, end); |
| - while (!iter.IsAtEnd()) { |
| - last = PrototypeIterator::GetCurrent<JSObject>(iter); |
| - iter.Advance(); |
| - } |
| - if (!last.is_null()) set_holder(last); |
| - NonexistentFrontendHeader(name, &miss, scratch1(), scratch2()); |
| - } else { |
| - FrontendHeader(receiver(), name, &miss, DONT_RETURN_ANYTHING); |
| - DCHECK(holder()->HasFastProperties()); |
| - } |
| - |
| - int descriptor = transition->LastAdded(); |
| - Handle<DescriptorArray> descriptors(transition->instance_descriptors()); |
| - PropertyDetails details = descriptors->GetDetails(descriptor); |
| - Representation representation = details.representation(); |
| - DCHECK(!representation.IsNone()); |
| - |
| - // Stub is never generated for objects that require access checks. |
| - DCHECK(!transition->is_access_check_needed()); |
| - |
| - // Call to respective StoreTransitionStub. |
| - Register map_reg = StoreTransitionDescriptor::MapRegister(); |
| - |
| - if (details.type() == DATA_CONSTANT) { |
| - DCHECK(descriptors->GetValue(descriptor)->IsJSFunction()); |
| - GenerateRestoreMap(transition, map_reg, scratch1(), &miss); |
| - GenerateConstantCheck(map_reg, descriptor, value(), scratch1(), &miss); |
| - if (need_save_restore) { |
| - PopVectorAndSlot(); |
| - } |
| - GenerateRestoreName(name); |
| - StoreMapStub stub(isolate()); |
|
Igor Sheludko
2016/12/21 16:51:13
This stub is also a dead code.
danno
2016/12/21 16:59:28
Done.
|
| - GenerateTailCall(masm(), stub.GetCode()); |
| - |
| - } else { |
| - if (representation.IsHeapObject()) { |
| - GenerateFieldTypeChecks(descriptors->GetFieldType(descriptor), value(), |
| - &miss); |
| - } |
| - StoreTransitionStub::StoreMode store_mode = |
| - Map::cast(transition->GetBackPointer())->unused_property_fields() == 0 |
| - ? StoreTransitionStub::ExtendStorageAndStoreMapAndValue |
| - : StoreTransitionStub::StoreMapAndValue; |
| - GenerateRestoreMap(transition, map_reg, scratch1(), &miss); |
| - if (need_save_restore) { |
| - PopVectorAndSlot(); |
| - } |
| - // We need to pass name on the stack. |
| - PopReturnAddress(this->name()); |
| - __ Push(name); |
| - PushReturnAddress(this->name()); |
| - |
| - FieldIndex index = FieldIndex::ForDescriptor(*transition, descriptor); |
| - __ Move(StoreNamedTransitionDescriptor::FieldOffsetRegister(), |
| - Smi::FromInt(index.index() << kPointerSizeLog2)); |
| - |
| - StoreTransitionStub stub(isolate(), index.is_inobject(), representation, |
|
Igor Sheludko
2016/12/21 16:51:13
Same here.
danno
2016/12/21 16:59:28
Done.
|
| - store_mode); |
| - GenerateTailCall(masm(), stub.GetCode()); |
| - } |
| - |
| - __ bind(&miss); |
| - if (need_save_restore) { |
| - PopVectorAndSlot(); |
| - } |
| - GenerateRestoreName(name); |
| - TailCallBuiltin(masm(), MissBuiltin(kind())); |
| - |
| - return GetCode(kind(), name); |
| -} |
| - |
| bool NamedStoreHandlerCompiler::RequiresFieldTypeChecks( |
| FieldType* field_type) const { |
| return field_type->IsClass(); |
| } |
| - |
| -Handle<Code> NamedStoreHandlerCompiler::CompileStoreField(LookupIterator* it) { |
| - Label miss; |
| - DCHECK(it->representation().IsHeapObject()); |
| - |
| - FieldType* field_type = *it->GetFieldType(); |
| - bool need_save_restore = false; |
| - if (RequiresFieldTypeChecks(field_type)) { |
| - need_save_restore = IC::ShouldPushPopSlotAndVector(kind()); |
| - if (Descriptor::kPassLastArgsOnStack) { |
| - __ LoadParameterFromStack<Descriptor>(value(), Descriptor::kValue); |
| - } |
| - if (need_save_restore) PushVectorAndSlot(); |
| - GenerateFieldTypeChecks(field_type, value(), &miss); |
| - if (need_save_restore) PopVectorAndSlot(); |
| - } |
| - |
| - StoreFieldStub stub(isolate(), it->GetFieldIndex(), it->representation()); |
|
Igor Sheludko
2016/12/21 16:51:13
Same here.
danno
2016/12/21 16:59:28
Done.
|
| - GenerateTailCall(masm(), stub.GetCode()); |
| - |
| - __ bind(&miss); |
| - if (need_save_restore) PopVectorAndSlot(); |
| - TailCallBuiltin(masm(), MissBuiltin(kind())); |
| - return GetCode(kind(), it->name()); |
| -} |
| - |
| - |
| Handle<Code> NamedStoreHandlerCompiler::CompileStoreViaSetter( |
| Handle<JSObject> object, Handle<Name> name, int accessor_index, |
| int expected_arguments) { |