| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index a6007fde64abc91e73af4bffbb65e24d85ab3dac..d6963230c41933bdcf7acf3313ef823930f85016 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -151,9 +151,22 @@ namespace v8 {
|
| PREPARE_FOR_EXECUTION_WITH_CONTEXT(context, class_name, function_name, \
|
| false, i::HandleScope, false)
|
|
|
| +#ifdef DEBUG
|
| +#define ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate) \
|
| + i::VMState<v8::OTHER> __state__((isolate)); \
|
| + i::DisallowJavascriptExecutionDebugOnly __no_script__((isolate)); \
|
| + i::DisallowExceptions __no_exceptions__((isolate))
|
| +
|
| #define ENTER_V8_FOR_NEW_CONTEXT(isolate) \
|
| i::VMState<v8::OTHER> __state__((isolate)); \
|
| i::DisallowExceptions __no_exceptions__((isolate))
|
| +#else
|
| +#define ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate) \
|
| + i::VMState<v8::OTHER> __state__((isolate));
|
| +
|
| +#define ENTER_V8_FOR_NEW_CONTEXT(isolate) \
|
| + i::VMState<v8::OTHER> __state__((isolate));
|
| +#endif // DEBUG
|
|
|
| #define EXCEPTION_BAILOUT_CHECK_SCOPED(isolate, value) \
|
| do { \
|
| @@ -1065,7 +1078,7 @@ void SealHandleScope::operator delete(void*, size_t) { base::OS::Abort(); }
|
| void Context::Enter() {
|
| i::Handle<i::Context> env = Utils::OpenHandle(this);
|
| i::Isolate* isolate = env->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScopeImplementer* impl = isolate->handle_scope_implementer();
|
| impl->EnterContext(env);
|
| impl->SaveContext(isolate->context());
|
| @@ -1076,7 +1089,7 @@ void Context::Enter() {
|
| void Context::Exit() {
|
| i::Handle<i::Context> env = Utils::OpenHandle(this);
|
| i::Isolate* isolate = env->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScopeImplementer* impl = isolate->handle_scope_implementer();
|
| if (!Utils::ApiCheck(impl->LastEnteredContextWas(env),
|
| "v8::Context::Exit()",
|
| @@ -1175,7 +1188,7 @@ void Template::Set(v8::Local<Name> name, v8::Local<Data> value,
|
| v8::PropertyAttribute attribute) {
|
| auto templ = Utils::OpenHandle(this);
|
| i::Isolate* isolate = templ->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| auto value_obj = Utils::OpenHandle(*value);
|
| CHECK(!value_obj->IsJSReceiver() || value_obj->IsTemplateInfo());
|
| @@ -1206,7 +1219,7 @@ void Template::SetAccessorProperty(
|
| DCHECK_EQ(v8::DEFAULT, access_control);
|
| auto templ = Utils::OpenHandle(this);
|
| auto isolate = templ->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| DCHECK(!name.IsEmpty());
|
| DCHECK(!getter.IsEmpty() || !setter.IsEmpty());
|
| i::HandleScope scope(isolate);
|
| @@ -1230,7 +1243,7 @@ static Local<ObjectTemplate> ObjectTemplateNew(
|
|
|
| Local<ObjectTemplate> FunctionTemplate::PrototypeTemplate() {
|
| i::Isolate* i_isolate = Utils::OpenHandle(this)->GetIsolate();
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::Object> result(Utils::OpenHandle(this)->prototype_template(),
|
| i_isolate);
|
| if (result->IsUndefined(i_isolate)) {
|
| @@ -1245,7 +1258,7 @@ Local<ObjectTemplate> FunctionTemplate::PrototypeTemplate() {
|
| void FunctionTemplate::SetPrototypeProviderTemplate(
|
| Local<FunctionTemplate> prototype_provider) {
|
| i::Isolate* i_isolate = Utils::OpenHandle(this)->GetIsolate();
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::Object> result = Utils::OpenHandle(*prototype_provider);
|
| auto info = Utils::OpenHandle(this);
|
| CHECK(info->prototype_template()->IsUndefined(i_isolate));
|
| @@ -1264,7 +1277,7 @@ void FunctionTemplate::Inherit(v8::Local<FunctionTemplate> value) {
|
| auto info = Utils::OpenHandle(this);
|
| EnsureNotInstantiated(info, "v8::FunctionTemplate::Inherit");
|
| i::Isolate* i_isolate = info->GetIsolate();
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| CHECK(info->prototype_provider_template()->IsUndefined(i_isolate));
|
| info->set_parent_template(*Utils::OpenHandle(*value));
|
| }
|
| @@ -1311,7 +1324,7 @@ Local<FunctionTemplate> FunctionTemplate::New(
|
| // Changes to the environment cannot be captured in the snapshot. Expect no
|
| // function templates when the isolate is created for serialization.
|
| LOG_API(i_isolate, FunctionTemplate, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| auto templ = FunctionTemplateNew(i_isolate, callback, nullptr, data,
|
| signature, length, false);
|
| if (behavior == ConstructorBehavior::kThrow) templ->RemovePrototype();
|
| @@ -1339,7 +1352,7 @@ Local<FunctionTemplate> FunctionTemplate::NewWithFastHandler(
|
| v8::Local<Signature> signature, int length) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, FunctionTemplate, NewWithFastHandler);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| return FunctionTemplateNew(i_isolate, callback, fast_handler, data, signature,
|
| length, false);
|
| }
|
| @@ -1349,7 +1362,7 @@ Local<FunctionTemplate> FunctionTemplate::NewWithCache(
|
| Local<Value> data, Local<Signature> signature, int length) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, FunctionTemplate, NewWithCache);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| return FunctionTemplateNew(i_isolate, callback, nullptr, data, signature,
|
| length, false, cache_property);
|
| }
|
| @@ -1378,7 +1391,7 @@ void FunctionTemplate::SetCallHandler(
|
| auto info = Utils::OpenHandle(this);
|
| EnsureNotInstantiated(info, "v8::FunctionTemplate::SetCallHandler");
|
| i::Isolate* isolate = info->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| i::Handle<i::Struct> struct_obj =
|
| isolate->factory()->NewStruct(i::CALL_HANDLER_INFO_TYPE);
|
| @@ -1450,7 +1463,7 @@ Local<ObjectTemplate> FunctionTemplate::InstanceTemplate() {
|
| return Local<ObjectTemplate>();
|
| }
|
| i::Isolate* isolate = handle->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| if (handle->instance_template()->IsUndefined(isolate)) {
|
| Local<ObjectTemplate> templ =
|
| ObjectTemplate::New(isolate, ToApiHandle<FunctionTemplate>(handle));
|
| @@ -1466,7 +1479,7 @@ void FunctionTemplate::SetLength(int length) {
|
| auto info = Utils::OpenHandle(this);
|
| EnsureNotInstantiated(info, "v8::FunctionTemplate::SetLength");
|
| auto isolate = info->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| info->set_length(length);
|
| }
|
|
|
| @@ -1475,7 +1488,7 @@ void FunctionTemplate::SetClassName(Local<String> name) {
|
| auto info = Utils::OpenHandle(this);
|
| EnsureNotInstantiated(info, "v8::FunctionTemplate::SetClassName");
|
| auto isolate = info->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| info->set_class_name(*Utils::OpenHandle(*name));
|
| }
|
|
|
| @@ -1484,7 +1497,7 @@ void FunctionTemplate::SetAcceptAnyReceiver(bool value) {
|
| auto info = Utils::OpenHandle(this);
|
| EnsureNotInstantiated(info, "v8::FunctionTemplate::SetAcceptAnyReceiver");
|
| auto isolate = info->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| info->set_accept_any_receiver(value);
|
| }
|
|
|
| @@ -1493,7 +1506,7 @@ void FunctionTemplate::SetHiddenPrototype(bool value) {
|
| auto info = Utils::OpenHandle(this);
|
| EnsureNotInstantiated(info, "v8::FunctionTemplate::SetHiddenPrototype");
|
| auto isolate = info->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| info->set_hidden_prototype(value);
|
| }
|
|
|
| @@ -1502,7 +1515,7 @@ void FunctionTemplate::ReadOnlyPrototype() {
|
| auto info = Utils::OpenHandle(this);
|
| EnsureNotInstantiated(info, "v8::FunctionTemplate::ReadOnlyPrototype");
|
| auto isolate = info->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| info->set_read_only_prototype(true);
|
| }
|
|
|
| @@ -1511,7 +1524,7 @@ void FunctionTemplate::RemovePrototype() {
|
| auto info = Utils::OpenHandle(this);
|
| EnsureNotInstantiated(info, "v8::FunctionTemplate::RemovePrototype");
|
| auto isolate = info->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| info->set_remove_prototype(true);
|
| }
|
|
|
| @@ -1533,7 +1546,7 @@ static Local<ObjectTemplate> ObjectTemplateNew(
|
| i::Isolate* isolate, v8::Local<FunctionTemplate> constructor,
|
| bool do_not_cache) {
|
| LOG_API(isolate, ObjectTemplate, New);
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::Handle<i::Struct> struct_obj =
|
| isolate->factory()->NewStruct(i::OBJECT_TEMPLATE_INFO_TYPE);
|
| i::Handle<i::ObjectTemplateInfo> obj =
|
| @@ -1598,7 +1611,7 @@ static bool TemplateSetAccessor(Template* template_obj, v8::Local<Name> name,
|
| bool replace_on_access) {
|
| auto info = Utils::OpenHandle(template_obj);
|
| auto isolate = info->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| auto obj =
|
| MakeAccessorInfo(name, getter, setter, data, settings, attribute,
|
| @@ -1645,7 +1658,7 @@ void Template::SetIntrinsicDataProperty(Local<Name> name, Intrinsic intrinsic,
|
| PropertyAttribute attribute) {
|
| auto templ = Utils::OpenHandle(this);
|
| i::Isolate* isolate = templ->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| i::ApiNatives::AddDataProperty(isolate, templ, Utils::OpenHandle(*name),
|
| intrinsic,
|
| @@ -1718,7 +1731,7 @@ static void ObjectTemplateSetNamedPropertyHandler(
|
| Descriptor descriptor, Deleter remover, Enumerator enumerator,
|
| Definer definer, Local<Value> data, PropertyHandlerFlags flags) {
|
| i::Isolate* isolate = Utils::OpenHandle(templ)->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| auto cons = EnsureConstructor(isolate, templ);
|
| EnsureNotInstantiated(cons, "ObjectTemplateSetNamedPropertyHandler");
|
| @@ -1747,7 +1760,7 @@ void ObjectTemplate::SetHandler(
|
|
|
| void ObjectTemplate::MarkAsUndetectable() {
|
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| auto cons = EnsureConstructor(isolate, this);
|
| EnsureNotInstantiated(cons, "v8::ObjectTemplate::MarkAsUndetectable");
|
| @@ -1758,7 +1771,7 @@ void ObjectTemplate::MarkAsUndetectable() {
|
| void ObjectTemplate::SetAccessCheckCallback(AccessCheckCallback callback,
|
| Local<Value> data) {
|
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| auto cons = EnsureConstructor(isolate, this);
|
| EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetAccessCheckCallback");
|
| @@ -1787,7 +1800,7 @@ void ObjectTemplate::SetAccessCheckCallbackAndHandler(
|
| const IndexedPropertyHandlerConfiguration& indexed_handler,
|
| Local<Value> data) {
|
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| auto cons = EnsureConstructor(isolate, this);
|
| EnsureNotInstantiated(
|
| @@ -1823,7 +1836,7 @@ void ObjectTemplate::SetAccessCheckCallbackAndHandler(
|
| void ObjectTemplate::SetHandler(
|
| const IndexedPropertyHandlerConfiguration& config) {
|
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| auto cons = EnsureConstructor(isolate, this);
|
| EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetHandler");
|
| @@ -1838,7 +1851,7 @@ void ObjectTemplate::SetHandler(
|
| void ObjectTemplate::SetCallAsFunctionHandler(FunctionCallback callback,
|
| Local<Value> data) {
|
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| auto cons = EnsureConstructor(isolate, this);
|
| EnsureNotInstantiated(cons, "v8::ObjectTemplate::SetCallAsFunctionHandler");
|
| @@ -1867,7 +1880,7 @@ void ObjectTemplate::SetInternalFieldCount(int value) {
|
| "Invalid internal field count")) {
|
| return;
|
| }
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| if (value > 0) {
|
| // The internal field count is set by the constructor function's
|
| // construct code, so we ensure that there is a constructor
|
| @@ -1883,7 +1896,7 @@ bool ObjectTemplate::IsImmutableProto() {
|
|
|
| void ObjectTemplate::SetImmutableProto() {
|
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| Utils::OpenHandle(this)->set_immutable_proto(true);
|
| }
|
|
|
| @@ -2918,7 +2931,7 @@ bool StackFrame::IsConstructor() const {
|
|
|
| Local<NativeWeakMap> NativeWeakMap::New(Isolate* v8_isolate) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::Handle<i::JSWeakMap> weakmap = isolate->factory()->NewJSWeakMap();
|
| i::JSWeakCollection::Initialize(weakmap, isolate);
|
| return Utils::NativeWeakMapToLocal(weakmap);
|
| @@ -4934,7 +4947,7 @@ Maybe<PropertyAttribute> v8::Object::GetRealNamedPropertyAttributes(
|
| Local<v8::Object> v8::Object::Clone() {
|
| auto self = i::Handle<i::JSObject>::cast(Utils::OpenHandle(this));
|
| auto isolate = self->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| auto result = isolate->factory()->CopyJSObject(self);
|
| CHECK(!result.is_null());
|
| return Utils::ToLocal(result);
|
| @@ -5023,7 +5036,7 @@ MaybeLocal<Function> Function::New(Local<Context> context,
|
| int length, ConstructorBehavior behavior) {
|
| i::Isolate* isolate = Utils::OpenHandle(*context)->GetIsolate();
|
| LOG_API(isolate, Function, New);
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| auto templ = FunctionTemplateNew(isolate, callback, nullptr, data,
|
| Local<Signature>(), length, true);
|
| if (behavior == ConstructorBehavior::kThrow) templ->RemovePrototype();
|
| @@ -6417,7 +6430,7 @@ v8::Local<v8::Object> Context::Global() {
|
| void Context::DetachGlobal() {
|
| i::Handle<i::Context> context = Utils::OpenHandle(this);
|
| i::Isolate* isolate = context->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| isolate->bootstrapper()->DetachGlobal(context);
|
| }
|
|
|
| @@ -6433,7 +6446,7 @@ Local<v8::Object> Context::GetExtrasBindingObject() {
|
| void Context::AllowCodeGenerationFromStrings(bool allow) {
|
| i::Handle<i::Context> context = Utils::OpenHandle(this);
|
| i::Isolate* isolate = context->GetIsolate();
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| context->set_allow_code_gen_from_strings(
|
| allow ? isolate->heap()->true_value() : isolate->heap()->false_value());
|
| }
|
| @@ -6539,7 +6552,7 @@ Local<External> v8::External::New(Isolate* isolate, void* value) {
|
| STATIC_ASSERT(sizeof(value) == sizeof(i::Address));
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, External, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::JSObject> external = i_isolate->factory()->NewExternal(value);
|
| return Utils::ExternalToLocal(external);
|
| }
|
| @@ -6618,7 +6631,7 @@ STATIC_ASSERT(v8::String::kMaxLength == i::String::kMaxLength);
|
| result = MaybeLocal<String>(); \
|
| } else { \
|
| i::Isolate* i_isolate = reinterpret_cast<internal::Isolate*>(isolate); \
|
| - ENTER_V8(i_isolate); \
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate); \
|
| LOG_API(i_isolate, class_name, function_name); \
|
| if (length < 0) length = StringLength(data); \
|
| i::Handle<i::String> handle_result = \
|
| @@ -6705,7 +6718,7 @@ MaybeLocal<String> v8::String::NewExternalTwoByte(
|
| return MaybeLocal<String>();
|
| }
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| LOG_API(i_isolate, String, NewExternalTwoByte);
|
| i::Handle<i::String> string = i_isolate->factory()
|
| ->NewExternalStringFromTwoByte(resource)
|
| @@ -6729,7 +6742,7 @@ MaybeLocal<String> v8::String::NewExternalOneByte(
|
| return MaybeLocal<String>();
|
| }
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| LOG_API(i_isolate, String, NewExternalOneByte);
|
| i::Handle<i::String> string = i_isolate->factory()
|
| ->NewExternalStringFromOneByte(resource)
|
| @@ -6751,7 +6764,7 @@ bool v8::String::MakeExternal(v8::String::ExternalStringResource* resource) {
|
| if (i::StringShape(*obj).IsExternal()) {
|
| return false; // Already an external string.
|
| }
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| if (isolate->heap()->IsInGCPostProcessing()) {
|
| return false;
|
| }
|
| @@ -6775,7 +6788,7 @@ bool v8::String::MakeExternal(
|
| if (i::StringShape(*obj).IsExternal()) {
|
| return false; // Already an external string.
|
| }
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| if (isolate->heap()->IsInGCPostProcessing()) {
|
| return false;
|
| }
|
| @@ -6811,7 +6824,7 @@ Isolate* v8::Object::GetIsolate() {
|
| Local<v8::Object> v8::Object::New(Isolate* isolate) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, Object, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::JSObject> obj =
|
| i_isolate->factory()->NewJSObject(i_isolate->object_function());
|
| return Utils::ToLocal(obj);
|
| @@ -6821,7 +6834,7 @@ Local<v8::Object> v8::Object::New(Isolate* isolate) {
|
| Local<v8::Value> v8::NumberObject::New(Isolate* isolate, double value) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, NumberObject, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::Object> number = i_isolate->factory()->NewNumber(value);
|
| i::Handle<i::Object> obj =
|
| i::Object::ToObject(i_isolate, number).ToHandleChecked();
|
| @@ -6841,7 +6854,7 @@ double v8::NumberObject::ValueOf() const {
|
| Local<v8::Value> v8::BooleanObject::New(Isolate* isolate, bool value) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, BooleanObject, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::Object> boolean(value ? i_isolate->heap()->true_value()
|
| : i_isolate->heap()->false_value(),
|
| i_isolate);
|
| @@ -6869,7 +6882,7 @@ Local<v8::Value> v8::StringObject::New(Local<String> value) {
|
| i::Handle<i::String> string = Utils::OpenHandle(*value);
|
| i::Isolate* isolate = string->GetIsolate();
|
| LOG_API(isolate, StringObject, New);
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::Handle<i::Object> obj =
|
| i::Object::ToObject(isolate, string).ToHandleChecked();
|
| return Utils::ToLocal(obj);
|
| @@ -6889,7 +6902,7 @@ Local<v8::String> v8::StringObject::ValueOf() const {
|
| Local<v8::Value> v8::SymbolObject::New(Isolate* isolate, Local<Symbol> value) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, SymbolObject, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::Object> obj = i::Object::ToObject(
|
| i_isolate, Utils::OpenHandle(*value)).ToHandleChecked();
|
| return Utils::ToLocal(obj);
|
| @@ -6939,7 +6952,7 @@ double v8::Date::ValueOf() const {
|
| void v8::Date::DateTimeConfigurationChangeNotification(Isolate* isolate) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, Date, DateTimeConfigurationChangeNotification);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i_isolate->date_cache()->ResetDateCache();
|
| if (!i_isolate->eternal_handles()->Exists(
|
| i::EternalHandles::DATE_CACHE_VERSION)) {
|
| @@ -7004,7 +7017,7 @@ v8::RegExp::Flags v8::RegExp::GetFlags() const {
|
| Local<v8::Array> v8::Array::New(Isolate* isolate, int length) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, Array, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| int real_length = length > 0 ? length : 0;
|
| i::Handle<i::JSArray> obj = i_isolate->factory()->NewJSArray(real_length);
|
| i::Handle<i::Object> length_obj =
|
| @@ -7049,7 +7062,7 @@ Local<Object> Array::CloneElementAt(uint32_t index) { return Local<Object>(); }
|
| Local<v8::Map> v8::Map::New(Isolate* isolate) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, Map, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::JSMap> obj = i_isolate->factory()->NewJSMap();
|
| return Utils::ToLocal(obj);
|
| }
|
| @@ -7157,7 +7170,7 @@ Local<Array> Map::AsArray() const {
|
| Local<v8::Set> v8::Set::New(Isolate* isolate) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, Set, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::JSSet> obj = i_isolate->factory()->NewJSSet();
|
| return Utils::ToLocal(obj);
|
| }
|
| @@ -7539,7 +7552,7 @@ void v8::ArrayBuffer::Neuter() {
|
| Utils::ApiCheck(obj->is_neuterable(), "v8::ArrayBuffer::Neuter",
|
| "Only neuterable ArrayBuffers can be neutered");
|
| LOG_API(isolate, ArrayBuffer, Neuter);
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| obj->Neuter();
|
| }
|
|
|
| @@ -7553,7 +7566,7 @@ size_t v8::ArrayBuffer::ByteLength() const {
|
| Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, size_t byte_length) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, ArrayBuffer, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::JSArrayBuffer> obj =
|
| i_isolate->factory()->NewJSArrayBuffer(i::SharedFlag::kNotShared);
|
| i::JSArrayBuffer::SetupAllocatingData(obj, i_isolate, byte_length);
|
| @@ -7568,7 +7581,7 @@ Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, void* data,
|
| CHECK(byte_length == 0 || data != NULL);
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, ArrayBuffer, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::JSArrayBuffer> obj =
|
| i_isolate->factory()->NewJSArrayBuffer(i::SharedFlag::kNotShared);
|
| i::JSArrayBuffer::Setup(obj, i_isolate,
|
| @@ -7644,7 +7657,7 @@ size_t v8::TypedArray::Length() {
|
| size_t byte_offset, size_t length) { \
|
| i::Isolate* isolate = Utils::OpenHandle(*array_buffer)->GetIsolate(); \
|
| LOG_API(isolate, Type##Array, New); \
|
| - ENTER_V8(isolate); \
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); \
|
| if (!Utils::ApiCheck(length <= static_cast<size_t>(i::Smi::kMaxValue), \
|
| "v8::" #Type \
|
| "Array::New(Local<ArrayBuffer>, size_t, size_t)", \
|
| @@ -7663,7 +7676,7 @@ size_t v8::TypedArray::Length() {
|
| i::Isolate* isolate = \
|
| Utils::OpenHandle(*shared_array_buffer)->GetIsolate(); \
|
| LOG_API(isolate, Type##Array, New); \
|
| - ENTER_V8(isolate); \
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); \
|
| if (!Utils::ApiCheck( \
|
| length <= static_cast<size_t>(i::Smi::kMaxValue), \
|
| "v8::" #Type \
|
| @@ -7686,7 +7699,7 @@ Local<DataView> DataView::New(Local<ArrayBuffer> array_buffer,
|
| i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer);
|
| i::Isolate* isolate = buffer->GetIsolate();
|
| LOG_API(isolate, DataView, New);
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::Handle<i::JSDataView> obj =
|
| isolate->factory()->NewJSDataView(buffer, byte_offset, byte_length);
|
| return Utils::ToLocal(obj);
|
| @@ -7699,7 +7712,7 @@ Local<DataView> DataView::New(Local<SharedArrayBuffer> shared_array_buffer,
|
| i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*shared_array_buffer);
|
| i::Isolate* isolate = buffer->GetIsolate();
|
| LOG_API(isolate, DataView, New);
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::Handle<i::JSDataView> obj =
|
| isolate->factory()->NewJSDataView(buffer, byte_offset, byte_length);
|
| return Utils::ToLocal(obj);
|
| @@ -7743,7 +7756,7 @@ Local<SharedArrayBuffer> v8::SharedArrayBuffer::New(Isolate* isolate,
|
| CHECK(i::FLAG_harmony_sharedarraybuffer);
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, SharedArrayBuffer, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::JSArrayBuffer> obj =
|
| i_isolate->factory()->NewJSArrayBuffer(i::SharedFlag::kShared);
|
| i::JSArrayBuffer::SetupAllocatingData(obj, i_isolate, byte_length, true,
|
| @@ -7760,7 +7773,7 @@ Local<SharedArrayBuffer> v8::SharedArrayBuffer::New(
|
| CHECK(byte_length == 0 || data != NULL);
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, SharedArrayBuffer, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::JSArrayBuffer> obj =
|
| i_isolate->factory()->NewJSArrayBuffer(i::SharedFlag::kShared);
|
| i::JSArrayBuffer::Setup(obj, i_isolate,
|
| @@ -7773,7 +7786,7 @@ Local<SharedArrayBuffer> v8::SharedArrayBuffer::New(
|
| Local<Symbol> v8::Symbol::New(Isolate* isolate, Local<String> name) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, Symbol, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::Symbol> result = i_isolate->factory()->NewSymbol();
|
| if (!name.IsEmpty()) result->set_name(*Utils::OpenHandle(*name));
|
| return Utils::ToLocal(result);
|
| @@ -7823,7 +7836,7 @@ Local<Symbol> v8::Symbol::GetIsConcatSpreadable(Isolate* isolate) {
|
| Local<Private> v8::Private::New(Isolate* isolate, Local<String> name) {
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| LOG_API(i_isolate, Private, New);
|
| - ENTER_V8(i_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate);
|
| i::Handle<i::Symbol> symbol = i_isolate->factory()->NewPrivateSymbol();
|
| if (!name.IsEmpty()) symbol->set_name(*Utils::OpenHandle(*name));
|
| Local<Symbol> result = Utils::ToLocal(symbol);
|
| @@ -7846,7 +7859,7 @@ Local<Number> v8::Number::New(Isolate* isolate, double value) {
|
| // Introduce only canonical NaN value into the VM, to avoid signaling NaNs.
|
| value = std::numeric_limits<double>::quiet_NaN();
|
| }
|
| - ENTER_V8(internal_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(internal_isolate);
|
| i::Handle<i::Object> result = internal_isolate->factory()->NewNumber(value);
|
| return Utils::NumberToLocal(result);
|
| }
|
| @@ -7858,7 +7871,7 @@ Local<Integer> v8::Integer::New(Isolate* isolate, int32_t value) {
|
| return Utils::IntegerToLocal(i::Handle<i::Object>(i::Smi::FromInt(value),
|
| internal_isolate));
|
| }
|
| - ENTER_V8(internal_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(internal_isolate);
|
| i::Handle<i::Object> result = internal_isolate->factory()->NewNumber(value);
|
| return Utils::IntegerToLocal(result);
|
| }
|
| @@ -7870,7 +7883,7 @@ Local<Integer> v8::Integer::NewFromUnsigned(Isolate* isolate, uint32_t value) {
|
| if (fits_into_int32_t) {
|
| return Integer::New(isolate, static_cast<int32_t>(value));
|
| }
|
| - ENTER_V8(internal_isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(internal_isolate);
|
| i::Handle<i::Object> result = internal_isolate->factory()->NewNumber(value);
|
| return Utils::IntegerToLocal(result);
|
| }
|
| @@ -8587,7 +8600,7 @@ bool Isolate::AddMessageListenerWithErrorLevel(MessageCallback that,
|
| int message_levels,
|
| Local<Value> data) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this);
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| i::Handle<i::TemplateList> list = isolate->factory()->message_listeners();
|
| i::Handle<i::FixedArray> listener = isolate->factory()->NewFixedArray(3);
|
| @@ -8605,7 +8618,7 @@ bool Isolate::AddMessageListenerWithErrorLevel(MessageCallback that,
|
|
|
| void Isolate::RemoveMessageListeners(MessageCallback that) {
|
| i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this);
|
| - ENTER_V8(isolate);
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| i::HandleScope scope(isolate);
|
| i::DisallowHeapAllocation no_gc;
|
| i::TemplateList* listeners = isolate->heap()->message_listeners();
|
| @@ -8787,7 +8800,7 @@ String::Value::~Value() {
|
| Local<Value> Exception::NAME(v8::Local<v8::String> raw_message) { \
|
| i::Isolate* isolate = i::Isolate::Current(); \
|
| LOG_API(isolate, NAME, New); \
|
| - ENTER_V8(isolate); \
|
| + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); \
|
| i::Object* error; \
|
| { \
|
| i::HandleScope scope(isolate); \
|
|
|