| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 1e9d2cea660781b9b132e32b2718f224e4ad8a45..7f18ae01e23e1e858e74c2108d04ca0563282a51 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -47,7 +47,6 @@
|
| #include "safepoint-table.h"
|
| #include "string-stream.h"
|
| #include "utils.h"
|
| -#include "vm-state-inl.h"
|
|
|
| #ifdef ENABLE_DISASSEMBLER
|
| #include "disasm.h"
|
| @@ -375,14 +374,8 @@ MaybeObject* JSObject::GetPropertyWithCallback(Object* receiver,
|
| Handle<String> key(String::cast(name));
|
| LOG(isolate, ApiNamedPropertyAccess("load", self, name));
|
| PropertyCallbackArguments args(isolate, data->data(), self, this);
|
| - v8::Handle<v8::Value> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - ExternalCallbackScope call_scope(isolate,
|
| - v8::ToCData<Address>(fun_obj));
|
| - result = args.Call(call_fun, v8::Utils::ToLocal(key));
|
| - }
|
| + v8::Handle<v8::Value> result =
|
| + args.Call(call_fun, v8::Utils::ToLocal(key));
|
| RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| if (result.IsEmpty()) {
|
| return isolate->heap()->undefined_value();
|
| @@ -2736,18 +2729,13 @@ MaybeObject* JSObject::SetPropertyWithInterceptor(
|
| PropertyCallbackArguments args(isolate, interceptor->data(), this, this);
|
| v8::NamedPropertySetter setter =
|
| v8::ToCData<v8::NamedPropertySetter>(interceptor->setter());
|
| - v8::Handle<v8::Value> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - Handle<Object> value_unhole(value->IsTheHole() ?
|
| - isolate->heap()->undefined_value() :
|
| - value,
|
| - isolate);
|
| - result = args.Call(setter,
|
| - v8::Utils::ToLocal(name_handle),
|
| - v8::Utils::ToLocal(value_unhole));
|
| - }
|
| + Handle<Object> value_unhole(value->IsTheHole() ?
|
| + isolate->heap()->undefined_value() :
|
| + value,
|
| + isolate);
|
| + v8::Handle<v8::Value> result = args.Call(setter,
|
| + v8::Utils::ToLocal(name_handle),
|
| + v8::Utils::ToLocal(value_unhole));
|
| RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| if (!result.IsEmpty()) return *value_handle;
|
| }
|
| @@ -2846,17 +2834,11 @@ MaybeObject* JSObject::SetPropertyWithCallback(Object* structure,
|
| if (call_fun == NULL) return value;
|
| Handle<String> key(String::cast(name));
|
| LOG(isolate, ApiNamedPropertyAccess("store", this, name));
|
| - PropertyCallbackArguments
|
| - args(isolate, data->data(), this, JSObject::cast(holder));
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - ExternalCallbackScope call_scope(isolate,
|
| - v8::ToCData<Address>(call_obj));
|
| - args.Call(call_fun,
|
| - v8::Utils::ToLocal(key),
|
| - v8::Utils::ToLocal(value_handle));
|
| - }
|
| + PropertyCallbackArguments args(
|
| + isolate, data->data(), this, JSObject::cast(holder));
|
| + args.Call(call_fun,
|
| + v8::Utils::ToLocal(key),
|
| + v8::Utils::ToLocal(value_handle));
|
| RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| return *value_handle;
|
| }
|
| @@ -4187,12 +4169,8 @@ PropertyAttributes JSObject::GetPropertyAttributeWithInterceptor(
|
| v8::ToCData<v8::NamedPropertyQuery>(interceptor->query());
|
| LOG(isolate,
|
| ApiNamedPropertyAccess("interceptor-named-has", *holder_handle, name));
|
| - v8::Handle<v8::Integer> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - result = args.Call(query, v8::Utils::ToLocal(name_handle));
|
| - }
|
| + v8::Handle<v8::Integer> result =
|
| + args.Call(query, v8::Utils::ToLocal(name_handle));
|
| if (!result.IsEmpty()) {
|
| ASSERT(result->IsInt32());
|
| return static_cast<PropertyAttributes>(result->Int32Value());
|
| @@ -4202,12 +4180,8 @@ PropertyAttributes JSObject::GetPropertyAttributeWithInterceptor(
|
| v8::ToCData<v8::NamedPropertyGetter>(interceptor->getter());
|
| LOG(isolate,
|
| ApiNamedPropertyAccess("interceptor-named-get-has", this, name));
|
| - v8::Handle<v8::Value> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - result = args.Call(getter, v8::Utils::ToLocal(name_handle));
|
| - }
|
| + v8::Handle<v8::Value> result =
|
| + args.Call(getter, v8::Utils::ToLocal(name_handle));
|
| if (!result.IsEmpty()) return DONT_ENUM;
|
| }
|
| return holder_handle->GetPropertyAttributePostInterceptor(*receiver_handle,
|
| @@ -4327,12 +4301,7 @@ PropertyAttributes JSObject::GetElementAttributeWithInterceptor(
|
| v8::ToCData<v8::IndexedPropertyQuery>(interceptor->query());
|
| LOG(isolate,
|
| ApiIndexedPropertyAccess("interceptor-indexed-has", this, index));
|
| - v8::Handle<v8::Integer> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - result = args.Call(query, index);
|
| - }
|
| + v8::Handle<v8::Integer> result = args.Call(query, index);
|
| if (!result.IsEmpty())
|
| return static_cast<PropertyAttributes>(result->Int32Value());
|
| } else if (!interceptor->getter()->IsUndefined()) {
|
| @@ -4340,12 +4309,7 @@ PropertyAttributes JSObject::GetElementAttributeWithInterceptor(
|
| v8::ToCData<v8::IndexedPropertyGetter>(interceptor->getter());
|
| LOG(isolate,
|
| ApiIndexedPropertyAccess("interceptor-indexed-get-has", this, index));
|
| - v8::Handle<v8::Value> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - result = args.Call(getter, index);
|
| - }
|
| + v8::Handle<v8::Value> result = args.Call(getter, index);
|
| if (!result.IsEmpty()) return NONE;
|
| }
|
|
|
| @@ -5015,12 +4979,8 @@ MaybeObject* JSObject::DeletePropertyWithInterceptor(Name* name) {
|
| LOG(isolate,
|
| ApiNamedPropertyAccess("interceptor-named-delete", *this_handle, name));
|
| PropertyCallbackArguments args(isolate, interceptor->data(), this, this);
|
| - v8::Handle<v8::Boolean> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - result = args.Call(deleter, v8::Utils::ToLocal(name_handle));
|
| - }
|
| + v8::Handle<v8::Boolean> result =
|
| + args.Call(deleter, v8::Utils::ToLocal(name_handle));
|
| RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| if (!result.IsEmpty()) {
|
| ASSERT(result->IsBoolean());
|
| @@ -5051,12 +5011,7 @@ MaybeObject* JSObject::DeleteElementWithInterceptor(uint32_t index) {
|
| LOG(isolate,
|
| ApiIndexedPropertyAccess("interceptor-indexed-delete", this, index));
|
| PropertyCallbackArguments args(isolate, interceptor->data(), this, this);
|
| - v8::Handle<v8::Boolean> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - result = args.Call(deleter, index);
|
| - }
|
| + v8::Handle<v8::Boolean> result = args.Call(deleter, index);
|
| RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| if (!result.IsEmpty()) {
|
| ASSERT(result->IsBoolean());
|
| @@ -11464,12 +11419,8 @@ MaybeObject* JSObject::SetElementWithInterceptor(uint32_t index,
|
| LOG(isolate,
|
| ApiIndexedPropertyAccess("interceptor-indexed-set", this, index));
|
| PropertyCallbackArguments args(isolate, interceptor->data(), this, this);
|
| - v8::Handle<v8::Value> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - result = args.Call(setter, index, v8::Utils::ToLocal(value_handle));
|
| - }
|
| + v8::Handle<v8::Value> result =
|
| + args.Call(setter, index, v8::Utils::ToLocal(value_handle));
|
| RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| if (!result.IsEmpty()) return *value_handle;
|
| }
|
| @@ -11507,12 +11458,7 @@ MaybeObject* JSObject::GetElementWithCallback(Object* receiver,
|
| LOG(isolate, ApiNamedPropertyAccess("load", *self, *key));
|
| PropertyCallbackArguments
|
| args(isolate, data->data(), *self, *holder_handle);
|
| - v8::Handle<v8::Value> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - result = args.Call(call_fun, v8::Utils::ToLocal(key));
|
| - }
|
| + v8::Handle<v8::Value> result = args.Call(call_fun, v8::Utils::ToLocal(key));
|
| RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| if (result.IsEmpty()) return isolate->heap()->undefined_value();
|
| Handle<Object> result_internal = v8::Utils::OpenHandle(*result);
|
| @@ -11574,13 +11520,9 @@ MaybeObject* JSObject::SetElementWithCallback(Object* structure,
|
| LOG(isolate, ApiNamedPropertyAccess("store", *self, *key));
|
| PropertyCallbackArguments
|
| args(isolate, data->data(), *self, *holder_handle);
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - args.Call(call_fun,
|
| - v8::Utils::ToLocal(key),
|
| - v8::Utils::ToLocal(value_handle));
|
| - }
|
| + args.Call(call_fun,
|
| + v8::Utils::ToLocal(key),
|
| + v8::Utils::ToLocal(value_handle));
|
| RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| return *value_handle;
|
| }
|
| @@ -12480,12 +12422,7 @@ MaybeObject* JSObject::GetElementWithInterceptor(Object* receiver,
|
| ApiIndexedPropertyAccess("interceptor-indexed-get", this, index));
|
| PropertyCallbackArguments
|
| args(isolate, interceptor->data(), receiver, this);
|
| - v8::Handle<v8::Value> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - result = args.Call(getter, index);
|
| - }
|
| + v8::Handle<v8::Value> result = args.Call(getter, index);
|
| RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| if (!result.IsEmpty()) {
|
| Handle<Object> result_internal = v8::Utils::OpenHandle(*result);
|
| @@ -12790,12 +12727,8 @@ MaybeObject* JSObject::GetPropertyWithInterceptor(
|
| ApiNamedPropertyAccess("interceptor-named-get", *holder_handle, name));
|
| PropertyCallbackArguments
|
| args(isolate, interceptor->data(), receiver, this);
|
| - v8::Handle<v8::Value> result;
|
| - {
|
| - // Leaving JavaScript.
|
| - VMState<EXTERNAL> state(isolate);
|
| - result = args.Call(getter, v8::Utils::ToLocal(name_handle));
|
| - }
|
| + v8::Handle<v8::Value> result =
|
| + args.Call(getter, v8::Utils::ToLocal(name_handle));
|
| RETURN_IF_SCHEDULED_EXCEPTION(isolate);
|
| if (!result.IsEmpty()) {
|
| *attributes = NONE;
|
|
|