Index: src/arm64/stub-cache-arm64.cc |
diff --git a/src/arm64/stub-cache-arm64.cc b/src/arm64/stub-cache-arm64.cc |
index 20431d6c09c2b1c86ccdc5a5c42e4314438fc316..1dca4f5c49e63bfe488a017a156a19f7679baba5 100644 |
--- a/src/arm64/stub-cache-arm64.cc |
+++ b/src/arm64/stub-cache-arm64.cc |
@@ -265,10 +265,10 @@ void NamedStoreHandlerCompiler::GenerateNegativeHolderLookup( |
// may be clobbered. Upon branch to miss_label, the receiver and name registers |
// have their original values. |
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) { |
Label exit; |
ASSERT(!AreAliased(receiver_reg, storage_reg, value_reg, |
@@ -325,12 +325,12 @@ void NamedStoreHandlerCompiler::GenerateStoreTransition( |
NoReg, MUTABLE); |
} |
- // 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)) { |
+ if (details.type() == FIELD && |
+ 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. |
__ Mov(scratch1, Operand(transition)); |
@@ -369,7 +369,7 @@ 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() |
@@ -377,7 +377,7 @@ void NamedStoreHandlerCompiler::GenerateStoreTransition( |
Register prop_reg = representation.IsDouble() ? storage_reg : value_reg; |
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); |
__ Str(prop_reg, FieldMemOperand(receiver_reg, offset)); |
if (!representation.IsSmi()) { |
@@ -682,8 +682,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())); |
@@ -701,7 +701,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)) { |
@@ -818,12 +818,11 @@ 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); |
// FrontendHeader can return its result into scratch1() so do not |
// use it. |
Register scratch2 = this->scratch2(); |
@@ -831,7 +830,8 @@ Register NamedLoadHandlerCompiler::CallbackFrontend(Register object_reg, |
Register dictionary = this->scratch4(); |
ASSERT(!AreAliased(reg, scratch2, scratch3, dictionary)); |
- if (!holder->HasFastProperties() && !holder->IsJSGlobalObject()) { |
+ if (!holder()->HasFastProperties()) { |
+ ASSERT(holder()->IsGlobalObject()); |
// Load the properties dictionary. |
__ Ldr(dictionary, FieldMemOperand(reg, JSObject::kPropertiesOffset)); |
@@ -863,8 +863,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) { |
__ Mov(receiver(), reg); |
LoadFieldStub stub(isolate(), field); |
GenerateTailCall(masm(), stub.GetCode()); |
@@ -932,13 +931,13 @@ void NamedLoadHandlerCompiler::GenerateLoadCallback( |
} |
-void NamedLoadHandlerCompiler::GenerateLoadInterceptor( |
- Register holder_reg, Handle<JSObject> interceptor_holder, |
- LookupResult* lookup, Handle<Name> name) { |
+void NamedLoadHandlerCompiler::GenerateLoadInterceptor(Register holder_reg, |
+ LookupResult* lookup, |
+ Handle<Name> name) { |
ASSERT(!AreAliased(receiver(), this->name(), |
scratch1(), scratch2(), scratch3())); |
- ASSERT(interceptor_holder->HasNamedInterceptor()); |
- ASSERT(!interceptor_holder->GetNamedInterceptor()->getter()->IsUndefined()); |
+ 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 later. |
@@ -967,7 +966,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); |
@@ -984,7 +983,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 |
@@ -1004,12 +1003,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), |
@@ -1021,10 +1020,10 @@ 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) { |
ASM_LOCATION("NamedStoreHandlerCompiler::CompileStoreCallback"); |
- Register holder_reg = Frontend(receiver(), holder, name); |
+ Register holder_reg = Frontend(receiver(), name); |
// Stub never generated for non-global objects that require access checks. |
ASSERT(holder->IsJSGlobalProxy() || !holder->IsAccessCheckNeeded()); |
@@ -1097,7 +1096,7 @@ void NamedStoreHandlerCompiler::GenerateStoreViaSetter( |
Handle<Code> NamedStoreHandlerCompiler::CompileStoreInterceptor( |
- Handle<JSObject> object, Handle<Name> name) { |
+ Handle<Name> name) { |
Label miss; |
ASM_LOCATION("NamedStoreHandlerCompiler::CompileStoreInterceptor"); |
@@ -1115,8 +1114,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 are still the |
// same and no global property with this name contains a value. |
@@ -1205,10 +1204,9 @@ 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(); |