Index: src/ia32/full-codegen-ia32.cc |
=================================================================== |
--- src/ia32/full-codegen-ia32.cc (revision 7267) |
+++ src/ia32/full-codegen-ia32.cc (working copy) |
@@ -129,9 +129,9 @@ |
{ Comment cmnt(masm_, "[ Allocate locals"); |
int locals_count = scope()->num_stack_slots(); |
if (locals_count == 1) { |
- __ push(Immediate(Factory::undefined_value())); |
+ __ push(Immediate(isolate()->factory()->undefined_value())); |
} else if (locals_count > 1) { |
- __ mov(eax, Immediate(Factory::undefined_value())); |
+ __ mov(eax, Immediate(isolate()->factory()->undefined_value())); |
for (int i = 0; i < locals_count; i++) { |
__ push(eax); |
} |
@@ -252,7 +252,7 @@ |
// Always emit a 'return undefined' in case control fell off the end of |
// the body. |
{ Comment cmnt(masm_, "[ return <undefined>;"); |
- __ mov(eax, Factory::undefined_value()); |
+ __ mov(eax, isolate()->factory()->undefined_value()); |
EmitReturnSequence(); |
} |
} |
@@ -467,10 +467,10 @@ |
Label* materialize_false) const { |
NearLabel done; |
__ bind(materialize_true); |
- __ mov(result_register(), Factory::true_value()); |
+ __ mov(result_register(), isolate()->factory()->true_value()); |
__ jmp(&done); |
__ bind(materialize_false); |
- __ mov(result_register(), Factory::false_value()); |
+ __ mov(result_register(), isolate()->factory()->false_value()); |
__ bind(&done); |
} |
@@ -480,10 +480,10 @@ |
Label* materialize_false) const { |
NearLabel done; |
__ bind(materialize_true); |
- __ push(Immediate(Factory::true_value())); |
+ __ push(Immediate(isolate()->factory()->true_value())); |
__ jmp(&done); |
__ bind(materialize_false); |
- __ push(Immediate(Factory::false_value())); |
+ __ push(Immediate(isolate()->factory()->false_value())); |
__ bind(&done); |
} |
@@ -500,15 +500,17 @@ |
void FullCodeGenerator::AccumulatorValueContext::Plug(bool flag) const { |
- Handle<Object> value = |
- flag ? Factory::true_value() : Factory::false_value(); |
+ Handle<Object> value = flag |
+ ? isolate()->factory()->true_value() |
+ : isolate()->factory()->false_value(); |
__ mov(result_register(), value); |
} |
void FullCodeGenerator::StackValueContext::Plug(bool flag) const { |
- Handle<Object> value = |
- flag ? Factory::true_value() : Factory::false_value(); |
+ Handle<Object> value = flag |
+ ? isolate()->factory()->true_value() |
+ : isolate()->factory()->false_value(); |
__ push(Immediate(value)); |
} |
@@ -530,11 +532,11 @@ |
Label* if_false, |
Label* fall_through) { |
// Emit the inlined tests assumed by the stub. |
- __ cmp(result_register(), Factory::undefined_value()); |
+ __ cmp(result_register(), isolate()->factory()->undefined_value()); |
__ j(equal, if_false); |
- __ cmp(result_register(), Factory::true_value()); |
+ __ cmp(result_register(), isolate()->factory()->true_value()); |
__ j(equal, if_true); |
- __ cmp(result_register(), Factory::false_value()); |
+ __ cmp(result_register(), isolate()->factory()->false_value()); |
__ j(equal, if_false); |
STATIC_ASSERT(kSmiTag == 0); |
__ test(result_register(), Operand(result_register())); |
@@ -629,7 +631,7 @@ |
} |
if (should_normalize) { |
- __ cmp(eax, Factory::true_value()); |
+ __ cmp(eax, isolate()->factory()->true_value()); |
Split(equal, if_true, if_false, NULL); |
__ bind(&skip); |
} |
@@ -650,7 +652,7 @@ |
case Slot::LOCAL: |
if (mode == Variable::CONST) { |
__ mov(Operand(ebp, SlotOffset(slot)), |
- Immediate(Factory::the_hole_value())); |
+ Immediate(isolate()->factory()->the_hole_value())); |
} else if (function != NULL) { |
VisitForAccumulatorValue(function); |
__ mov(Operand(ebp, SlotOffset(slot)), result_register()); |
@@ -672,7 +674,7 @@ |
} |
if (mode == Variable::CONST) { |
__ mov(ContextOperand(esi, slot->index()), |
- Immediate(Factory::the_hole_value())); |
+ Immediate(isolate()->factory()->the_hole_value())); |
// No write barrier since the hole value is in old space. |
} else if (function != NULL) { |
VisitForAccumulatorValue(function); |
@@ -695,7 +697,7 @@ |
// 'undefined') because we may have a (legal) redeclaration and we |
// must not destroy the current value. |
if (mode == Variable::CONST) { |
- __ push(Immediate(Factory::the_hole_value())); |
+ __ push(Immediate(isolate()->factory()->the_hole_value())); |
} else if (function != NULL) { |
VisitForStackValue(function); |
} else { |
@@ -723,15 +725,15 @@ |
__ pop(edx); |
} else { |
__ mov(edx, eax); |
- __ mov(eax, Factory::the_hole_value()); |
+ __ mov(eax, isolate()->factory()->the_hole_value()); |
} |
ASSERT(prop->key()->AsLiteral() != NULL && |
prop->key()->AsLiteral()->handle()->IsSmi()); |
__ Set(ecx, Immediate(prop->key()->AsLiteral()->handle())); |
- Handle<Code> ic(Builtins::builtin( |
- is_strict_mode() ? Builtins::KeyedStoreIC_Initialize_Strict |
- : Builtins::KeyedStoreIC_Initialize)); |
+ Handle<Code> ic(isolate()->builtins()->builtin(is_strict_mode() |
+ ? Builtins::KeyedStoreIC_Initialize_Strict |
+ : Builtins::KeyedStoreIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
} |
} |
@@ -848,9 +850,9 @@ |
// ignore null and undefined in contrast to the specification; see |
// ECMA-262 section 12.6.4. |
VisitForAccumulatorValue(stmt->enumerable()); |
- __ cmp(eax, Factory::undefined_value()); |
+ __ cmp(eax, isolate()->factory()->undefined_value()); |
__ j(equal, &exit); |
- __ cmp(eax, Factory::null_value()); |
+ __ cmp(eax, isolate()->factory()->null_value()); |
__ j(equal, &exit); |
// Convert the object to a JS object. |
@@ -876,7 +878,7 @@ |
// Check that there are no elements. Register ecx contains the |
// current JS object we've reached through the prototype chain. |
__ cmp(FieldOperand(ecx, JSObject::kElementsOffset), |
- Factory::empty_fixed_array()); |
+ isolate()->factory()->empty_fixed_array()); |
__ j(not_equal, &call_runtime); |
// Check that instance descriptors are not empty so that we can |
@@ -884,7 +886,7 @@ |
// prototype load. |
__ mov(ebx, FieldOperand(ecx, HeapObject::kMapOffset)); |
__ mov(edx, FieldOperand(ebx, Map::kInstanceDescriptorsOffset)); |
- __ cmp(edx, Factory::empty_descriptor_array()); |
+ __ cmp(edx, isolate()->factory()->empty_descriptor_array()); |
__ j(equal, &call_runtime); |
// Check that there is an enum cache in the non-empty instance |
@@ -899,13 +901,13 @@ |
__ cmp(ecx, Operand(eax)); |
__ j(equal, &check_prototype); |
__ mov(edx, FieldOperand(edx, DescriptorArray::kEnumCacheBridgeCacheOffset)); |
- __ cmp(edx, Factory::empty_fixed_array()); |
+ __ cmp(edx, isolate()->factory()->empty_fixed_array()); |
__ j(not_equal, &call_runtime); |
// Load the prototype from the map and loop if non-null. |
__ bind(&check_prototype); |
__ mov(ecx, FieldOperand(ebx, Map::kPrototypeOffset)); |
- __ cmp(ecx, Factory::null_value()); |
+ __ cmp(ecx, isolate()->factory()->null_value()); |
__ j(not_equal, &next); |
// The enum cache is valid. Load the map of the object being |
@@ -923,7 +925,8 @@ |
// modification check. Otherwise, we got a fixed array, and we have |
// to do a slow check. |
NearLabel fixed_array; |
- __ cmp(FieldOperand(eax, HeapObject::kMapOffset), Factory::meta_map()); |
+ __ cmp(FieldOperand(eax, HeapObject::kMapOffset), |
+ isolate()->factory()->meta_map()); |
__ j(not_equal, &fixed_array); |
// We got a map in register eax. Get the enumeration cache from it. |
@@ -1029,8 +1032,8 @@ |
__ push(esi); |
__ push(Immediate(info)); |
__ push(Immediate(pretenure |
- ? Factory::true_value() |
- : Factory::false_value())); |
+ ? isolate()->factory()->true_value() |
+ : isolate()->factory()->false_value())); |
__ CallRuntime(Runtime::kNewClosure, 3); |
} |
context()->Plug(eax); |
@@ -1082,7 +1085,7 @@ |
__ bind(&next); |
// Terminate at global context. |
__ cmp(FieldOperand(temp, HeapObject::kMapOffset), |
- Immediate(Factory::global_context_map())); |
+ Immediate(isolate()->factory()->global_context_map())); |
__ j(equal, &fast); |
// Check that extension is NULL. |
__ cmp(ContextOperand(temp, Context::EXTENSION_INDEX), Immediate(0)); |
@@ -1098,7 +1101,8 @@ |
// load IC call. |
__ mov(eax, GlobalObjectOperand()); |
__ mov(ecx, slot->var()->name()); |
- Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
+ Builtins::LoadIC_Initialize)); |
RelocInfo::Mode mode = (typeof_state == INSIDE_TYPEOF) |
? RelocInfo::CODE_TARGET |
: RelocInfo::CODE_TARGET_CONTEXT; |
@@ -1159,9 +1163,9 @@ |
__ mov(eax, |
ContextSlotOperandCheckExtensions(potential_slot, slow)); |
if (potential_slot->var()->mode() == Variable::CONST) { |
- __ cmp(eax, Factory::the_hole_value()); |
+ __ cmp(eax, isolate()->factory()->the_hole_value()); |
__ j(not_equal, done); |
- __ mov(eax, Factory::undefined_value()); |
+ __ mov(eax, isolate()->factory()->undefined_value()); |
} |
__ jmp(done); |
} else if (rewrite != NULL) { |
@@ -1181,7 +1185,8 @@ |
ContextSlotOperandCheckExtensions(obj_proxy->var()->AsSlot(), |
slow)); |
__ mov(eax, Immediate(key_literal->handle())); |
- Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize)); |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
+ Builtins::KeyedLoadIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
__ jmp(done); |
} |
@@ -1204,7 +1209,8 @@ |
// object on the stack. |
__ mov(eax, GlobalObjectOperand()); |
__ mov(ecx, var->name()); |
- Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
+ Builtins::LoadIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET_CONTEXT); |
context()->Plug(eax); |
@@ -1234,9 +1240,9 @@ |
NearLabel done; |
MemOperand slot_operand = EmitSlotSearch(slot, eax); |
__ mov(eax, slot_operand); |
- __ cmp(eax, Factory::the_hole_value()); |
+ __ cmp(eax, isolate()->factory()->the_hole_value()); |
__ j(not_equal, &done); |
- __ mov(eax, Factory::undefined_value()); |
+ __ mov(eax, isolate()->factory()->undefined_value()); |
__ bind(&done); |
context()->Plug(eax); |
} else { |
@@ -1267,7 +1273,8 @@ |
__ mov(eax, Immediate(key_literal->handle())); |
// Do a keyed property load. |
- Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize)); |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
+ Builtins::KeyedLoadIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
// Drop key and object left on the stack by IC. |
@@ -1289,7 +1296,7 @@ |
int literal_offset = |
FixedArray::kHeaderSize + expr->literal_index() * kPointerSize; |
__ mov(ebx, FieldOperand(ecx, literal_offset)); |
- __ cmp(ebx, Factory::undefined_value()); |
+ __ cmp(ebx, isolate()->factory()->undefined_value()); |
__ j(not_equal, &materialized); |
// Create regexp literal using runtime function |
@@ -1372,7 +1379,7 @@ |
VisitForAccumulatorValue(value); |
__ mov(ecx, Immediate(key->handle())); |
__ mov(edx, Operand(esp, 0)); |
- Handle<Code> ic(Builtins::builtin( |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
is_strict_mode() ? Builtins::StoreIC_Initialize_Strict |
: Builtins::StoreIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
@@ -1426,12 +1433,13 @@ |
__ push(FieldOperand(ebx, JSFunction::kLiteralsOffset)); |
__ push(Immediate(Smi::FromInt(expr->literal_index()))); |
__ push(Immediate(expr->constant_elements())); |
- if (expr->constant_elements()->map() == Heap::fixed_cow_array_map()) { |
+ if (expr->constant_elements()->map() == |
+ isolate()->heap()->fixed_cow_array_map()) { |
ASSERT(expr->depth() == 1); |
FastCloneShallowArrayStub stub( |
FastCloneShallowArrayStub::COPY_ON_WRITE_ELEMENTS, length); |
__ CallStub(&stub); |
- __ IncrementCounter(&Counters::cow_arrays_created_stub, 1); |
+ __ IncrementCounter(isolate()->counters()->cow_arrays_created_stub(), 1); |
} else if (expr->depth() > 1) { |
__ CallRuntime(Runtime::kCreateArrayLiteral, 3); |
} else if (length > FastCloneShallowArrayStub::kMaximumClonedLength) { |
@@ -1616,14 +1624,16 @@ |
SetSourcePosition(prop->position()); |
Literal* key = prop->key()->AsLiteral(); |
__ mov(ecx, Immediate(key->handle())); |
- Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
+ Builtins::LoadIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
} |
void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) { |
SetSourcePosition(prop->position()); |
- Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize)); |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
+ Builtins::KeyedLoadIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
} |
@@ -1764,7 +1774,7 @@ |
__ mov(edx, eax); |
__ pop(eax); // Restore value. |
__ mov(ecx, prop->key()->AsLiteral()->handle()); |
- Handle<Code> ic(Builtins::builtin( |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
is_strict_mode() ? Builtins::StoreIC_Initialize_Strict |
: Builtins::StoreIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
@@ -1787,7 +1797,7 @@ |
__ pop(edx); |
} |
__ pop(eax); // Restore value. |
- Handle<Code> ic(Builtins::builtin( |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
is_strict_mode() ? Builtins::KeyedStoreIC_Initialize_Strict |
: Builtins::KeyedStoreIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
@@ -1813,7 +1823,7 @@ |
// ecx, and the global object on the stack. |
__ mov(ecx, var->name()); |
__ mov(edx, GlobalObjectOperand()); |
- Handle<Code> ic(Builtins::builtin( |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
is_strict_mode() ? Builtins::StoreIC_Initialize_Strict |
: Builtins::StoreIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET_CONTEXT); |
@@ -1832,14 +1842,14 @@ |
break; |
case Slot::LOCAL: |
__ mov(edx, Operand(ebp, SlotOffset(slot))); |
- __ cmp(edx, Factory::the_hole_value()); |
+ __ cmp(edx, isolate()->factory()->the_hole_value()); |
__ j(not_equal, &skip); |
__ mov(Operand(ebp, SlotOffset(slot)), eax); |
break; |
case Slot::CONTEXT: { |
__ mov(ecx, ContextOperand(esi, Context::FCONTEXT_INDEX)); |
__ mov(edx, ContextOperand(ecx, slot->index())); |
- __ cmp(edx, Factory::the_hole_value()); |
+ __ cmp(edx, isolate()->factory()->the_hole_value()); |
__ j(not_equal, &skip); |
__ mov(ContextOperand(ecx, slot->index()), eax); |
int offset = Context::SlotOffset(slot->index()); |
@@ -1916,7 +1926,7 @@ |
} else { |
__ pop(edx); |
} |
- Handle<Code> ic(Builtins::builtin( |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
is_strict_mode() ? Builtins::StoreIC_Initialize_Strict |
: Builtins::StoreIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
@@ -1956,7 +1966,7 @@ |
} |
// Record source code position before IC call. |
SetSourcePosition(expr->position()); |
- Handle<Code> ic(Builtins::builtin( |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
is_strict_mode() ? Builtins::KeyedStoreIC_Initialize_Strict |
: Builtins::KeyedStoreIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
@@ -2008,7 +2018,8 @@ |
// Record source position of the IC call. |
SetSourcePosition(expr->position()); |
InLoopFlag in_loop = (loop_depth() > 0) ? IN_LOOP : NOT_IN_LOOP; |
- Handle<Code> ic = StubCache::ComputeCallInitialize(arg_count, in_loop); |
+ Handle<Code> ic = isolate()->stub_cache()->ComputeCallInitialize( |
+ arg_count, in_loop); |
EmitCallIC(ic, mode); |
RecordJSReturnSite(expr); |
// Restore context register. |
@@ -2040,7 +2051,8 @@ |
// Record source position of the IC call. |
SetSourcePosition(expr->position()); |
InLoopFlag in_loop = (loop_depth() > 0) ? IN_LOOP : NOT_IN_LOOP; |
- Handle<Code> ic = StubCache::ComputeKeyedCallInitialize(arg_count, in_loop); |
+ Handle<Code> ic = isolate()->stub_cache()->ComputeKeyedCallInitialize( |
+ arg_count, in_loop); |
__ mov(ecx, Operand(esp, (arg_count + 1) * kPointerSize)); // Key. |
EmitCallIC(ic, mode); |
RecordJSReturnSite(expr); |
@@ -2077,7 +2089,7 @@ |
if (arg_count > 0) { |
__ push(Operand(esp, arg_count * kPointerSize)); |
} else { |
- __ push(Immediate(Factory::undefined_value())); |
+ __ push(Immediate(FACTORY->undefined_value())); |
} |
// Push the receiver of the enclosing function. |
@@ -2113,7 +2125,7 @@ |
{ PreservePositionScope pos_scope(masm()->positions_recorder()); |
VisitForStackValue(fun); |
// Reserved receiver slot. |
- __ push(Immediate(Factory::undefined_value())); |
+ __ push(Immediate(isolate()->factory()->undefined_value())); |
// Push the arguments. |
for (int i = 0; i < arg_count; i++) { |
@@ -2232,7 +2244,8 @@ |
// Record source code position for IC call. |
SetSourcePosition(prop->position()); |
- Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize)); |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
+ Builtins::KeyedLoadIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
// Push result (function). |
__ push(eax); |
@@ -2253,7 +2266,7 @@ |
// also use the full code generator. |
FunctionLiteral* lit = fun->AsFunctionLiteral(); |
if (lit != NULL && |
- lit->name()->Equals(Heap::empty_string()) && |
+ lit->name()->Equals(isolate()->heap()->empty_string()) && |
loop_depth() == 0) { |
lit->set_try_full_codegen(true); |
} |
@@ -2300,7 +2313,8 @@ |
__ Set(eax, Immediate(arg_count)); |
__ mov(edi, Operand(esp, arg_count * kPointerSize)); |
- Handle<Code> construct_builtin(Builtins::builtin(Builtins::JSConstructCall)); |
+ Handle<Code> construct_builtin(isolate()->builtins()->builtin( |
+ Builtins::JSConstructCall)); |
__ call(construct_builtin, RelocInfo::CONSTRUCT_CALL); |
context()->Plug(eax); |
} |
@@ -2360,7 +2374,7 @@ |
__ test(eax, Immediate(kSmiTagMask)); |
__ j(zero, if_false); |
- __ cmp(eax, Factory::null_value()); |
+ __ cmp(eax, isolate()->factory()->null_value()); |
__ j(equal, if_true); |
__ mov(ebx, FieldOperand(eax, HeapObject::kMapOffset)); |
// Undetectable objects behave like undefined when tested with typeof. |
@@ -2639,17 +2653,17 @@ |
// Functions have class 'Function'. |
__ bind(&function); |
- __ mov(eax, Factory::function_class_symbol()); |
+ __ mov(eax, isolate()->factory()->function_class_symbol()); |
__ jmp(&done); |
// Objects with a non-function constructor have class 'Object'. |
__ bind(&non_function_constructor); |
- __ mov(eax, Factory::Object_symbol()); |
+ __ mov(eax, isolate()->factory()->Object_symbol()); |
__ jmp(&done); |
// Non-JS objects have class null. |
__ bind(&null); |
- __ mov(eax, Factory::null_value()); |
+ __ mov(eax, isolate()->factory()->null_value()); |
// All done. |
__ bind(&done); |
@@ -2675,7 +2689,7 @@ |
} |
#endif |
// Finally, we're expected to leave a value on the top of the stack. |
- __ mov(eax, Factory::undefined_value()); |
+ __ mov(eax, isolate()->factory()->undefined_value()); |
context()->Plug(eax); |
} |
@@ -2703,7 +2717,7 @@ |
// by computing: |
// ( 1.(20 0s)(32 random bits) x 2^20 ) - (1.0 x 2^20)). |
// This is implemented on both SSE2 and FPU. |
- if (CpuFeatures::IsSupported(SSE2)) { |
+ if (isolate()->cpu_features()->IsSupported(SSE2)) { |
CpuFeatures::Scope fscope(SSE2); |
__ mov(ebx, Immediate(0x49800000)); // 1.0 x 2^20 as single. |
__ movd(xmm1, Operand(ebx)); |
@@ -2872,13 +2886,13 @@ |
__ bind(&index_out_of_range); |
// When the index is out of range, the spec requires us to return |
// NaN. |
- __ Set(result, Immediate(Factory::nan_value())); |
+ __ Set(result, Immediate(isolate()->factory()->nan_value())); |
__ jmp(&done); |
__ bind(&need_conversion); |
// Move the undefined value into the result register, which will |
// trigger conversion. |
- __ Set(result, Immediate(Factory::undefined_value())); |
+ __ Set(result, Immediate(isolate()->factory()->undefined_value())); |
__ jmp(&done); |
NopRuntimeCallHelper call_helper; |
@@ -2921,7 +2935,7 @@ |
__ bind(&index_out_of_range); |
// When the index is out of range, the spec requires us to return |
// the empty string. |
- __ Set(result, Immediate(Factory::empty_string())); |
+ __ Set(result, Immediate(isolate()->factory()->empty_string())); |
__ jmp(&done); |
__ bind(&need_conversion); |
@@ -3060,7 +3074,7 @@ |
// Check the object's elements are in fast case and writable. |
__ mov(elements, FieldOperand(object, JSObject::kElementsOffset)); |
__ cmp(FieldOperand(elements, HeapObject::kMapOffset), |
- Immediate(Factory::fixed_array_map())); |
+ Immediate(isolate()->factory()->fixed_array_map())); |
__ j(not_equal, &slow_case); |
// Check that both indices are smis. |
@@ -3098,7 +3112,7 @@ |
__ bind(&new_space); |
// We are done. Drop elements from the stack, and return undefined. |
__ add(Operand(esp), Immediate(3 * kPointerSize)); |
- __ mov(eax, Factory::undefined_value()); |
+ __ mov(eax, isolate()->factory()->undefined_value()); |
__ jmp(&done); |
__ bind(&slow_case); |
@@ -3116,10 +3130,10 @@ |
int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->handle()))->value(); |
Handle<FixedArray> jsfunction_result_caches( |
- Top::global_context()->jsfunction_result_caches()); |
+ isolate()->global_context()->jsfunction_result_caches()); |
if (jsfunction_result_caches->length() <= cache_id) { |
__ Abort("Attempt to use undefined cache."); |
- __ mov(eax, Factory::undefined_value()); |
+ __ mov(eax, isolate()->factory()->undefined_value()); |
context()->Plug(eax); |
return; |
} |
@@ -3176,7 +3190,8 @@ |
__ and_(Operand(tmp), right); |
__ test(Operand(tmp), Immediate(kSmiTagMask)); |
__ j(zero, &fail); |
- __ CmpObjectType(left, JS_REGEXP_TYPE, tmp); |
+ __ mov(tmp, FieldOperand(left, HeapObject::kMapOffset)); |
+ __ CmpInstanceType(tmp, JS_REGEXP_TYPE); |
__ j(not_equal, &fail); |
__ cmp(tmp, FieldOperand(right, HeapObject::kMapOffset)); |
__ j(not_equal, &fail); |
@@ -3184,10 +3199,10 @@ |
__ cmp(tmp, FieldOperand(right, JSRegExp::kDataOffset)); |
__ j(equal, &ok); |
__ bind(&fail); |
- __ mov(eax, Immediate(Factory::false_value())); |
+ __ mov(eax, Immediate(isolate()->factory()->false_value())); |
__ jmp(&done); |
__ bind(&ok); |
- __ mov(eax, Immediate(Factory::true_value())); |
+ __ mov(eax, Immediate(isolate()->factory()->true_value())); |
__ bind(&done); |
context()->Plug(eax); |
@@ -3280,7 +3295,7 @@ |
__ mov(array_length, FieldOperand(array, JSArray::kLengthOffset)); |
__ SmiUntag(array_length); |
__ j(not_zero, &non_trivial_array); |
- __ mov(result_operand, Factory::empty_string()); |
+ __ mov(result_operand, FACTORY->empty_string()); |
__ jmp(&done); |
// Save the array length. |
@@ -3491,7 +3506,7 @@ |
__ bind(&bailout); |
- __ mov(result_operand, Factory::undefined_value()); |
+ __ mov(result_operand, FACTORY->undefined_value()); |
__ bind(&done); |
__ mov(eax, result_operand); |
// Drop temp values from the stack, and restore context register. |
@@ -3529,7 +3544,8 @@ |
// Call the JS runtime function via a call IC. |
__ Set(ecx, Immediate(expr->name())); |
InLoopFlag in_loop = (loop_depth() > 0) ? IN_LOOP : NOT_IN_LOOP; |
- Handle<Code> ic = StubCache::ComputeCallInitialize(arg_count, in_loop); |
+ Handle<Code> ic = isolate()->stub_cache()->ComputeCallInitialize( |
+ arg_count, in_loop); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
// Restore context register. |
__ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); |
@@ -3595,7 +3611,7 @@ |
case Token::VOID: { |
Comment cmnt(masm_, "[ UnaryOperation (VOID)"); |
VisitForEffect(expr->expression()); |
- context()->Plug(Factory::undefined_value()); |
+ context()->Plug(isolate()->factory()->undefined_value()); |
break; |
} |
@@ -3843,7 +3859,7 @@ |
case NAMED_PROPERTY: { |
__ mov(ecx, prop->key()->AsLiteral()->handle()); |
__ pop(edx); |
- Handle<Code> ic(Builtins::builtin( |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
is_strict_mode() ? Builtins::StoreIC_Initialize_Strict |
: Builtins::StoreIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
@@ -3860,7 +3876,7 @@ |
case KEYED_PROPERTY: { |
__ pop(ecx); |
__ pop(edx); |
- Handle<Code> ic(Builtins::builtin( |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
is_strict_mode() ? Builtins::KeyedStoreIC_Initialize_Strict |
: Builtins::KeyedStoreIC_Initialize)); |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
@@ -3888,7 +3904,8 @@ |
Comment cmnt(masm_, "Global variable"); |
__ mov(eax, GlobalObjectOperand()); |
__ mov(ecx, Immediate(proxy->name())); |
- Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); |
+ Handle<Code> ic(isolate()->builtins()->builtin( |
+ Builtins::LoadIC_Initialize)); |
// Use a regular load, not a contextual load, to avoid a reference |
// error. |
EmitCallIC(ic, RelocInfo::CODE_TARGET); |
@@ -3941,12 +3958,12 @@ |
} |
PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false); |
- if (check->Equals(Heap::number_symbol())) { |
+ if (check->Equals(isolate()->heap()->number_symbol())) { |
__ JumpIfSmi(eax, if_true); |
__ cmp(FieldOperand(eax, HeapObject::kMapOffset), |
- Factory::heap_number_map()); |
+ isolate()->factory()->heap_number_map()); |
Split(equal, if_true, if_false, fall_through); |
- } else if (check->Equals(Heap::string_symbol())) { |
+ } else if (check->Equals(isolate()->heap()->string_symbol())) { |
__ JumpIfSmi(eax, if_false); |
__ CmpObjectType(eax, FIRST_NONSTRING_TYPE, edx); |
__ j(above_equal, if_false); |
@@ -3954,13 +3971,13 @@ |
__ test_b(FieldOperand(edx, Map::kBitFieldOffset), |
1 << Map::kIsUndetectable); |
Split(zero, if_true, if_false, fall_through); |
- } else if (check->Equals(Heap::boolean_symbol())) { |
- __ cmp(eax, Factory::true_value()); |
+ } else if (check->Equals(isolate()->heap()->boolean_symbol())) { |
+ __ cmp(eax, isolate()->factory()->true_value()); |
__ j(equal, if_true); |
- __ cmp(eax, Factory::false_value()); |
+ __ cmp(eax, isolate()->factory()->false_value()); |
Split(equal, if_true, if_false, fall_through); |
- } else if (check->Equals(Heap::undefined_symbol())) { |
- __ cmp(eax, Factory::undefined_value()); |
+ } else if (check->Equals(isolate()->heap()->undefined_symbol())) { |
+ __ cmp(eax, isolate()->factory()->undefined_value()); |
__ j(equal, if_true); |
__ JumpIfSmi(eax, if_false); |
// Check for undetectable objects => true. |
@@ -3968,13 +3985,13 @@ |
__ movzx_b(ecx, FieldOperand(edx, Map::kBitFieldOffset)); |
__ test(ecx, Immediate(1 << Map::kIsUndetectable)); |
Split(not_zero, if_true, if_false, fall_through); |
- } else if (check->Equals(Heap::function_symbol())) { |
+ } else if (check->Equals(isolate()->heap()->function_symbol())) { |
__ JumpIfSmi(eax, if_false); |
__ CmpObjectType(eax, FIRST_FUNCTION_CLASS_TYPE, edx); |
Split(above_equal, if_true, if_false, fall_through); |
- } else if (check->Equals(Heap::object_symbol())) { |
+ } else if (check->Equals(isolate()->heap()->object_symbol())) { |
__ JumpIfSmi(eax, if_false); |
- __ cmp(eax, Factory::null_value()); |
+ __ cmp(eax, isolate()->factory()->null_value()); |
__ j(equal, if_true); |
__ CmpObjectType(eax, FIRST_JS_OBJECT_TYPE, edx); |
__ j(below, if_false); |
@@ -4022,7 +4039,7 @@ |
VisitForStackValue(expr->right()); |
__ InvokeBuiltin(Builtins::IN, CALL_FUNCTION); |
PrepareForBailoutBeforeSplit(TOS_REG, false, NULL, NULL); |
- __ cmp(eax, Factory::true_value()); |
+ __ cmp(eax, isolate()->factory()->true_value()); |
Split(equal, if_true, if_false, fall_through); |
break; |
@@ -4115,12 +4132,12 @@ |
VisitForAccumulatorValue(expr->expression()); |
PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false); |
- __ cmp(eax, Factory::null_value()); |
+ __ cmp(eax, isolate()->factory()->null_value()); |
if (expr->is_strict()) { |
Split(equal, if_true, if_false, fall_through); |
} else { |
__ j(equal, if_true); |
- __ cmp(eax, Factory::undefined_value()); |
+ __ cmp(eax, isolate()->factory()->undefined_value()); |
__ j(equal, if_true); |
__ test(eax, Immediate(kSmiTagMask)); |
__ j(zero, if_false); |
@@ -4155,16 +4172,16 @@ |
mode == RelocInfo::CODE_TARGET_CONTEXT); |
switch (ic->kind()) { |
case Code::LOAD_IC: |
- __ IncrementCounter(&Counters::named_load_full, 1); |
+ __ IncrementCounter(isolate()->counters()->named_load_full(), 1); |
break; |
case Code::KEYED_LOAD_IC: |
- __ IncrementCounter(&Counters::keyed_load_full, 1); |
+ __ IncrementCounter(isolate()->counters()->keyed_load_full(), 1); |
break; |
case Code::STORE_IC: |
- __ IncrementCounter(&Counters::named_store_full, 1); |
+ __ IncrementCounter(isolate()->counters()->named_store_full(), 1); |
break; |
case Code::KEYED_STORE_IC: |
- __ IncrementCounter(&Counters::keyed_store_full, 1); |
+ __ IncrementCounter(isolate()->counters()->keyed_store_full(), 1); |
default: |
break; |
} |
@@ -4198,16 +4215,16 @@ |
void FullCodeGenerator::EmitCallIC(Handle<Code> ic, JumpPatchSite* patch_site) { |
switch (ic->kind()) { |
case Code::LOAD_IC: |
- __ IncrementCounter(&Counters::named_load_full, 1); |
+ __ IncrementCounter(COUNTERS->named_load_full(), 1); |
break; |
case Code::KEYED_LOAD_IC: |
- __ IncrementCounter(&Counters::keyed_load_full, 1); |
+ __ IncrementCounter(COUNTERS->keyed_load_full(), 1); |
break; |
case Code::STORE_IC: |
- __ IncrementCounter(&Counters::named_store_full, 1); |
+ __ IncrementCounter(COUNTERS->named_store_full(), 1); |
break; |
case Code::KEYED_STORE_IC: |
- __ IncrementCounter(&Counters::keyed_store_full, 1); |
+ __ IncrementCounter(COUNTERS->keyed_store_full(), 1); |
default: |
break; |
} |