| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 2710dac6f23035556e99fbacafa6222112c71937..bcb5730ab91a2f840f44031491ec3f7a58eb78da 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -154,7 +154,7 @@ void Object::Lookup(String* name, LookupResult* result) {
|
| MaybeObject* Object::GetPropertyWithReceiver(Object* receiver,
|
| String* name,
|
| PropertyAttributes* attributes) {
|
| - LookupResult result;
|
| + LookupResult result(name->GetIsolate());
|
| Lookup(name, &result);
|
| MaybeObject* value = GetProperty(receiver, &result, name, attributes);
|
| ASSERT(*attributes <= ABSENT);
|
| @@ -310,7 +310,7 @@ MaybeObject* JSObject::GetPropertyWithFailedAccessCheck(
|
| case FIELD:
|
| case CONSTANT_FUNCTION: {
|
| // Search ALL_CAN_READ accessors in prototype chain.
|
| - LookupResult r;
|
| + LookupResult r(GetIsolate());
|
| result->holder()->LookupRealNamedPropertyInPrototypes(name, &r);
|
| if (r.IsProperty()) {
|
| return GetPropertyWithFailedAccessCheck(receiver,
|
| @@ -323,7 +323,7 @@ MaybeObject* JSObject::GetPropertyWithFailedAccessCheck(
|
| case INTERCEPTOR: {
|
| // If the object has an interceptor, try real named properties.
|
| // No access check in GetPropertyAttributeWithInterceptor.
|
| - LookupResult r;
|
| + LookupResult r(GetIsolate());
|
| result->holder()->LookupRealNamedProperty(name, &r);
|
| if (r.IsProperty()) {
|
| return GetPropertyWithFailedAccessCheck(receiver,
|
| @@ -370,7 +370,7 @@ PropertyAttributes JSObject::GetPropertyAttributeWithFailedAccessCheck(
|
| case CONSTANT_FUNCTION: {
|
| if (!continue_search) break;
|
| // Search ALL_CAN_READ accessors in prototype chain.
|
| - LookupResult r;
|
| + LookupResult r(GetIsolate());
|
| result->holder()->LookupRealNamedPropertyInPrototypes(name, &r);
|
| if (r.IsProperty()) {
|
| return GetPropertyAttributeWithFailedAccessCheck(receiver,
|
| @@ -384,7 +384,7 @@ PropertyAttributes JSObject::GetPropertyAttributeWithFailedAccessCheck(
|
| case INTERCEPTOR: {
|
| // If the object has an interceptor, try real named properties.
|
| // No access check in GetPropertyAttributeWithInterceptor.
|
| - LookupResult r;
|
| + LookupResult r(GetIsolate());
|
| if (continue_search) {
|
| result->holder()->LookupRealNamedProperty(name, &r);
|
| } else {
|
| @@ -404,7 +404,7 @@ PropertyAttributes JSObject::GetPropertyAttributeWithFailedAccessCheck(
|
| }
|
| }
|
|
|
| - GetHeap()->isolate()->ReportFailedAccessCheck(this, v8::ACCESS_HAS);
|
| + GetIsolate()->ReportFailedAccessCheck(this, v8::ACCESS_HAS);
|
| return ABSENT;
|
| }
|
|
|
| @@ -1658,7 +1658,7 @@ MaybeObject* JSObject::SetPropertyPostInterceptor(
|
| PropertyAttributes attributes,
|
| StrictModeFlag strict_mode) {
|
| // Check local property, ignore interceptor.
|
| - LookupResult result;
|
| + LookupResult result(GetIsolate());
|
| LocalLookupRealNamedProperty(name, &result);
|
| if (result.IsFound()) {
|
| // An existing property, a map transition or a null descriptor was
|
| @@ -1840,7 +1840,7 @@ MaybeObject* JSReceiver::SetProperty(String* name,
|
| Object* value,
|
| PropertyAttributes attributes,
|
| StrictModeFlag strict_mode) {
|
| - LookupResult result;
|
| + LookupResult result(GetIsolate());
|
| LocalLookup(name, &result);
|
| return SetProperty(&result, name, value, attributes, strict_mode);
|
| }
|
| @@ -2006,9 +2006,9 @@ MaybeObject* JSObject::SetPropertyWithCallbackSetterInPrototypes(
|
| PropertyAttributes attributes,
|
| bool* found,
|
| StrictModeFlag strict_mode) {
|
| - LookupResult result;
|
| - LookupCallbackSetterInPrototypes(name, &result);
|
| Heap* heap = GetHeap();
|
| + LookupResult result(heap->isolate());
|
| + LookupCallbackSetterInPrototypes(name, &result);
|
| if (result.IsFound()) {
|
| *found = true;
|
| if (result.type() == CALLBACKS) {
|
| @@ -2020,7 +2020,7 @@ MaybeObject* JSObject::SetPropertyWithCallbackSetterInPrototypes(
|
| } else if (result.type() == HANDLER) {
|
| // We could not find a local property so let's check whether there is an
|
| // accessor that wants to handle the property.
|
| - LookupResult accessor_result;
|
| + LookupResult accessor_result(heap->isolate());
|
| LookupCallbackSetterInPrototypes(name, &accessor_result);
|
| if (accessor_result.IsFound()) {
|
| if (accessor_result.type() == CALLBACKS) {
|
| @@ -2423,7 +2423,7 @@ MaybeObject* JSObject::SetPropertyWithFailedAccessCheck(
|
| case INTERCEPTOR: {
|
| // Try lookup real named properties. Note that only property can be
|
| // set is callbacks marked as ALL_CAN_WRITE on the prototype chain.
|
| - LookupResult r;
|
| + LookupResult r(GetIsolate());
|
| LookupRealNamedProperty(name, &r);
|
| if (r.IsProperty()) {
|
| return SetPropertyWithFailedAccessCheck(&r,
|
| @@ -2441,10 +2441,10 @@ MaybeObject* JSObject::SetPropertyWithFailedAccessCheck(
|
| }
|
| }
|
|
|
| - Heap* heap = GetHeap();
|
| - HandleScope scope(heap->isolate());
|
| + Isolate* isolate = GetIsolate();
|
| + HandleScope scope(isolate);
|
| Handle<Object> value_handle(value);
|
| - heap->isolate()->ReportFailedAccessCheck(this, v8::ACCESS_SET);
|
| + isolate->ReportFailedAccessCheck(this, v8::ACCESS_SET);
|
| return *value_handle;
|
| }
|
|
|
| @@ -2865,12 +2865,12 @@ MaybeObject* JSObject::SetLocalPropertyIgnoreAttributes(
|
| // Make sure that the top context does not change when doing callbacks or
|
| // interceptor calls.
|
| AssertNoContextChange ncc;
|
| - LookupResult result;
|
| + Isolate* isolate = GetIsolate();
|
| + LookupResult result(isolate);
|
| LocalLookup(name, &result);
|
| // Check access rights if needed.
|
| if (IsAccessCheckNeeded()) {
|
| - Heap* heap = GetHeap();
|
| - if (!heap->isolate()->MayNamedAccess(this, name, v8::ACCESS_SET)) {
|
| + if (!isolate->MayNamedAccess(this, name, v8::ACCESS_SET)) {
|
| return SetPropertyWithFailedAccessCheck(&result,
|
| name,
|
| value,
|
| @@ -2941,7 +2941,7 @@ PropertyAttributes JSObject::GetPropertyAttributePostInterceptor(
|
| String* name,
|
| bool continue_search) {
|
| // Check local property, ignore interceptor.
|
| - LookupResult result;
|
| + LookupResult result(GetIsolate());
|
| LocalLookupRealNamedProperty(name, &result);
|
| if (result.IsProperty()) return result.GetAttributes();
|
|
|
| @@ -3017,7 +3017,7 @@ PropertyAttributes JSReceiver::GetPropertyAttributeWithReceiver(
|
| ? NONE : ABSENT;
|
| }
|
| // Named property.
|
| - LookupResult result;
|
| + LookupResult result(GetIsolate());
|
| Lookup(key, &result);
|
| return GetPropertyAttribute(receiver, &result, key, true);
|
| }
|
| @@ -3066,7 +3066,7 @@ PropertyAttributes JSReceiver::GetLocalPropertyAttribute(String* name) {
|
| return ABSENT;
|
| }
|
| // Named property.
|
| - LookupResult result;
|
| + LookupResult result(GetIsolate());
|
| LocalLookup(name, &result);
|
| return GetPropertyAttribute(this, &result, name, false);
|
| }
|
| @@ -3573,7 +3573,7 @@ MaybeObject* JSObject::SetHiddenPropertiesDictionary(
|
| MaybeObject* JSObject::DeletePropertyPostInterceptor(String* name,
|
| DeleteMode mode) {
|
| // Check local property, ignore interceptor.
|
| - LookupResult result;
|
| + LookupResult result(GetIsolate());
|
| LocalLookupRealNamedProperty(name, &result);
|
| if (!result.IsProperty()) return GetHeap()->true_value();
|
|
|
| @@ -3722,7 +3722,7 @@ MaybeObject* JSObject::DeleteProperty(String* name, DeleteMode mode) {
|
| if (name->AsArrayIndex(&index)) {
|
| return DeleteElement(index, mode);
|
| } else {
|
| - LookupResult result;
|
| + LookupResult result(isolate);
|
| LocalLookup(name, &result);
|
| if (!result.IsProperty()) return isolate->heap()->true_value();
|
| // Ignore attributes if forcing a deletion.
|
| @@ -4152,7 +4152,7 @@ MaybeObject* JSObject::DefineGetterSetter(String* name,
|
| }
|
| } else {
|
| // Lookup the name.
|
| - LookupResult result;
|
| + LookupResult result(heap->isolate());
|
| LocalLookup(name, &result);
|
| if (result.IsProperty()) {
|
| if (result.IsReadOnly()) return heap->undefined_value();
|
| @@ -4182,8 +4182,8 @@ MaybeObject* JSObject::DefineGetterSetter(String* name,
|
|
|
|
|
| bool JSObject::CanSetCallback(String* name) {
|
| - ASSERT(!IsAccessCheckNeeded()
|
| - || Isolate::Current()->MayNamedAccess(this, name, v8::ACCESS_SET));
|
| + ASSERT(!IsAccessCheckNeeded() ||
|
| + GetIsolate()->MayNamedAccess(this, name, v8::ACCESS_SET));
|
|
|
| // Check if there is an API defined callback object which prohibits
|
| // callback overwriting in this object or it's prototype chain.
|
| @@ -4191,7 +4191,7 @@ bool JSObject::CanSetCallback(String* name) {
|
| // certain accessors such as window.location should not be allowed
|
| // to be overwritten because allowing overwriting could potentially
|
| // cause security problems.
|
| - LookupResult callback_result;
|
| + LookupResult callback_result(GetIsolate());
|
| LookupCallback(name, &callback_result);
|
| if (callback_result.IsProperty()) {
|
| Object* obj = callback_result.GetCallbackObject();
|
| @@ -4388,7 +4388,7 @@ MaybeObject* JSObject::DefineAccessor(AccessorInfo* info) {
|
| }
|
| } else {
|
| // Lookup the name.
|
| - LookupResult result;
|
| + LookupResult result(isolate);
|
| LocalLookup(name, &result);
|
| // ES5 forbids turning a property into an accessor if it's not
|
| // configurable (that is IsDontDelete in ES3 and v8), see 8.6.1 (Table 5).
|
| @@ -4446,7 +4446,7 @@ Object* JSObject::LookupAccessor(String* name, bool is_getter) {
|
| for (Object* obj = this;
|
| obj != heap->null_value();
|
| obj = JSObject::cast(obj)->GetPrototype()) {
|
| - LookupResult result;
|
| + LookupResult result(heap->isolate());
|
| JSObject::cast(obj)->LocalLookup(name, &result);
|
| if (result.IsProperty()) {
|
| if (result.IsReadOnly()) return heap->undefined_value();
|
| @@ -7088,7 +7088,7 @@ bool SharedFunctionInfo::CanGenerateInlineConstructor(Object* prototype) {
|
| obj = obj->GetPrototype()) {
|
| JSObject* js_object = JSObject::cast(obj);
|
| for (int i = 0; i < this_property_assignments_count(); i++) {
|
| - LookupResult result;
|
| + LookupResult result(heap->isolate());
|
| String* name = GetThisPropertyAssignmentName(i);
|
| js_object->LocalLookupRealNamedProperty(name, &result);
|
| if (result.IsProperty() && result.type() == CALLBACKS) {
|
| @@ -9634,7 +9634,7 @@ MaybeObject* JSObject::GetPropertyPostInterceptor(
|
| String* name,
|
| PropertyAttributes* attributes) {
|
| // Check local property in holder, ignore interceptor.
|
| - LookupResult result;
|
| + LookupResult result(GetIsolate());
|
| LocalLookupRealNamedProperty(name, &result);
|
| if (result.IsProperty()) {
|
| return GetProperty(receiver, &result, name, attributes);
|
| @@ -9652,7 +9652,7 @@ MaybeObject* JSObject::GetLocalPropertyPostInterceptor(
|
| String* name,
|
| PropertyAttributes* attributes) {
|
| // Check local property in holder, ignore interceptor.
|
| - LookupResult result;
|
| + LookupResult result(GetIsolate());
|
| LocalLookupRealNamedProperty(name, &result);
|
| if (result.IsProperty()) {
|
| return GetProperty(receiver, &result, name, attributes);
|
| @@ -9703,15 +9703,15 @@ MaybeObject* JSObject::GetPropertyWithInterceptor(
|
|
|
| bool JSObject::HasRealNamedProperty(String* key) {
|
| // Check access rights if needed.
|
| + Isolate* isolate = GetIsolate();
|
| if (IsAccessCheckNeeded()) {
|
| - Heap* heap = GetHeap();
|
| - if (!heap->isolate()->MayNamedAccess(this, key, v8::ACCESS_HAS)) {
|
| - heap->isolate()->ReportFailedAccessCheck(this, v8::ACCESS_HAS);
|
| + if (!isolate->MayNamedAccess(this, key, v8::ACCESS_HAS)) {
|
| + isolate->ReportFailedAccessCheck(this, v8::ACCESS_HAS);
|
| return false;
|
| }
|
| }
|
|
|
| - LookupResult result;
|
| + LookupResult result(isolate);
|
| LocalLookupRealNamedProperty(key, &result);
|
| return result.IsProperty() && (result.type() != INTERCEPTOR);
|
| }
|
| @@ -9780,15 +9780,15 @@ bool JSObject::HasRealElementProperty(uint32_t index) {
|
|
|
| bool JSObject::HasRealNamedCallbackProperty(String* key) {
|
| // Check access rights if needed.
|
| + Isolate* isolate = GetIsolate();
|
| if (IsAccessCheckNeeded()) {
|
| - Heap* heap = GetHeap();
|
| - if (!heap->isolate()->MayNamedAccess(this, key, v8::ACCESS_HAS)) {
|
| - heap->isolate()->ReportFailedAccessCheck(this, v8::ACCESS_HAS);
|
| + if (!isolate->MayNamedAccess(this, key, v8::ACCESS_HAS)) {
|
| + isolate->ReportFailedAccessCheck(this, v8::ACCESS_HAS);
|
| return false;
|
| }
|
| }
|
|
|
| - LookupResult result;
|
| + LookupResult result(isolate);
|
| LocalLookupRealNamedProperty(key, &result);
|
| return result.IsProperty() && (result.type() == CALLBACKS);
|
| }
|
|
|