Index: src/handles.cc |
diff --git a/src/handles.cc b/src/handles.cc |
index bcd79b08816477f947defb8da93e0774f7284089..97a06d989e0e5fd036bcc53c971502e071962dff 100644 |
--- a/src/handles.cc |
+++ b/src/handles.cc |
@@ -132,14 +132,14 @@ Address HandleScope::current_limit_address() { |
Handle<FixedArray> AddKeysFromJSArray(Handle<FixedArray> content, |
Handle<JSArray> array) { |
- CALL_HEAP_FUNCTION(content->GetHeap()->isolate(), |
+ CALL_HEAP_FUNCTION(content->GetIsolate(), |
content->AddKeysFromJSArray(*array), FixedArray); |
} |
Handle<FixedArray> UnionOfKeys(Handle<FixedArray> first, |
Handle<FixedArray> second) { |
- CALL_HEAP_FUNCTION(first->GetHeap()->isolate(), |
+ CALL_HEAP_FUNCTION(first->GetIsolate(), |
first->UnionOfKeys(*second), FixedArray); |
} |
@@ -148,7 +148,7 @@ Handle<JSGlobalProxy> ReinitializeJSGlobalProxy( |
Handle<JSFunction> constructor, |
Handle<JSGlobalProxy> global) { |
CALL_HEAP_FUNCTION( |
- constructor->GetHeap()->isolate(), |
+ constructor->GetIsolate(), |
constructor->GetHeap()->ReinitializeJSGlobalProxy(*constructor, *global), |
JSGlobalProxy); |
} |
@@ -174,7 +174,7 @@ void SetExpectedNofProperties(Handle<JSFunction> func, int nof) { |
void SetPrototypeProperty(Handle<JSFunction> func, Handle<JSObject> value) { |
- CALL_HEAP_FUNCTION_VOID(func->GetHeap()->isolate(), |
+ CALL_HEAP_FUNCTION_VOID(func->GetIsolate(), |
func->SetPrototype(*value)); |
} |
@@ -207,7 +207,7 @@ void SetExpectedNofPropertiesFromEstimate(Handle<SharedFunctionInfo> shared, |
void NormalizeProperties(Handle<JSObject> object, |
PropertyNormalizationMode mode, |
int expected_additional_properties) { |
- CALL_HEAP_FUNCTION_VOID(object->GetHeap()->isolate(), |
+ CALL_HEAP_FUNCTION_VOID(object->GetIsolate(), |
object->NormalizeProperties( |
mode, |
expected_additional_properties)); |
@@ -215,7 +215,7 @@ void NormalizeProperties(Handle<JSObject> object, |
void NormalizeElements(Handle<JSObject> object) { |
- CALL_HEAP_FUNCTION_VOID(object->GetHeap()->isolate(), |
+ CALL_HEAP_FUNCTION_VOID(object->GetIsolate(), |
object->NormalizeElements()); |
} |
@@ -223,7 +223,7 @@ void NormalizeElements(Handle<JSObject> object) { |
void TransformToFastProperties(Handle<JSObject> object, |
int unused_property_fields) { |
CALL_HEAP_FUNCTION_VOID( |
- object->GetHeap()->isolate(), |
+ object->GetIsolate(), |
object->TransformToFastProperties(unused_property_fields)); |
} |
@@ -250,7 +250,7 @@ Handle<String> FlattenGetString(Handle<String> string) { |
Handle<Object> SetPrototype(Handle<JSFunction> function, |
Handle<Object> prototype) { |
ASSERT(function->should_have_prototype()); |
- CALL_HEAP_FUNCTION(function->GetHeap()->isolate(), |
+ CALL_HEAP_FUNCTION(function->GetIsolate(), |
Accessors::FunctionSetPrototype(*function, |
*prototype, |
NULL), |
@@ -263,7 +263,7 @@ Handle<Object> SetProperty(Handle<JSObject> object, |
Handle<Object> value, |
PropertyAttributes attributes, |
StrictModeFlag strict_mode) { |
- CALL_HEAP_FUNCTION(object->GetHeap()->isolate(), |
+ CALL_HEAP_FUNCTION(object->GetIsolate(), |
object->SetProperty(*key, *value, attributes, strict_mode), |
Object); |
} |
@@ -331,10 +331,11 @@ void SetLocalPropertyNoThrow(Handle<JSObject> object, |
Handle<String> key, |
Handle<Object> value, |
PropertyAttributes attributes) { |
- ASSERT(!object->GetIsolate()->has_pending_exception()); |
+ Isolate* isolate = object->GetIsolate(); |
+ ASSERT(!isolate->has_pending_exception()); |
CHECK(!SetLocalPropertyIgnoreAttributes( |
object, key, value, attributes).is_null()); |
- CHECK(!object->GetIsolate()->has_pending_exception()); |
+ CHECK(!isolate->has_pending_exception()); |
} |
@@ -411,7 +412,7 @@ Handle<Object> GetHiddenProperties(Handle<JSObject> obj, |
Isolate* isolate = obj->GetIsolate(); |
Object* holder = obj->BypassGlobalProxy(); |
if (holder->IsUndefined()) return isolate->factory()->undefined_value(); |
- obj = Handle<JSObject>(JSObject::cast(holder)); |
+ obj = Handle<JSObject>(JSObject::cast(holder), isolate); |
if (obj->HasFastProperties()) { |
// If the object has fast properties, check whether the first slot |
@@ -423,7 +424,8 @@ Handle<Object> GetHiddenProperties(Handle<JSObject> obj, |
(descriptors->GetKey(0) == isolate->heap()->hidden_symbol()) && |
descriptors->IsProperty(0)) { |
ASSERT(descriptors->GetType(0) == FIELD); |
- return Handle<Object>(obj->FastPropertyAt(descriptors->GetFieldIndex(0))); |
+ return Handle<Object>(obj->FastPropertyAt(descriptors->GetFieldIndex(0)), |
+ isolate); |
} |
} |
@@ -536,19 +538,19 @@ static void ClearWrapperCache(Persistent<v8::Value> handle, void*) { |
Proxy* proxy = Script::cast(wrapper->value())->wrapper(); |
ASSERT(proxy->proxy() == reinterpret_cast<Address>(cache.location())); |
proxy->set_proxy(0); |
- Isolate::Current()->global_handles()->Destroy(cache.location()); |
- COUNTERS->script_wrappers()->Decrement(); |
+ Isolate* isolate = Isolate::Current(); |
+ isolate->global_handles()->Destroy(cache.location()); |
+ isolate->counters()->script_wrappers()->Decrement(); |
} |
Handle<JSValue> GetScriptWrapper(Handle<Script> script) { |
- Isolate* isolate = Isolate::Current(); |
if (script->wrapper()->proxy() != NULL) { |
// Return the script wrapper directly from the cache. |
return Handle<JSValue>( |
reinterpret_cast<JSValue**>(script->wrapper()->proxy())); |
} |
- |
+ Isolate* isolate = Isolate::Current(); |
// Construct a new script wrapper. |
isolate->counters()->script_wrappers()->Increment(); |
Handle<JSFunction> constructor = isolate->script_function(); |
@@ -572,21 +574,22 @@ Handle<JSValue> GetScriptWrapper(Handle<Script> script) { |
void InitScriptLineEnds(Handle<Script> script) { |
if (!script->line_ends()->IsUndefined()) return; |
+ Isolate* isolate = script->GetIsolate(); |
+ |
if (!script->source()->IsString()) { |
ASSERT(script->source()->IsUndefined()); |
- Handle<FixedArray> empty = |
- script->GetIsolate()->factory()->NewFixedArray(0); |
+ Handle<FixedArray> empty = isolate->factory()->NewFixedArray(0); |
script->set_line_ends(*empty); |
ASSERT(script->line_ends()->IsFixedArray()); |
return; |
} |
- Handle<String> src(String::cast(script->source())); |
+ Handle<String> src(String::cast(script->source()), isolate); |
Handle<FixedArray> array = CalculateLineEnds(src, true); |
- if (*array != HEAP->empty_fixed_array()) { |
- array->set_map(HEAP->fixed_cow_array_map()); |
+ if (*array != isolate->heap()->empty_fixed_array()) { |
+ array->set_map(isolate->heap()->fixed_cow_array_map()); |
} |
script->set_line_ends(*array); |
@@ -625,9 +628,9 @@ Handle<FixedArray> CalculateLineEnds(Handle<String> src, |
// length of (unpacked) code. |
int line_count_estimate = src->length() >> 4; |
List<int> line_ends(line_count_estimate); |
+ Isolate* isolate = src->GetIsolate(); |
{ |
AssertNoAllocation no_heap_allocation; // ensure vectors stay valid. |
- Isolate* isolate = src->GetIsolate(); |
// Dispatch on type of strings. |
if (src->IsAsciiRepresentation()) { |
CalculateLineEnds(isolate, |
@@ -642,7 +645,7 @@ Handle<FixedArray> CalculateLineEnds(Handle<String> src, |
} |
} |
int line_count = line_ends.length(); |
- Handle<FixedArray> array = FACTORY->NewFixedArray(line_count); |
+ Handle<FixedArray> array = isolate->factory()->NewFixedArray(line_count); |
for (int i = 0; i < line_count; i++) { |
array->set(i, Smi::FromInt(line_ends[i])); |
} |
@@ -764,18 +767,18 @@ Handle<FixedArray> GetKeysInFixedArrayFor(Handle<JSObject> object, |
USE(ContainsOnlyValidKeys); |
Isolate* isolate = object->GetIsolate(); |
Handle<FixedArray> content = isolate->factory()->empty_fixed_array(); |
- Handle<JSObject> arguments_boilerplate = |
- Handle<JSObject>( |
- isolate->context()->global_context()->arguments_boilerplate()); |
- Handle<JSFunction> arguments_function = |
- Handle<JSFunction>( |
- JSFunction::cast(arguments_boilerplate->map()->constructor())); |
+ Handle<JSObject> arguments_boilerplate = Handle<JSObject>( |
+ isolate->context()->global_context()->arguments_boilerplate(), |
+ isolate); |
+ Handle<JSFunction> arguments_function = Handle<JSFunction>( |
+ JSFunction::cast(arguments_boilerplate->map()->constructor()), |
+ isolate); |
// Only collect keys if access is permitted. |
for (Handle<Object> p = object; |
*p != isolate->heap()->null_value(); |
- p = Handle<Object>(p->GetPrototype())) { |
- Handle<JSObject> current(JSObject::cast(*p)); |
+ p = Handle<Object>(p->GetPrototype(), isolate)) { |
+ Handle<JSObject> current(JSObject::cast(*p), isolate); |
// Check access rights if required. |
if (current->IsAccessCheckNeeded() && |
@@ -858,14 +861,15 @@ Handle<FixedArray> GetEnumPropertyKeys(Handle<JSObject> object, |
if (object->map()->instance_descriptors()->HasEnumCache()) { |
isolate->counters()->enum_cache_hits()->Increment(); |
DescriptorArray* desc = object->map()->instance_descriptors(); |
- return Handle<FixedArray>(FixedArray::cast(desc->GetEnumCache())); |
+ return Handle<FixedArray>(FixedArray::cast(desc->GetEnumCache()), |
+ isolate); |
} |
isolate->counters()->enum_cache_misses()->Increment(); |
int num_enum = object->NumberOfEnumProperties(); |
Handle<FixedArray> storage = isolate->factory()->NewFixedArray(num_enum); |
Handle<FixedArray> sort_array = isolate->factory()->NewFixedArray(num_enum); |
Handle<DescriptorArray> descs = |
- Handle<DescriptorArray>(object->map()->instance_descriptors()); |
+ Handle<DescriptorArray>(object->map()->instance_descriptors(), isolate); |
for (int i = 0; i < descs->number_of_descriptors(); i++) { |
if (descs->IsProperty(i) && !descs->IsDontEnum(i)) { |
(*storage)->set(index, descs->GetKey(i)); |