Index: src/mips64/stub-cache-mips64.cc |
diff --git a/src/mips64/stub-cache-mips64.cc b/src/mips64/stub-cache-mips64.cc |
index 0279a51c531e400418aaa099bd0b34c90d1b21b5..ac3a5cf3c4deb71cb0e1456d5fe9e076cc40c038 100644 |
--- a/src/mips64/stub-cache-mips64.cc |
+++ b/src/mips64/stub-cache-mips64.cc |
@@ -298,10 +298,10 @@ void NamedStoreHandlerCompiler::GenerateNegativeHolderLookup( |
// After executing generated code, the receiver_reg and name_reg |
// may be clobbered. |
void NamedStoreHandlerCompiler::GenerateStoreTransition( |
- MacroAssembler* masm, Handle<JSObject> object, LookupResult* lookup, |
- Handle<Map> transition, Handle<Name> name, Register receiver_reg, |
- Register storage_reg, Register value_reg, Register scratch1, |
- Register scratch2, Register scratch3, Label* miss_label, Label* slow) { |
+ MacroAssembler* masm, LookupResult* lookup, Handle<Map> transition, |
+ Handle<Name> name, Register receiver_reg, Register storage_reg, |
+ Register value_reg, Register scratch1, Register scratch2, Register scratch3, |
+ Label* miss_label, Label* slow) { |
// a0 : value. |
Label exit; |
@@ -358,13 +358,12 @@ void NamedStoreHandlerCompiler::GenerateStoreTransition( |
__ sdc1(f4, FieldMemOperand(storage_reg, HeapNumber::kValueOffset)); |
} |
- // Stub never generated for non-global objects that require access |
- // checks. |
- ASSERT(object->IsJSGlobalProxy() || !object->IsAccessCheckNeeded()); |
+ // Stub never generated for objects that require access checks. |
+ ASSERT(!transition->is_access_check_needed()); |
// Perform map transition for the receiver if necessary. |
if (details.type() == FIELD && |
- object->map()->unused_property_fields() == 0) { |
+ Map::cast(transition->GetBackPointer())->unused_property_fields() == 0) { |
// The properties must be extended before we can store the value. |
// We jump to a runtime call that extends the properties array. |
__ push(receiver_reg); |
@@ -404,14 +403,14 @@ void NamedStoreHandlerCompiler::GenerateStoreTransition( |
// Adjust for the number of properties stored in the object. Even in the |
// face of a transition we can use the old map here because the size of the |
// object and the number of in-object properties is not going to change. |
- index -= object->map()->inobject_properties(); |
+ index -= transition->inobject_properties(); |
// TODO(verwaest): Share this code as a code stub. |
SmiCheck smi_check = representation.IsTagged() |
? INLINE_SMI_CHECK : OMIT_SMI_CHECK; |
if (index < 0) { |
// Set the property straight into the object. |
- int offset = object->map()->instance_size() + (index * kPointerSize); |
+ int offset = transition->instance_size() + (index * kPointerSize); |
if (representation.IsDouble()) { |
__ sd(storage_reg, FieldMemOperand(receiver_reg, offset)); |
} else { |
@@ -726,8 +725,8 @@ void PropertyAccessCompiler::GenerateTailCall(MacroAssembler* masm, |
Register PropertyHandlerCompiler::CheckPrototypes( |
- Register object_reg, Handle<JSObject> holder, Register holder_reg, |
- Register scratch1, Register scratch2, Handle<Name> name, Label* miss, |
+ Register object_reg, Register holder_reg, Register scratch1, |
+ Register scratch2, Handle<Name> name, Label* miss, |
PrototypeCheckType check) { |
Handle<Map> receiver_map(IC::TypeToMap(*type(), isolate())); |
@@ -746,7 +745,7 @@ Register PropertyHandlerCompiler::CheckPrototypes( |
} |
Handle<JSObject> prototype = Handle<JSObject>::null(); |
Handle<Map> current_map = receiver_map; |
- Handle<Map> holder_map(holder->map()); |
+ Handle<Map> holder_map(holder()->map()); |
// Traverse the prototype chain and check the maps in the prototype chain for |
// fast and global objects or do negative lookup for normal objects. |
while (!current_map.is_identical_to(holder_map)) { |
@@ -858,14 +857,14 @@ void NamedStoreHandlerCompiler::FrontendFooter(Handle<Name> name, Label* miss) { |
Register NamedLoadHandlerCompiler::CallbackFrontend(Register object_reg, |
- Handle<JSObject> holder, |
Handle<Name> name, |
Handle<Object> callback) { |
Label miss; |
- Register reg = FrontendHeader(object_reg, holder, name, &miss); |
+ Register reg = FrontendHeader(object_reg, name, &miss); |
- if (!holder->HasFastProperties() && !holder->IsJSGlobalObject()) { |
+ if (!holder()->HasFastProperties()) { |
+ ASSERT(!holder()->IsGlobalObject()); |
ASSERT(!reg.is(scratch2())); |
ASSERT(!reg.is(scratch3())); |
ASSERT(!reg.is(scratch4())); |
@@ -901,8 +900,7 @@ Register NamedLoadHandlerCompiler::CallbackFrontend(Register object_reg, |
void NamedLoadHandlerCompiler::GenerateLoadField( |
- Register reg, Handle<JSObject> holder, FieldIndex field, |
- Representation representation) { |
+ Register reg, FieldIndex field, Representation representation) { |
if (!reg.is(receiver())) __ mov(receiver(), reg); |
LoadFieldStub stub(isolate(), field); |
GenerateTailCall(masm(), stub.GetCode()); |
@@ -965,11 +963,11 @@ void NamedLoadHandlerCompiler::GenerateLoadCallback( |
} |
-void NamedLoadHandlerCompiler::GenerateLoadInterceptor( |
- Register holder_reg, Handle<JSObject> interceptor_holder, |
- LookupResult* lookup, Handle<Name> name) { |
- ASSERT(interceptor_holder->HasNamedInterceptor()); |
- ASSERT(!interceptor_holder->GetNamedInterceptor()->getter()->IsUndefined()); |
+void NamedLoadHandlerCompiler::GenerateLoadInterceptor(Register holder_reg, |
+ LookupResult* lookup, |
+ Handle<Name> name) { |
+ ASSERT(holder()->HasNamedInterceptor()); |
+ ASSERT(!holder()->GetNamedInterceptor()->getter()->IsUndefined()); |
// So far the most popular follow ups for interceptor loads are FIELD |
// and CALLBACKS, so inline only them, other cases may be added |
@@ -999,7 +997,7 @@ void NamedLoadHandlerCompiler::GenerateLoadInterceptor( |
// the holder and it is needed should the interceptor return without any |
// result. The CALLBACKS case needs the receiver to be passed into C++ code, |
// the FIELD case might cause a miss during the prototype check. |
- bool must_perfrom_prototype_check = *interceptor_holder != lookup->holder(); |
+ bool must_perfrom_prototype_check = *holder() != lookup->holder(); |
bool must_preserve_receiver_reg = !receiver().is(holder_reg) && |
(lookup->type() == CALLBACKS || must_perfrom_prototype_check); |
@@ -1016,7 +1014,7 @@ void NamedLoadHandlerCompiler::GenerateLoadInterceptor( |
// interceptor's holder has been compiled before (see a caller |
// of this method). |
CompileCallLoadPropertyWithInterceptor( |
- masm(), receiver(), holder_reg, this->name(), interceptor_holder, |
+ masm(), receiver(), holder_reg, this->name(), holder(), |
IC::kLoadPropertyWithInterceptorOnly); |
// Check if interceptor provided a value for property. If it's |
@@ -1035,12 +1033,12 @@ void NamedLoadHandlerCompiler::GenerateLoadInterceptor( |
} |
// Leave the internal frame. |
} |
- GenerateLoadPostInterceptor(holder_reg, interceptor_holder, name, lookup); |
+ GenerateLoadPostInterceptor(holder_reg, name, lookup); |
} else { // !compile_followup_inline |
// Call the runtime system to load the interceptor. |
// Check that the maps haven't changed. |
- PushInterceptorArguments(masm(), receiver(), holder_reg, |
- this->name(), interceptor_holder); |
+ PushInterceptorArguments(masm(), receiver(), holder_reg, this->name(), |
+ holder()); |
ExternalReference ref = ExternalReference( |
IC_Utility(IC::kLoadPropertyWithInterceptor), isolate()); |
@@ -1051,13 +1049,9 @@ void NamedLoadHandlerCompiler::GenerateLoadInterceptor( |
Handle<Code> NamedStoreHandlerCompiler::CompileStoreCallback( |
- Handle<JSObject> object, Handle<JSObject> holder, Handle<Name> name, |
+ Handle<JSObject> object, Handle<Name> name, |
Handle<ExecutableAccessorInfo> callback) { |
- Register holder_reg = Frontend(receiver(), holder, name); |
- |
- // Stub never generated for non-global objects that require access |
- // checks. |
- ASSERT(holder->IsJSGlobalProxy() || !holder->IsAccessCheckNeeded()); |
+ Register holder_reg = Frontend(receiver(), name); |
__ Push(receiver(), holder_reg); // Receiver. |
__ li(at, Operand(callback)); // Callback info. |
@@ -1124,7 +1118,7 @@ void NamedStoreHandlerCompiler::GenerateStoreViaSetter( |
Handle<Code> NamedStoreHandlerCompiler::CompileStoreInterceptor( |
- Handle<JSObject> object, Handle<Name> name) { |
+ Handle<Name> name) { |
__ Push(receiver(), this->name(), value()); |
// Do tail-call to the runtime system. |
@@ -1138,8 +1132,8 @@ Handle<Code> NamedStoreHandlerCompiler::CompileStoreInterceptor( |
Handle<Code> NamedLoadHandlerCompiler::CompileLoadNonexistent( |
- Handle<JSObject> last, Handle<Name> name) { |
- NonexistentFrontend(last, name); |
+ Handle<Name> name) { |
+ NonexistentFrontend(name); |
// Return undefined if maps of the full prototype chain is still the same. |
__ LoadRoot(v0, Heap::kUndefinedValueRootIndex); |
@@ -1226,11 +1220,10 @@ void NamedLoadHandlerCompiler::GenerateLoadViaGetter( |
Handle<Code> NamedLoadHandlerCompiler::CompileLoadGlobal( |
- Handle<GlobalObject> global, Handle<PropertyCell> cell, Handle<Name> name, |
- bool is_dont_delete) { |
+ Handle<PropertyCell> cell, Handle<Name> name, bool is_dont_delete) { |
Label miss; |
- FrontendHeader(receiver(), global, name, &miss); |
+ FrontendHeader(receiver(), name, &miss); |
// Get the value from the cell. |
Register result = StoreIC::ValueRegister(); |