Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 36ae11bbe697c7375c15c223d64c01278c937865..74909272002a5712b7da1cefe02e59f7e8ef304b 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -83,23 +83,19 @@ MaybeObject* Object::ToObject(Context* native_context) { |
} |
-MaybeObject* Object::ToObject() { |
+MaybeObject* Object::ToObject(Isolate* isolate) { |
if (IsJSReceiver()) { |
return this; |
} else if (IsNumber()) { |
- Isolate* isolate = Isolate::Current(); |
Context* native_context = isolate->context()->native_context(); |
return CreateJSValue(native_context->number_function(), this); |
} else if (IsBoolean()) { |
- Isolate* isolate = HeapObject::cast(this)->GetIsolate(); |
Context* native_context = isolate->context()->native_context(); |
return CreateJSValue(native_context->boolean_function(), this); |
} else if (IsString()) { |
- Isolate* isolate = HeapObject::cast(this)->GetIsolate(); |
Context* native_context = isolate->context()->native_context(); |
return CreateJSValue(native_context->string_function(), this); |
} else if (IsSymbol()) { |
- Isolate* isolate = HeapObject::cast(this)->GetIsolate(); |
Context* native_context = isolate->context()->native_context(); |
return CreateJSValue(native_context->symbol_function(), this); |
} |
@@ -135,7 +131,7 @@ void Object::Lookup(Name* name, LookupResult* result) { |
} else if (IsBoolean()) { |
holder = native_context->boolean_function()->instance_prototype(); |
} else { |
- Isolate::Current()->PushStackTraceAndDie( |
+ result->isolate()->PushStackTraceAndDie( |
0xDEAD0000, this, JSReceiver::cast(this)->map(), 0xDEAD0001); |
} |
} |
@@ -422,24 +418,22 @@ MaybeObject* JSProxy::GetPropertyWithHandler(Object* receiver_raw, |
} |
-Handle<Object> Object::GetProperty(Handle<Object> object, Handle<Name> name) { |
+Handle<Object> Object::GetProperty(Handle<Object> object, |
+ Handle<Name> name) { |
// TODO(rossberg): The index test should not be here but in the GetProperty |
// method (or somewhere else entirely). Needs more global clean-up. |
uint32_t index; |
+ Isolate* isolate = name->GetIsolate(); |
if (name->AsArrayIndex(&index)) |
- return GetElement(object, index); |
- Isolate* isolate = object->IsHeapObject() |
- ? Handle<HeapObject>::cast(object)->GetIsolate() |
- : Isolate::Current(); |
+ return GetElement(isolate, object, index); |
CALL_HEAP_FUNCTION(isolate, object->GetProperty(*name), Object); |
} |
-Handle<Object> Object::GetElement(Handle<Object> object, uint32_t index) { |
- Isolate* isolate = object->IsHeapObject() |
- ? Handle<HeapObject>::cast(object)->GetIsolate() |
- : Isolate::Current(); |
- CALL_HEAP_FUNCTION(isolate, object->GetElement(index), Object); |
+Handle<Object> Object::GetElement(Isolate* isolate, |
+ Handle<Object> object, |
+ uint32_t index) { |
+ CALL_HEAP_FUNCTION(isolate, object->GetElement(isolate, index), Object); |
} |
@@ -801,9 +795,7 @@ Handle<Object> Object::GetProperty(Handle<Object> object, |
LookupResult* result, |
Handle<Name> key, |
PropertyAttributes* attributes) { |
- Isolate* isolate = object->IsHeapObject() |
- ? Handle<HeapObject>::cast(object)->GetIsolate() |
- : Isolate::Current(); |
+ Isolate* isolate = result->isolate(); |
CALL_HEAP_FUNCTION( |
isolate, |
object->GetProperty(*receiver, result, *key, attributes), |
@@ -816,9 +808,7 @@ MaybeObject* Object::GetPropertyOrFail(Handle<Object> object, |
LookupResult* result, |
Handle<Name> key, |
PropertyAttributes* attributes) { |
- Isolate* isolate = object->IsHeapObject() |
- ? Handle<HeapObject>::cast(object)->GetIsolate() |
- : Isolate::Current(); |
+ Isolate* isolate = result->isolate(); |
CALL_HEAP_FUNCTION_PASS_EXCEPTION( |
isolate, |
object->GetProperty(*receiver, result, *key, attributes)); |
@@ -910,10 +900,9 @@ MaybeObject* Object::GetProperty(Object* receiver, |
} |
-MaybeObject* Object::GetElementWithReceiver(Object* receiver, uint32_t index) { |
- Isolate* isolate = IsSmi() |
- ? Isolate::Current() |
- : HeapObject::cast(this)->GetIsolate(); |
+MaybeObject* Object::GetElementWithReceiver(Isolate* isolate, |
+ Object* receiver, |
+ uint32_t index) { |
Heap* heap = isolate->heap(); |
Object* holder = this; |
@@ -4067,7 +4056,8 @@ MaybeObject* JSObject::SetLocalPropertyIgnoreAttributes( |
PropertyAttributes old_attributes = ABSENT; |
bool is_observed = FLAG_harmony_observation && self->map()->is_observed(); |
if (is_observed && lookup.IsProperty()) { |
- if (lookup.IsDataProperty()) old_value = Object::GetProperty(self, name); |
+ if (lookup.IsDataProperty()) old_value = |
+ Object::GetProperty(self, name); |
old_attributes = lookup.GetAttributes(); |
} |
@@ -5093,7 +5083,7 @@ Handle<Object> JSObject::DeleteElement(Handle<JSObject> object, |
if (should_enqueue_change_record) { |
old_value = object->GetLocalElementAccessorPair(index) != NULL |
? Handle<Object>::cast(factory->the_hole_value()) |
- : Object::GetElement(object, index); |
+ : Object::GetElement(isolate, object, index); |
} |
} |
@@ -6129,7 +6119,7 @@ void JSObject::DefineAccessor(Handle<JSObject> object, |
if (is_element) { |
preexists = object->HasLocalElement(index); |
if (preexists && object->GetLocalElementAccessorPair(index) == NULL) { |
- old_value = Object::GetElement(object, index); |
+ old_value = Object::GetElement(isolate, object, index); |
} |
} else { |
LookupResult lookup(isolate); |
@@ -10965,7 +10955,7 @@ static bool GetOldValue(Isolate* isolate, |
ASSERT(attributes != ABSENT); |
if (attributes == DONT_DELETE) return false; |
old_values->Add(object->GetLocalElementAccessorPair(index) == NULL |
- ? Object::GetElement(object, index) |
+ ? Object::GetElement(isolate, object, index) |
: Handle<Object>::cast(isolate->factory()->the_hole_value())); |
indices->Add(index); |
return true; |
@@ -12205,7 +12195,7 @@ MaybeObject* JSObject::SetElement(uint32_t index, |
if (old_attributes != ABSENT) { |
if (self->GetLocalElementAccessorPair(index) == NULL) |
- old_value = Object::GetElement(self, index); |
+ old_value = Object::GetElement(isolate, self, index); |
} else if (self->IsJSArray()) { |
// Store old array length in case adding an element grows the array. |
old_length_handle = handle(Handle<JSArray>::cast(self)->length(), isolate); |
@@ -12247,7 +12237,7 @@ MaybeObject* JSObject::SetElement(uint32_t index, |
} else if (old_value->IsTheHole()) { |
EnqueueChangeRecord(self, "reconfigured", name, old_value); |
} else { |
- Handle<Object> new_value = Object::GetElement(self, index); |
+ Handle<Object> new_value = Object::GetElement(isolate, self, index); |
bool value_changed = !old_value->SameValue(*new_value); |
if (old_attributes != new_attributes) { |
if (!value_changed) old_value = isolate->factory()->the_hole_value(); |
@@ -12575,7 +12565,7 @@ MaybeObject* JSObject::GetElementWithInterceptor(Object* receiver, |
Object* pt = holder_handle->GetPrototype(); |
if (pt == heap->null_value()) return heap->undefined_value(); |
- return pt->GetElementWithReceiver(*this_handle, index); |
+ return pt->GetElementWithReceiver(isolate, *this_handle, index); |
} |