OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/api.h" | 5 #include "src/api.h" |
6 | 6 |
7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
(...skipping 1962 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1973 isolate->ReportPendingMessages(); | 1973 isolate->ReportPendingMessages(); |
1974 } | 1974 } |
1975 RETURN_ON_FAILED_EXECUTION(Function); | 1975 RETURN_ON_FAILED_EXECUTION(Function); |
1976 | 1976 |
1977 i::Handle<i::Object> result; | 1977 i::Handle<i::Object> result; |
1978 has_pending_exception = | 1978 has_pending_exception = |
1979 !i::Execution::Call(isolate, fun, | 1979 !i::Execution::Call(isolate, fun, |
1980 Utils::OpenHandle(*v8_context->Global()), 0, | 1980 Utils::OpenHandle(*v8_context->Global()), 0, |
1981 nullptr).ToHandle(&result); | 1981 nullptr).ToHandle(&result); |
1982 RETURN_ON_FAILED_EXECUTION(Function); | 1982 RETURN_ON_FAILED_EXECUTION(Function); |
1983 RETURN_ESCAPED(Utils::ToLocal(i::Handle<i::JSFunction>::cast(result))); | 1983 RETURN_ESCAPED( |
| 1984 Utils::FunctionToLocal(i::Handle<i::JSFunction>::cast(result))); |
1984 } | 1985 } |
1985 | 1986 |
1986 | 1987 |
1987 Local<Function> ScriptCompiler::CompileFunctionInContext( | 1988 Local<Function> ScriptCompiler::CompileFunctionInContext( |
1988 Isolate* v8_isolate, Source* source, Local<Context> v8_context, | 1989 Isolate* v8_isolate, Source* source, Local<Context> v8_context, |
1989 size_t arguments_count, Local<String> arguments[], | 1990 size_t arguments_count, Local<String> arguments[], |
1990 size_t context_extension_count, Local<Object> context_extensions[]) { | 1991 size_t context_extension_count, Local<Object> context_extensions[]) { |
1991 RETURN_TO_LOCAL_UNCHECKED( | 1992 RETURN_TO_LOCAL_UNCHECKED( |
1992 CompileFunctionInContext(v8_context, source, arguments_count, arguments, | 1993 CompileFunctionInContext(v8_context, source, arguments_count, arguments, |
1993 context_extension_count, context_extensions), | 1994 context_extension_count, context_extensions), |
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2691 bool Value::IsTrue() const { | 2692 bool Value::IsTrue() const { |
2692 return Utils::OpenHandle(this)->IsTrue(); | 2693 return Utils::OpenHandle(this)->IsTrue(); |
2693 } | 2694 } |
2694 | 2695 |
2695 | 2696 |
2696 bool Value::IsFalse() const { | 2697 bool Value::IsFalse() const { |
2697 return Utils::OpenHandle(this)->IsFalse(); | 2698 return Utils::OpenHandle(this)->IsFalse(); |
2698 } | 2699 } |
2699 | 2700 |
2700 | 2701 |
2701 bool Value::IsFunction() const { | 2702 bool Value::IsFunction() const { return Utils::OpenHandle(this)->IsCallable(); } |
2702 return Utils::OpenHandle(this)->IsJSFunction(); | |
2703 } | |
2704 | 2703 |
2705 | 2704 |
2706 bool Value::IsName() const { | 2705 bool Value::IsName() const { |
2707 return Utils::OpenHandle(this)->IsName(); | 2706 return Utils::OpenHandle(this)->IsName(); |
2708 } | 2707 } |
2709 | 2708 |
2710 | 2709 |
2711 bool Value::FullIsString() const { | 2710 bool Value::FullIsString() const { |
2712 bool result = Utils::OpenHandle(this)->IsString(); | 2711 bool result = Utils::OpenHandle(this)->IsString(); |
2713 DCHECK_EQ(result, QuickIsString()); | 2712 DCHECK_EQ(result, QuickIsString()); |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3032 void v8::Object::CheckCast(Value* that) { | 3031 void v8::Object::CheckCast(Value* that) { |
3033 i::Handle<i::Object> obj = Utils::OpenHandle(that); | 3032 i::Handle<i::Object> obj = Utils::OpenHandle(that); |
3034 Utils::ApiCheck(obj->IsJSObject(), | 3033 Utils::ApiCheck(obj->IsJSObject(), |
3035 "v8::Object::Cast()", | 3034 "v8::Object::Cast()", |
3036 "Could not convert to object"); | 3035 "Could not convert to object"); |
3037 } | 3036 } |
3038 | 3037 |
3039 | 3038 |
3040 void v8::Function::CheckCast(Value* that) { | 3039 void v8::Function::CheckCast(Value* that) { |
3041 i::Handle<i::Object> obj = Utils::OpenHandle(that); | 3040 i::Handle<i::Object> obj = Utils::OpenHandle(that); |
3042 Utils::ApiCheck(obj->IsJSFunction(), | 3041 Utils::ApiCheck(obj->IsCallable(), "v8::Function::Cast()", |
3043 "v8::Function::Cast()", | |
3044 "Could not convert to function"); | 3042 "Could not convert to function"); |
3045 } | 3043 } |
3046 | 3044 |
3047 | 3045 |
3048 void v8::Boolean::CheckCast(v8::Value* that) { | 3046 void v8::Boolean::CheckCast(v8::Value* that) { |
3049 i::Handle<i::Object> obj = Utils::OpenHandle(that); | 3047 i::Handle<i::Object> obj = Utils::OpenHandle(that); |
3050 Utils::ApiCheck(obj->IsBoolean(), | 3048 Utils::ApiCheck(obj->IsBoolean(), |
3051 "v8::Boolean::Cast()", | 3049 "v8::Boolean::Cast()", |
3052 "Could not convert to boolean"); | 3050 "Could not convert to boolean"); |
3053 } | 3051 } |
(...skipping 1281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4335 | 4333 |
4336 MaybeLocal<Object> Function::NewInstance(Local<Context> context, int argc, | 4334 MaybeLocal<Object> Function::NewInstance(Local<Context> context, int argc, |
4337 v8::Local<v8::Value> argv[]) const { | 4335 v8::Local<v8::Value> argv[]) const { |
4338 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Function::NewInstance()", | 4336 PREPARE_FOR_EXECUTION_WITH_CALLBACK(context, "v8::Function::NewInstance()", |
4339 Object); | 4337 Object); |
4340 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); | 4338 i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); |
4341 auto self = Utils::OpenHandle(this); | 4339 auto self = Utils::OpenHandle(this); |
4342 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**)); | 4340 STATIC_ASSERT(sizeof(v8::Local<v8::Value>) == sizeof(i::Object**)); |
4343 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); | 4341 i::Handle<i::Object>* args = reinterpret_cast<i::Handle<i::Object>*>(argv); |
4344 Local<Object> result; | 4342 Local<Object> result; |
4345 has_pending_exception = | 4343 has_pending_exception = !ToLocal<Object>( |
4346 !ToLocal<Object>(i::Execution::New(self, argc, args), &result); | 4344 i::Execution::New(isolate, self, self, argc, args), &result); |
4347 RETURN_ON_FAILED_EXECUTION(Object); | 4345 RETURN_ON_FAILED_EXECUTION(Object); |
4348 RETURN_ESCAPED(result); | 4346 RETURN_ESCAPED(result); |
4349 } | 4347 } |
4350 | 4348 |
4351 | 4349 |
4352 Local<v8::Object> Function::NewInstance(int argc, | 4350 Local<v8::Object> Function::NewInstance(int argc, |
4353 v8::Local<v8::Value> argv[]) const { | 4351 v8::Local<v8::Value> argv[]) const { |
4354 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 4352 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
4355 RETURN_TO_LOCAL_UNCHECKED(NewInstance(context, argc, argv), Object); | 4353 RETURN_TO_LOCAL_UNCHECKED(NewInstance(context, argc, argv), Object); |
4356 } | 4354 } |
(...skipping 17 matching lines...) Expand all Loading... |
4374 | 4372 |
4375 | 4373 |
4376 Local<v8::Value> Function::Call(v8::Local<v8::Value> recv, int argc, | 4374 Local<v8::Value> Function::Call(v8::Local<v8::Value> recv, int argc, |
4377 v8::Local<v8::Value> argv[]) { | 4375 v8::Local<v8::Value> argv[]) { |
4378 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 4376 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
4379 RETURN_TO_LOCAL_UNCHECKED(Call(context, recv, argc, argv), Value); | 4377 RETURN_TO_LOCAL_UNCHECKED(Call(context, recv, argc, argv), Value); |
4380 } | 4378 } |
4381 | 4379 |
4382 | 4380 |
4383 void Function::SetName(v8::Local<v8::String> name) { | 4381 void Function::SetName(v8::Local<v8::String> name) { |
4384 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4382 auto self = Utils::OpenHandle(this); |
| 4383 if (!self->IsJSFunction()) return; |
| 4384 auto func = i::Handle<i::JSFunction>::cast(self); |
4385 func->shared()->set_name(*Utils::OpenHandle(*name)); | 4385 func->shared()->set_name(*Utils::OpenHandle(*name)); |
4386 } | 4386 } |
4387 | 4387 |
4388 | 4388 |
4389 Local<Value> Function::GetName() const { | 4389 Local<Value> Function::GetName() const { |
4390 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4390 auto self = Utils::OpenHandle(this); |
| 4391 if (!self->IsJSFunction()) { |
| 4392 return ToApiHandle<Primitive>( |
| 4393 self->GetIsolate()->factory()->undefined_value()); |
| 4394 } |
| 4395 auto func = i::Handle<i::JSFunction>::cast(self); |
4391 return Utils::ToLocal(i::Handle<i::Object>(func->shared()->name(), | 4396 return Utils::ToLocal(i::Handle<i::Object>(func->shared()->name(), |
4392 func->GetIsolate())); | 4397 func->GetIsolate())); |
4393 } | 4398 } |
4394 | 4399 |
4395 | 4400 |
4396 Local<Value> Function::GetInferredName() const { | 4401 Local<Value> Function::GetInferredName() const { |
4397 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4402 auto self = Utils::OpenHandle(this); |
| 4403 if (!self->IsJSFunction()) { |
| 4404 return ToApiHandle<Primitive>( |
| 4405 self->GetIsolate()->factory()->undefined_value()); |
| 4406 } |
| 4407 auto func = i::Handle<i::JSFunction>::cast(self); |
4398 return Utils::ToLocal(i::Handle<i::Object>(func->shared()->inferred_name(), | 4408 return Utils::ToLocal(i::Handle<i::Object>(func->shared()->inferred_name(), |
4399 func->GetIsolate())); | 4409 func->GetIsolate())); |
4400 } | 4410 } |
4401 | 4411 |
4402 | 4412 |
4403 Local<Value> Function::GetDisplayName() const { | 4413 Local<Value> Function::GetDisplayName() const { |
4404 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 4414 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
4405 ENTER_V8(isolate); | 4415 ENTER_V8(isolate); |
4406 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4416 auto self = Utils::OpenHandle(this); |
| 4417 if (!self->IsJSFunction()) { |
| 4418 return ToApiHandle<Primitive>(isolate->factory()->undefined_value()); |
| 4419 } |
| 4420 auto func = i::Handle<i::JSFunction>::cast(self); |
4407 i::Handle<i::String> property_name = | 4421 i::Handle<i::String> property_name = |
4408 isolate->factory()->NewStringFromStaticChars("displayName"); | 4422 isolate->factory()->NewStringFromStaticChars("displayName"); |
4409 i::Handle<i::Object> value = | 4423 i::Handle<i::Object> value = |
4410 i::JSReceiver::GetDataProperty(func, property_name); | 4424 i::JSReceiver::GetDataProperty(func, property_name); |
4411 if (value->IsString()) { | 4425 if (value->IsString()) { |
4412 i::Handle<i::String> name = i::Handle<i::String>::cast(value); | 4426 i::Handle<i::String> name = i::Handle<i::String>::cast(value); |
4413 if (name->length() > 0) return Utils::ToLocal(name); | 4427 if (name->length() > 0) return Utils::ToLocal(name); |
4414 } | 4428 } |
4415 return ToApiHandle<Primitive>(isolate->factory()->undefined_value()); | 4429 return ToApiHandle<Primitive>(isolate->factory()->undefined_value()); |
4416 } | 4430 } |
4417 | 4431 |
4418 | 4432 |
4419 ScriptOrigin Function::GetScriptOrigin() const { | 4433 ScriptOrigin Function::GetScriptOrigin() const { |
4420 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4434 auto self = Utils::OpenHandle(this); |
| 4435 if (!self->IsJSFunction()) { |
| 4436 return v8::ScriptOrigin(Local<Value>()); |
| 4437 } |
| 4438 auto func = i::Handle<i::JSFunction>::cast(self); |
4421 if (func->shared()->script()->IsScript()) { | 4439 if (func->shared()->script()->IsScript()) { |
4422 i::Handle<i::Script> script(i::Script::cast(func->shared()->script())); | 4440 i::Handle<i::Script> script(i::Script::cast(func->shared()->script())); |
4423 return GetScriptOriginForScript(func->GetIsolate(), script); | 4441 return GetScriptOriginForScript(func->GetIsolate(), script); |
4424 } | 4442 } |
4425 return v8::ScriptOrigin(Local<Value>()); | 4443 return v8::ScriptOrigin(Local<Value>()); |
4426 } | 4444 } |
4427 | 4445 |
4428 | 4446 |
4429 const int Function::kLineOffsetNotFound = -1; | 4447 const int Function::kLineOffsetNotFound = -1; |
4430 | 4448 |
4431 | 4449 |
4432 int Function::GetScriptLineNumber() const { | 4450 int Function::GetScriptLineNumber() const { |
4433 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4451 auto self = Utils::OpenHandle(this); |
| 4452 if (!self->IsJSFunction()) { |
| 4453 return kLineOffsetNotFound; |
| 4454 } |
| 4455 auto func = i::Handle<i::JSFunction>::cast(self); |
4434 if (func->shared()->script()->IsScript()) { | 4456 if (func->shared()->script()->IsScript()) { |
4435 i::Handle<i::Script> script(i::Script::cast(func->shared()->script())); | 4457 i::Handle<i::Script> script(i::Script::cast(func->shared()->script())); |
4436 return i::Script::GetLineNumber(script, func->shared()->start_position()); | 4458 return i::Script::GetLineNumber(script, func->shared()->start_position()); |
4437 } | 4459 } |
4438 return kLineOffsetNotFound; | 4460 return kLineOffsetNotFound; |
4439 } | 4461 } |
4440 | 4462 |
4441 | 4463 |
4442 int Function::GetScriptColumnNumber() const { | 4464 int Function::GetScriptColumnNumber() const { |
4443 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4465 auto self = Utils::OpenHandle(this); |
| 4466 if (!self->IsJSFunction()) { |
| 4467 return kLineOffsetNotFound; |
| 4468 } |
| 4469 auto func = i::Handle<i::JSFunction>::cast(self); |
4444 if (func->shared()->script()->IsScript()) { | 4470 if (func->shared()->script()->IsScript()) { |
4445 i::Handle<i::Script> script(i::Script::cast(func->shared()->script())); | 4471 i::Handle<i::Script> script(i::Script::cast(func->shared()->script())); |
4446 return i::Script::GetColumnNumber(script, func->shared()->start_position()); | 4472 return i::Script::GetColumnNumber(script, func->shared()->start_position()); |
4447 } | 4473 } |
4448 return kLineOffsetNotFound; | 4474 return kLineOffsetNotFound; |
4449 } | 4475 } |
4450 | 4476 |
4451 | 4477 |
4452 bool Function::IsBuiltin() const { | 4478 bool Function::IsBuiltin() const { |
4453 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4479 auto self = Utils::OpenHandle(this); |
| 4480 if (!self->IsJSFunction()) { |
| 4481 return false; |
| 4482 } |
| 4483 auto func = i::Handle<i::JSFunction>::cast(self); |
4454 return func->IsBuiltin(); | 4484 return func->IsBuiltin(); |
4455 } | 4485 } |
4456 | 4486 |
4457 | 4487 |
4458 int Function::ScriptId() const { | 4488 int Function::ScriptId() const { |
4459 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4489 auto self = Utils::OpenHandle(this); |
| 4490 if (!self->IsJSFunction()) { |
| 4491 return v8::UnboundScript::kNoScriptId; |
| 4492 } |
| 4493 auto func = i::Handle<i::JSFunction>::cast(self); |
4460 if (!func->shared()->script()->IsScript()) { | 4494 if (!func->shared()->script()->IsScript()) { |
4461 return v8::UnboundScript::kNoScriptId; | 4495 return v8::UnboundScript::kNoScriptId; |
4462 } | 4496 } |
4463 i::Handle<i::Script> script(i::Script::cast(func->shared()->script())); | 4497 i::Handle<i::Script> script(i::Script::cast(func->shared()->script())); |
4464 return script->id(); | 4498 return script->id(); |
4465 } | 4499 } |
4466 | 4500 |
4467 | 4501 |
4468 Local<v8::Value> Function::GetBoundFunction() const { | 4502 Local<v8::Value> Function::GetBoundFunction() const { |
4469 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 4503 auto self = Utils::OpenHandle(this); |
| 4504 if (!self->IsJSFunction()) { |
| 4505 return v8::Undefined(reinterpret_cast<v8::Isolate*>(self->GetIsolate())); |
| 4506 } |
| 4507 auto func = i::Handle<i::JSFunction>::cast(self); |
4470 if (!func->shared()->bound()) { | 4508 if (!func->shared()->bound()) { |
4471 return v8::Undefined(reinterpret_cast<v8::Isolate*>(func->GetIsolate())); | 4509 return v8::Undefined(reinterpret_cast<v8::Isolate*>(func->GetIsolate())); |
4472 } | 4510 } |
4473 i::Handle<i::BindingsArray> bound_args = i::Handle<i::BindingsArray>( | 4511 i::Handle<i::BindingsArray> bound_args = i::Handle<i::BindingsArray>( |
4474 i::BindingsArray::cast(func->function_bindings())); | 4512 i::BindingsArray::cast(func->function_bindings())); |
4475 i::Handle<i::Object> original(bound_args->bound_function(), | 4513 i::Handle<i::Object> original(bound_args->bound_function(), |
4476 func->GetIsolate()); | 4514 func->GetIsolate()); |
4477 return Utils::ToLocal(i::Handle<i::JSFunction>::cast(original)); | 4515 return Utils::FunctionToLocal(i::Handle<i::JSFunction>::cast(original)); |
4478 } | 4516 } |
4479 | 4517 |
4480 | 4518 |
4481 int Name::GetIdentityHash() { | 4519 int Name::GetIdentityHash() { |
4482 auto self = Utils::OpenHandle(this); | 4520 auto self = Utils::OpenHandle(this); |
4483 return static_cast<int>(self->Hash()); | 4521 return static_cast<int>(self->Hash()); |
4484 } | 4522 } |
4485 | 4523 |
4486 | 4524 |
4487 int String::Length() const { | 4525 int String::Length() const { |
(...skipping 3207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7695 | 7733 |
7696 MaybeLocal<Value> Debug::GetMirror(Local<Context> context, | 7734 MaybeLocal<Value> Debug::GetMirror(Local<Context> context, |
7697 v8::Local<v8::Value> obj) { | 7735 v8::Local<v8::Value> obj) { |
7698 PREPARE_FOR_EXECUTION(context, "v8::Debug::GetMirror()", Value); | 7736 PREPARE_FOR_EXECUTION(context, "v8::Debug::GetMirror()", Value); |
7699 i::Debug* isolate_debug = isolate->debug(); | 7737 i::Debug* isolate_debug = isolate->debug(); |
7700 has_pending_exception = !isolate_debug->Load(); | 7738 has_pending_exception = !isolate_debug->Load(); |
7701 RETURN_ON_FAILED_EXECUTION(Value); | 7739 RETURN_ON_FAILED_EXECUTION(Value); |
7702 i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object()); | 7740 i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object()); |
7703 auto name = isolate->factory()->NewStringFromStaticChars("MakeMirror"); | 7741 auto name = isolate->factory()->NewStringFromStaticChars("MakeMirror"); |
7704 auto fun_obj = i::Object::GetProperty(debug, name).ToHandleChecked(); | 7742 auto fun_obj = i::Object::GetProperty(debug, name).ToHandleChecked(); |
7705 auto v8_fun = Utils::ToLocal(i::Handle<i::JSFunction>::cast(fun_obj)); | 7743 auto v8_fun = Utils::FunctionToLocal(i::Handle<i::JSFunction>::cast(fun_obj)); |
7706 const int kArgc = 1; | 7744 const int kArgc = 1; |
7707 v8::Local<v8::Value> argv[kArgc] = {obj}; | 7745 v8::Local<v8::Value> argv[kArgc] = {obj}; |
7708 Local<Value> result; | 7746 Local<Value> result; |
7709 has_pending_exception = !v8_fun->Call(context, Utils::ToLocal(debug), kArgc, | 7747 has_pending_exception = !v8_fun->Call(context, Utils::ToLocal(debug), kArgc, |
7710 argv).ToLocal(&result); | 7748 argv).ToLocal(&result); |
7711 RETURN_ON_FAILED_EXECUTION(Value); | 7749 RETURN_ON_FAILED_EXECUTION(Value); |
7712 RETURN_ESCAPED(result); | 7750 RETURN_ESCAPED(result); |
7713 } | 7751 } |
7714 | 7752 |
7715 | 7753 |
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8387 Address callback_address = | 8425 Address callback_address = |
8388 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 8426 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
8389 VMState<EXTERNAL> state(isolate); | 8427 VMState<EXTERNAL> state(isolate); |
8390 ExternalCallbackScope call_scope(isolate, callback_address); | 8428 ExternalCallbackScope call_scope(isolate, callback_address); |
8391 callback(info); | 8429 callback(info); |
8392 } | 8430 } |
8393 | 8431 |
8394 | 8432 |
8395 } // namespace internal | 8433 } // namespace internal |
8396 } // namespace v8 | 8434 } // namespace v8 |
OLD | NEW |