Index: src/ia32/stub-cache-ia32.cc |
diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc |
index bb8d2d341873fe12ca5006718cdb1dd21a9a0967..7730ee3da330ad870fcac426354540ba66c81616 100644 |
--- a/src/ia32/stub-cache-ia32.cc |
+++ b/src/ia32/stub-cache-ia32.cc |
@@ -139,7 +139,7 @@ static void GenerateDictionaryNegativeLookup(MacroAssembler* masm, |
// Check that the properties array is a dictionary. |
__ cmp(FieldOperand(properties, HeapObject::kMapOffset), |
- Immediate(FACTORY->hash_table_map())); |
+ Immediate(masm->isolate()->factory()->hash_table_map())); |
__ j(not_equal, miss_label); |
// Compute the capacity mask. |
@@ -179,7 +179,7 @@ static void GenerateDictionaryNegativeLookup(MacroAssembler* masm, |
ASSERT_EQ(kSmiTagSize, 1); |
__ mov(entity_name, Operand(properties, index, times_half_pointer_size, |
kElementsStartOffset - kHeapObjectTag)); |
- __ cmp(entity_name, FACTORY->undefined_value()); |
+ __ cmp(entity_name, masm->isolate()->factory()->undefined_value()); |
if (i != kProbes - 1) { |
__ j(equal, &done, taken); |
@@ -860,10 +860,10 @@ MUST_USE_RESULT static MaybeObject* GenerateCheckPropertyCell( |
if (Serializer::enabled()) { |
__ mov(scratch, Immediate(Handle<Object>(cell))); |
__ cmp(FieldOperand(scratch, JSGlobalPropertyCell::kValueOffset), |
- Immediate(FACTORY->the_hole_value())); |
+ Immediate(masm->isolate()->factory()->the_hole_value())); |
} else { |
__ cmp(Operand::Cell(Handle<JSGlobalPropertyCell>(cell)), |
- Immediate(FACTORY->the_hole_value())); |
+ Immediate(masm->isolate()->factory()->the_hole_value())); |
} |
__ j(not_equal, miss, not_taken); |
return cell; |
@@ -916,8 +916,6 @@ Register StubCompiler::CheckPrototypes(JSObject* object, |
ASSERT(!scratch2.is(object_reg) && !scratch2.is(holder_reg) |
&& !scratch2.is(scratch1)); |
- Heap* heap = isolate()->heap(); |
- |
// Keep track of the current object in register reg. |
Register reg = object_reg; |
JSObject* current = object; |
@@ -942,7 +940,7 @@ Register StubCompiler::CheckPrototypes(JSObject* object, |
!current->IsJSGlobalObject() && |
!current->IsJSGlobalProxy()) { |
if (!name->IsSymbol()) { |
- MaybeObject* maybe_lookup_result = heap->LookupSymbol(name); |
+ MaybeObject* maybe_lookup_result = heap()->LookupSymbol(name); |
Object* lookup_result = NULL; // Initialization to please compiler. |
if (!maybe_lookup_result->ToObject(&lookup_result)) { |
set_failure(Failure::cast(maybe_lookup_result)); |
@@ -962,7 +960,7 @@ Register StubCompiler::CheckPrototypes(JSObject* object, |
__ mov(scratch1, FieldOperand(reg, HeapObject::kMapOffset)); |
reg = holder_reg; // from now the object is in holder_reg |
__ mov(reg, FieldOperand(scratch1, Map::kPrototypeOffset)); |
- } else if (heap->InNewSpace(prototype)) { |
+ } else if (heap()->InNewSpace(prototype)) { |
// Get the map of the current object. |
__ mov(scratch1, FieldOperand(reg, HeapObject::kMapOffset)); |
__ cmp(Operand(scratch1), Immediate(Handle<Map>(current->map()))); |
@@ -1216,7 +1214,7 @@ void StubCompiler::GenerateLoadInterceptor(JSObject* object, |
// Check if interceptor provided a value for property. If it's |
// the case, return immediately. |
Label interceptor_failed; |
- __ cmp(eax, FACTORY->no_interceptor_result_sentinel()); |
+ __ cmp(eax, factory()->no_interceptor_result_sentinel()); |
__ j(equal, &interceptor_failed); |
__ LeaveInternalFrame(); |
__ ret(0); |
@@ -1474,7 +1472,7 @@ MaybeObject* CallStubCompiler::CompileArrayPushCall(Object* object, |
// Check that the elements are in fast mode and writable. |
__ cmp(FieldOperand(ebx, HeapObject::kMapOffset), |
- Immediate(FACTORY->fixed_array_map())); |
+ Immediate(factory()->fixed_array_map())); |
__ j(not_equal, &call_builtin); |
if (argc == 1) { // Otherwise fall through to call builtin. |
@@ -1550,7 +1548,7 @@ MaybeObject* CallStubCompiler::CompileArrayPushCall(Object* object, |
// ... and fill the rest with holes. |
for (int i = 1; i < kAllocationDelta; i++) { |
__ mov(Operand(edx, i * kPointerSize), |
- Immediate(FACTORY->the_hole_value())); |
+ Immediate(factory()->the_hole_value())); |
} |
// Restore receiver to edx as finish sequence assumes it's here. |
@@ -1596,7 +1594,7 @@ MaybeObject* CallStubCompiler::CompileArrayPopCall(Object* object, |
// If object is not an array, bail out to regular call. |
if (!object->IsJSArray() || cell != NULL) { |
- return isolate()->heap()->undefined_value(); |
+ return heap()->undefined_value(); |
} |
Label miss, return_undefined, call_builtin; |
@@ -1619,7 +1617,7 @@ MaybeObject* CallStubCompiler::CompileArrayPopCall(Object* object, |
// Check that the elements are in fast mode and writable. |
__ cmp(FieldOperand(ebx, HeapObject::kMapOffset), |
- Immediate(FACTORY->fixed_array_map())); |
+ Immediate(factory()->fixed_array_map())); |
__ j(not_equal, &call_builtin); |
// Get the array's length into ecx and calculate new length. |
@@ -1633,7 +1631,7 @@ MaybeObject* CallStubCompiler::CompileArrayPopCall(Object* object, |
__ mov(eax, FieldOperand(ebx, |
ecx, times_half_pointer_size, |
FixedArray::kHeaderSize)); |
- __ cmp(Operand(eax), Immediate(FACTORY->the_hole_value())); |
+ __ cmp(Operand(eax), Immediate(factory()->the_hole_value())); |
__ j(equal, &call_builtin); |
// Set the array's length. |
@@ -1643,11 +1641,11 @@ MaybeObject* CallStubCompiler::CompileArrayPopCall(Object* object, |
__ mov(FieldOperand(ebx, |
ecx, times_half_pointer_size, |
FixedArray::kHeaderSize), |
- Immediate(FACTORY->the_hole_value())); |
+ Immediate(factory()->the_hole_value())); |
__ ret((argc + 1) * kPointerSize); |
__ bind(&return_undefined); |
- __ mov(eax, Immediate(FACTORY->undefined_value())); |
+ __ mov(eax, Immediate(factory()->undefined_value())); |
__ ret((argc + 1) * kPointerSize); |
__ bind(&call_builtin); |
@@ -1714,7 +1712,7 @@ MaybeObject* CallStubCompiler::CompileStringCharCodeAtCall( |
if (argc > 0) { |
__ mov(index, Operand(esp, (argc - 0) * kPointerSize)); |
} else { |
- __ Set(index, Immediate(FACTORY->undefined_value())); |
+ __ Set(index, Immediate(factory()->undefined_value())); |
} |
StringCharCodeAtGenerator char_code_at_generator(receiver, |
@@ -1733,7 +1731,7 @@ MaybeObject* CallStubCompiler::CompileStringCharCodeAtCall( |
if (index_out_of_range.is_linked()) { |
__ bind(&index_out_of_range); |
- __ Set(eax, Immediate(FACTORY->nan_value())); |
+ __ Set(eax, Immediate(factory()->nan_value())); |
__ ret((argc + 1) * kPointerSize); |
} |
@@ -1765,7 +1763,7 @@ MaybeObject* CallStubCompiler::CompileStringCharAtCall( |
// If object is not a string, bail out to regular call. |
if (!object->IsString() || cell != NULL) { |
- return isolate()->heap()->undefined_value(); |
+ return heap()->undefined_value(); |
} |
const int argc = arguments().immediate(); |
@@ -1799,7 +1797,7 @@ MaybeObject* CallStubCompiler::CompileStringCharAtCall( |
if (argc > 0) { |
__ mov(index, Operand(esp, (argc - 0) * kPointerSize)); |
} else { |
- __ Set(index, Immediate(FACTORY->undefined_value())); |
+ __ Set(index, Immediate(factory()->undefined_value())); |
} |
StringCharAtGenerator char_at_generator(receiver, |
@@ -1819,7 +1817,7 @@ MaybeObject* CallStubCompiler::CompileStringCharAtCall( |
if (index_out_of_range.is_linked()) { |
__ bind(&index_out_of_range); |
- __ Set(eax, Immediate(FACTORY->empty_string())); |
+ __ Set(eax, Immediate(factory()->empty_string())); |
__ ret((argc + 1) * kPointerSize); |
} |
@@ -1923,7 +1921,7 @@ MaybeObject* CallStubCompiler::CompileMathFloorCall(Object* object, |
// -- esp[(argc + 1) * 4] : receiver |
// ----------------------------------- |
- if (isolate()->cpu_features()->IsSupported(SSE2)) { |
+ if (!isolate()->cpu_features()->IsSupported(SSE2)) { |
return isolate()->heap()->undefined_value(); |
} |
@@ -1966,7 +1964,7 @@ MaybeObject* CallStubCompiler::CompileMathFloorCall(Object* object, |
// Check if the argument is a heap number and load its value into xmm0. |
Label slow; |
- __ CheckMap(eax, FACTORY->heap_number_map(), &slow, true); |
+ __ CheckMap(eax, factory()->heap_number_map(), &slow, true); |
__ movdbl(xmm0, FieldOperand(eax, HeapNumber::kValueOffset)); |
// Check if the argument is strictly positive. Note this also |
@@ -2110,7 +2108,7 @@ MaybeObject* CallStubCompiler::CompileMathAbsCall(Object* object, |
// Check if the argument is a heap number and load its exponent and |
// sign into ebx. |
__ bind(¬_smi); |
- __ CheckMap(eax, FACTORY->heap_number_map(), &slow, true); |
+ __ CheckMap(eax, factory()->heap_number_map(), &slow, true); |
__ mov(ebx, FieldOperand(eax, HeapNumber::kExponentOffset)); |
// Check the sign of the argument. If the argument is positive, |
@@ -2155,12 +2153,11 @@ MaybeObject* CallStubCompiler::CompileFastApiCall( |
ASSERT(optimization.is_simple_api_call()); |
// Bail out if object is a global object as we don't want to |
// repatch it to global receiver. |
- Heap* heap = isolate()->heap(); |
- if (object->IsGlobalObject()) return heap->undefined_value(); |
- if (cell != NULL) return heap->undefined_value(); |
+ if (object->IsGlobalObject()) return heap()->undefined_value(); |
+ if (cell != NULL) return heap()->undefined_value(); |
int depth = optimization.GetPrototypeDepthOfExpectedType( |
JSObject::cast(object), holder); |
- if (depth == kInvalidProtoDepth) return heap->undefined_value(); |
+ if (depth == kInvalidProtoDepth) return heap()->undefined_value(); |
Label miss, miss_before_stack_reserved; |
@@ -2311,9 +2308,9 @@ MaybeObject* CallStubCompiler::CompileCallConstant(Object* object, |
} else { |
Label fast; |
// Check that the object is a boolean. |
- __ cmp(edx, FACTORY->true_value()); |
+ __ cmp(edx, factory()->true_value()); |
__ j(equal, &fast, taken); |
- __ cmp(edx, FACTORY->false_value()); |
+ __ cmp(edx, factory()->false_value()); |
__ j(not_equal, &miss, not_taken); |
__ bind(&fast); |
// Check that the maps starting from the prototype haven't changed. |
@@ -2637,7 +2634,7 @@ MaybeObject* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, |
// cell could have been deleted and reintroducing the global needs |
// to update the property details in the property dictionary of the |
// global object. We bail out to the runtime system to do that. |
- __ cmp(cell_operand, FACTORY->the_hole_value()); |
+ __ cmp(cell_operand, factory()->the_hole_value()); |
__ j(equal, &miss); |
// Store the value in the cell. |
@@ -2723,7 +2720,7 @@ MaybeObject* KeyedStoreStubCompiler::CompileStoreSpecialized( |
// Get the elements array and make sure it is a fast element array, not 'cow'. |
__ mov(edi, FieldOperand(edx, JSObject::kElementsOffset)); |
__ cmp(FieldOperand(edi, HeapObject::kMapOffset), |
- Immediate(FACTORY->fixed_array_map())); |
+ Immediate(factory()->fixed_array_map())); |
__ j(not_equal, &miss, not_taken); |
// Check that the key is within bounds. |
@@ -2935,10 +2932,10 @@ MaybeObject* LoadStubCompiler::CompileLoadGlobal(JSObject* object, |
// Check for deleted property if property can actually be deleted. |
if (!is_dont_delete) { |
- __ cmp(ebx, FACTORY->the_hole_value()); |
+ __ cmp(ebx, factory()->the_hole_value()); |
__ j(equal, &miss, not_taken); |
} else if (FLAG_debug_code) { |
- __ cmp(ebx, FACTORY->the_hole_value()); |
+ __ cmp(ebx, factory()->the_hole_value()); |
__ Check(not_equal, "DontDelete cells can't contain the hole"); |
} |
@@ -3195,7 +3192,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadSpecialized(JSObject* receiver) { |
// Load the result and make sure it's not the hole. |
__ mov(ebx, Operand(ecx, eax, times_2, |
FixedArray::kHeaderSize - kHeapObjectTag)); |
- __ cmp(ebx, FACTORY->the_hole_value()); |
+ __ cmp(ebx, factory()->the_hole_value()); |
__ j(equal, &miss, not_taken); |
__ mov(eax, ebx); |
__ ret(0); |
@@ -3224,7 +3221,7 @@ MaybeObject* ConstructStubCompiler::CompileConstructStub(JSFunction* function) { |
// code for the function thereby hitting the break points. |
__ mov(ebx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); |
__ mov(ebx, FieldOperand(ebx, SharedFunctionInfo::kDebugInfoOffset)); |
- __ cmp(ebx, FACTORY->undefined_value()); |
+ __ cmp(ebx, factory()->undefined_value()); |
__ j(not_equal, &generic_stub_call, not_taken); |
#endif |
@@ -3261,7 +3258,7 @@ MaybeObject* ConstructStubCompiler::CompileConstructStub(JSFunction* function) { |
// ebx: initial map |
// edx: JSObject (untagged) |
__ mov(Operand(edx, JSObject::kMapOffset), ebx); |
- __ mov(ebx, FACTORY->empty_fixed_array()); |
+ __ mov(ebx, factory()->empty_fixed_array()); |
__ mov(Operand(edx, JSObject::kPropertiesOffset), ebx); |
__ mov(Operand(edx, JSObject::kElementsOffset), ebx); |
@@ -3278,7 +3275,7 @@ MaybeObject* ConstructStubCompiler::CompileConstructStub(JSFunction* function) { |
__ lea(ecx, Operand(esp, eax, times_4, 1 * kPointerSize)); |
// Use edi for holding undefined which is used in several places below. |
- __ mov(edi, FACTORY->undefined_value()); |
+ __ mov(edi, factory()->undefined_value()); |
// eax: argc |
// ecx: first argument |
@@ -3593,7 +3590,7 @@ MaybeObject* ExternalArrayStubCompiler::CompileKeyedStoreStub( |
// edi: elements array |
// ebx: untagged index |
__ cmp(FieldOperand(eax, HeapObject::kMapOffset), |
- Immediate(FACTORY->heap_number_map())); |
+ Immediate(factory()->heap_number_map())); |
__ j(not_equal, &slow); |
// The WebGL specification leaves the behavior of storing NaN and |