| 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));
|
|
|