Index: src/arm/stub-cache-arm.cc |
diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc |
index 085af3f2b7c48775c7dee3d30c945119ece7c377..ba3d362804e2dd7e118bd04ef6b6f35c276f4726 100644 |
--- a/src/arm/stub-cache-arm.cc |
+++ b/src/arm/stub-cache-arm.cc |
@@ -121,18 +121,14 @@ static void ProbeTable(Isolate* isolate, |
} |
-// Helper function used to check that the dictionary doesn't contain |
-// the property. This function may return false negatives, so miss_label |
-// must always call a backup property check that is complete. |
-// This function is safe to call if the receiver has fast properties. |
-// Name must be unique and receiver must be a heap object. |
-static void GenerateDictionaryNegativeLookup(MacroAssembler* masm, |
- Label* miss_label, |
- Register receiver, |
- Handle<Name> name, |
- Register scratch0, |
- Register scratch1) { |
+void StubCompiler::GenerateDictionaryNegativeLookup(MacroAssembler* masm, |
+ Label* miss_label, |
+ Register receiver, |
+ Handle<Name> name, |
+ Register scratch0, |
+ Register scratch1) { |
ASSERT(name->IsUniqueName()); |
+ ASSERT(!receiver.is(scratch0)); |
Counters* counters = masm->isolate()->counters(); |
__ IncrementCounter(counters->negative_lookups(), 1, scratch0, scratch1); |
__ IncrementCounter(counters->negative_lookups_miss(), 1, scratch0, scratch1); |
@@ -422,12 +418,12 @@ void StubCompiler::GenerateLoadFunctionPrototype(MacroAssembler* masm, |
// Generate code to check that a global property cell is empty. Create |
// the property cell at compilation time if no cell exists for the |
// property. |
-static void GenerateCheckPropertyCell(MacroAssembler* masm, |
- Handle<GlobalObject> global, |
- Handle<Name> name, |
- Register scratch, |
- Label* miss) { |
- Handle<Cell> cell = GlobalObject::EnsurePropertyCell(global, name); |
+void StubCompiler::GenerateCheckPropertyCell(MacroAssembler* masm, |
+ Handle<JSGlobalObject> global, |
+ Handle<Name> name, |
+ Register scratch, |
+ Label* miss) { |
+ Handle<Cell> cell = JSGlobalObject::EnsurePropertyCell(global, name); |
ASSERT(cell->value()->IsTheHole()); |
__ mov(scratch, Operand(cell)); |
__ ldr(scratch, FieldMemOperand(scratch, Cell::kValueOffset)); |
@@ -445,7 +441,7 @@ void BaseStoreStubCompiler::GenerateNegativeHolderLookup( |
Label* miss) { |
if (holder->IsJSGlobalObject()) { |
GenerateCheckPropertyCell( |
- masm, Handle<GlobalObject>::cast(holder), name, scratch1(), miss); |
+ masm, Handle<JSGlobalObject>::cast(holder), name, scratch1(), miss); |
} else if (!holder->HasFastProperties() && !holder->IsJSGlobalProxy()) { |
GenerateDictionaryNegativeLookup( |
masm, miss, holder_reg, name, scratch1(), scratch2()); |
@@ -1147,19 +1143,17 @@ class CallInterceptorCompiler BASE_EMBEDDED { |
}; |
-// Calls GenerateCheckPropertyCell for each global object in the prototype chain |
-// from object to (but not including) holder. |
-static void GenerateCheckPropertyCells(MacroAssembler* masm, |
- Handle<JSObject> object, |
- Handle<JSObject> holder, |
- Handle<Name> name, |
- Register scratch, |
- Label* miss) { |
+void StubCompiler::GenerateCheckPropertyCells(MacroAssembler* masm, |
+ Handle<JSObject> object, |
+ Handle<JSObject> holder, |
+ Handle<Name> name, |
+ Register scratch, |
+ Label* miss) { |
Handle<JSObject> current = object; |
while (!current.is_identical_to(holder)) { |
- if (current->IsGlobalObject()) { |
+ if (current->IsJSGlobalObject()) { |
GenerateCheckPropertyCell(masm, |
- Handle<GlobalObject>::cast(current), |
+ Handle<JSGlobalObject>::cast(current), |
name, |
scratch, |
miss); |
@@ -1363,26 +1357,6 @@ Register BaseLoadStubCompiler::CallbackHandlerFrontend( |
} |
-void BaseLoadStubCompiler::NonexistentHandlerFrontend( |
- Handle<JSObject> object, |
- Handle<JSObject> last, |
- Handle<Name> name, |
- Label* success, |
- Handle<GlobalObject> global) { |
- Label miss; |
- |
- HandlerFrontendHeader(object, receiver(), last, name, &miss); |
- |
- // If the last object in the prototype chain is a global object, |
- // check that the global property cell is empty. |
- if (!global.is_null()) { |
- GenerateCheckPropertyCell(masm(), global, name, scratch2(), &miss); |
- } |
- |
- HandlerFrontendFooter(name, success, &miss); |
-} |
- |
- |
void BaseLoadStubCompiler::GenerateLoadField(Register reg, |
Handle<JSObject> holder, |
PropertyIndex field, |
@@ -2926,7 +2900,7 @@ Handle<Code> LoadStubCompiler::CompileLoadNonexistent( |
Handle<JSObject> object, |
Handle<JSObject> last, |
Handle<Name> name, |
- Handle<GlobalObject> global) { |
+ Handle<JSGlobalObject> global) { |
Label success; |
NonexistentHandlerFrontend(object, last, name, &success, global); |