diff --git a/src/mod/languages/mod_v8/include/javascript.hpp b/src/mod/languages/mod_v8/include/javascript.hpp index 5650ad18e1..a080a508de 100644 --- a/src/mod/languages/mod_v8/include/javascript.hpp +++ b/src/mod/languages/mod_v8/include/javascript.hpp @@ -127,7 +127,7 @@ /* Macro for basic script state check (to know if the script is being terminated), should be called before calling any callback actual code */ #define JS_CHECK_SCRIPT_STATE() \ - if (v8::V8::IsExecutionTerminating(info.GetIsolate())) return;\ + if (info.GetIsolate()->IsExecutionTerminating()) return;\ if (JSMain::GetScriptInstanceFromIsolate(info.GetIsolate()) && JSMain::GetScriptInstanceFromIsolate(info.GetIsolate())->GetForcedTermination()) return /* Macro for easy unlocking an isolate on a long running c call */ diff --git a/src/mod/languages/mod_v8/mod_v8.cpp b/src/mod/languages/mod_v8/mod_v8.cpp index 636b93e5ac..8c0d6c0bef 100644 --- a/src/mod/languages/mod_v8/mod_v8.cpp +++ b/src/mod/languages/mod_v8/mod_v8.cpp @@ -645,7 +645,7 @@ static int v8_parse_and_execute(switch_core_session_t *session, const char *inpu isolate->SetData(0, js); // New global template - Handle global = ObjectTemplate::New(); + Handle global = ObjectTemplate::New(isolate); if (global.IsEmpty()) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to create JS global object template\n"); @@ -793,7 +793,7 @@ static int v8_parse_and_execute(switch_core_session_t *session, const char *inpu free(path); } - TryCatch try_catch; + TryCatch try_catch(isolate); // Compile the source code. #if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5 @@ -827,7 +827,7 @@ static int v8_parse_and_execute(switch_core_session_t *session, const char *inpu switch_mutex_lock(globals.mutex); if (globals.performance_monitor) { switch_time_t end = switch_time_now(); - switch_time_t delay = (end - start); + unsigned int delay = (end - start); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Javascript execution time: %u microseconds\n", delay); } switch_mutex_unlock(globals.mutex); diff --git a/src/mod/languages/mod_v8/src/fscoredb.cpp b/src/mod/languages/mod_v8/src/fscoredb.cpp index b0b920df33..5af1bd5be8 100644 --- a/src/mod/languages/mod_v8/src/fscoredb.cpp +++ b/src/mod/languages/mod_v8/src/fscoredb.cpp @@ -396,11 +396,6 @@ JS_COREDB_GET_PROPERTY_IMPL(GetProperty) { HandleScope handle_scope(info.GetIsolate()); - if (!this) { - info.GetReturnValue().Set(false); - return; - } - String::Utf8Value str(property); if (!strcmp(js_safe_str(*str), "path")) { diff --git a/src/mod/languages/mod_v8/src/fscurl.cpp b/src/mod/languages/mod_v8/src/fscurl.cpp index 60ad42f200..e35036b64a 100644 --- a/src/mod/languages/mod_v8/src/fscurl.cpp +++ b/src/mod/languages/mod_v8/src/fscurl.cpp @@ -60,7 +60,7 @@ string FSCURL::GetJSClassName() size_t FSCURL::FileCallback(void *ptr, size_t size, size_t nmemb, void *data) { FSCURL *obj = static_cast(data); - register unsigned int realsize = (unsigned int) (size * nmemb); + unsigned int realsize = (unsigned int) (size * nmemb); uint32_t argc = 0; Handle argv[4]; diff --git a/src/mod/languages/mod_v8/src/fsdbh.cpp b/src/mod/languages/mod_v8/src/fsdbh.cpp index 59bd3b8128..16f6b4f7b0 100644 --- a/src/mod/languages/mod_v8/src/fsdbh.cpp +++ b/src/mod/languages/mod_v8/src/fsdbh.cpp @@ -335,11 +335,6 @@ JS_DBH_GET_PROPERTY_IMPL(GetProperty) { HandleScope handle_scope(info.GetIsolate()); - if (!this) { - info.GetReturnValue().Set(false); - return; - } - String::Utf8Value str(property); if (!strcmp(js_safe_str(*str), "dsn")) { diff --git a/src/mod/languages/mod_v8/src/fsglobal.cpp b/src/mod/languages/mod_v8/src/fsglobal.cpp index 4bea1094fb..89f94b40cb 100644 --- a/src/mod/languages/mod_v8/src/fsglobal.cpp +++ b/src/mod/languages/mod_v8/src/fsglobal.cpp @@ -63,7 +63,7 @@ public: size_t FSGlobal::HashCallback(void *ptr, size_t size, size_t nmemb, void *data) { - register size_t realsize = size * nmemb; + size_t realsize = size * nmemb; char *line, lineb[2048], *nextline = NULL, *val = NULL, *p = NULL; CURLCallbackData *config_data = (CURLCallbackData *)data; @@ -112,7 +112,7 @@ size_t FSGlobal::HashCallback(void *ptr, size_t size, size_t nmemb, void *data) size_t FSGlobal::FileCallback(void *ptr, size_t size, size_t nmemb, void *data) { - register unsigned int realsize = (unsigned int) (size * nmemb); + unsigned int realsize = (unsigned int) (size * nmemb); CURLCallbackData *config_data = (CURLCallbackData *)data; if ((write(config_data->fileHandle, ptr, realsize) != (int) realsize)) { @@ -124,7 +124,7 @@ size_t FSGlobal::FileCallback(void *ptr, size_t size, size_t nmemb, void *data) size_t FSGlobal::FetchUrlCallback(void *ptr, size_t size, size_t nmemb, void *data) { - register unsigned int realsize = (unsigned int) (size * nmemb); + unsigned int realsize = (unsigned int) (size * nmemb); CURLCallbackData *config_data = (CURLCallbackData *)data; /* Too much data. Do not increase buffer, but abort fetch instead. */ diff --git a/src/mod/languages/mod_v8/src/fssession.cpp b/src/mod/languages/mod_v8/src/fssession.cpp index 644576ecf9..ca135206df 100644 --- a/src/mod/languages/mod_v8/src/fssession.cpp +++ b/src/mod/languages/mod_v8/src/fssession.cpp @@ -1221,28 +1221,28 @@ JS_SESSION_FUNCTION_IMPL(Ready) { HandleScope handle_scope(info.GetIsolate()); - info.GetReturnValue().Set((this && this->_session && switch_channel_ready(switch_core_session_get_channel(this->_session))) ? true : false); + info.GetReturnValue().Set((this->_session && switch_channel_ready(switch_core_session_get_channel(this->_session))) ? true : false); } JS_SESSION_FUNCTION_IMPL(MediaReady) { HandleScope handle_scope(info.GetIsolate()); - info.GetReturnValue().Set((this && this->_session && switch_channel_media_ready(switch_core_session_get_channel(this->_session))) ? true : false); + info.GetReturnValue().Set((this->_session && switch_channel_media_ready(switch_core_session_get_channel(this->_session))) ? true : false); } JS_SESSION_FUNCTION_IMPL(RingReady) { HandleScope handle_scope(info.GetIsolate()); - info.GetReturnValue().Set((this && this->_session && switch_channel_test_flag(switch_core_session_get_channel(this->_session), CF_RING_READY)) ? true : false); + info.GetReturnValue().Set((this->_session && switch_channel_test_flag(switch_core_session_get_channel(this->_session), CF_RING_READY)) ? true : false); } JS_SESSION_FUNCTION_IMPL(Answered) { HandleScope handle_scope(info.GetIsolate()); - info.GetReturnValue().Set((this && this->_session && switch_channel_test_flag(switch_core_session_get_channel(this->_session), CF_ANSWERED)) ? true : false); + info.GetReturnValue().Set((this->_session && switch_channel_test_flag(switch_core_session_get_channel(this->_session), CF_ANSWERED)) ? true : false); } JS_SESSION_FUNCTION_IMPL(WaitForMedia) diff --git a/src/mod/languages/mod_v8/src/jsbase.cpp b/src/mod/languages/mod_v8/src/jsbase.cpp index 4fd320f439..f3cf8fd57a 100644 --- a/src/mod/languages/mod_v8/src/jsbase.cpp +++ b/src/mod/languages/mod_v8/src/jsbase.cpp @@ -154,15 +154,7 @@ void JSBase::CreateInstance(const v8::FunctionCallbackInfo& args) } else { // Create a new C++ instance #if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5 - Isolate *isolate = args.GetIsolate(); - v8::Local context = isolate->GetCurrentContext(); - v8::Local key = String::NewFromUtf8(isolate, "constructor_method"); - v8::Local privateKey = v8::Private::ForApi(isolate, key); - Handle ex; - v8::MaybeLocal hiddenValue = args.Callee()->GetPrivate(context, privateKey); - if (!hiddenValue.IsEmpty()) { - ex = Handle::Cast(hiddenValue.ToLocalChecked()); - } + Handle ex = Handle::Cast(args.Data()); #else Handle ex = Handle::Cast(args.Callee()->GetHiddenValue(String::NewFromUtf8(args.GetIsolate(), "constructor_method"))); #endif @@ -197,8 +189,10 @@ void JSBase::Register(Isolate *isolate, const js_class_definition_t *desc) // Get the context's global scope (that's where we'll put the constructor) Handle global = isolate->GetCurrentContext()->Global(); + Local data = External::New(isolate, (void *)desc->constructor); + // Create function template for our constructor it will call the JSBase::createInstance method - Handle function = FunctionTemplate::New(isolate, JSBase::CreateInstance); + Handle function = FunctionTemplate::New(isolate, JSBase::CreateInstance, data); function->SetClassName(String::NewFromUtf8(isolate, desc->name)); // Make room for saving the C++ object reference somewhere @@ -217,10 +211,6 @@ void JSBase::Register(Isolate *isolate, const js_class_definition_t *desc) } #if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5 - v8::Local context = isolate->GetCurrentContext(); - v8::Local key = String::NewFromUtf8(isolate, "constructor_method"); - v8::Local privateKey = v8::Private::ForApi(isolate, key); - function->GetFunction()->SetPrivate(context, privateKey, External::New(isolate, (void *)desc->constructor)); #else function->GetFunction()->SetHiddenValue(String::NewFromUtf8(isolate, "constructor_method"), External::New(isolate, (void *)desc->constructor)); #endif @@ -232,13 +222,14 @@ void JSBase::Register(Isolate *isolate, const js_class_definition_t *desc) void JSBase::RegisterInstance(Isolate *isolate, string name, bool autoDestroy) { // Get the context's global scope (that's where we'll put the constructor) - Handle global = isolate->GetCurrentContext()->Global(); + Local context = isolate->GetCurrentContext(); + Handle global = context->Global(); Local func = Local::Cast(global->Get(v8::String::NewFromUtf8(isolate, this->GetJSClassName().c_str()))); // Add the C++ instance as an argument, so it won't try to create another one. Handle args[] = { External::New(isolate, this), Boolean::New(isolate, autoDestroy) }; - Handle newObj = func->NewInstance(2, args); + Handle newObj = func->NewInstance(context, 2, args).ToLocalChecked(); // Add the instance to JavaScript. if (name.size() > 0) { diff --git a/src/mod/languages/mod_v8/src/jsmain.cpp b/src/mod/languages/mod_v8/src/jsmain.cpp index e162460df2..86fed7b27f 100644 --- a/src/mod/languages/mod_v8/src/jsmain.cpp +++ b/src/mod/languages/mod_v8/src/jsmain.cpp @@ -209,7 +209,7 @@ const string JSMain::GetExceptionInfo(Isolate* isolate, TryCatch* try_catch) ss << " "; } - int end = message->GetEndColumn(); + int32_t end = message->GetEndColumn(isolate->GetCurrentContext()).FromMaybe(0); for (int i = start; i < end; i++) { ss << "^"; @@ -292,7 +292,7 @@ const string JSMain::ExecuteString(const string& scriptData, const string& fileN isolate->SetData(0, this); - Handle global = ObjectTemplate::New(); + Handle global = ObjectTemplate::New(isolate); global->Set(String::NewFromUtf8(isolate, "include"), FunctionTemplate::New(isolate, Include)); global->Set(String::NewFromUtf8(isolate, "require"), FunctionTemplate::New(isolate, Include)); global->Set(String::NewFromUtf8(isolate, "log"), FunctionTemplate::New(isolate, Log)); @@ -323,7 +323,7 @@ const string JSMain::ExecuteString(const string& scriptData, const string& fileN inst->obj->RegisterInstance(isolate, inst->name, inst->auto_destroy); } - TryCatch try_catch; + TryCatch try_catch(isolate); // Compile the source code. #if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5 @@ -583,7 +583,7 @@ void JSMain::ExitScript(Isolate *isolate, const char *msg) js->forcedTerminationScriptFile = GetStackInfo(isolate, &js->forcedTerminationLineNumber); } - V8::TerminateExecution(isolate); + isolate->TerminateExecution(); } char *JSMain::GetStackInfo(Isolate *isolate, int *lineNumber)