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