/* 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 */
isolate->SetData(0, js);
// New global template
- Handle<ObjectTemplate> global = ObjectTemplate::New();
+ Handle<ObjectTemplate> global = ObjectTemplate::New(isolate);
if (global.IsEmpty()) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to create JS global object template\n");
free(path);
}
- TryCatch try_catch;
+ TryCatch try_catch(isolate);
// Compile the source code.
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
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);
{
HandleScope handle_scope(info.GetIsolate());
- if (!this) {
- info.GetReturnValue().Set(false);
- return;
- }
-
String::Utf8Value str(property);
if (!strcmp(js_safe_str(*str), "path")) {
size_t FSCURL::FileCallback(void *ptr, size_t size, size_t nmemb, void *data)
{
FSCURL *obj = static_cast<FSCURL *>(data);
- register unsigned int realsize = (unsigned int) (size * nmemb);
+ unsigned int realsize = (unsigned int) (size * nmemb);
uint32_t argc = 0;
Handle<Value> argv[4];
{
HandleScope handle_scope(info.GetIsolate());
- if (!this) {
- info.GetReturnValue().Set(false);
- return;
- }
-
String::Utf8Value str(property);
if (!strcmp(js_safe_str(*str), "dsn")) {
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;
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)) {
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. */
{
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)
} else {
// Create a new C++ instance
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
- Isolate *isolate = args.GetIsolate();
- v8::Local<v8::Context> context = isolate->GetCurrentContext();
- v8::Local<v8::String> key = String::NewFromUtf8(isolate, "constructor_method");
- v8::Local<v8::Private> privateKey = v8::Private::ForApi(isolate, key);
- Handle<External> ex;
- v8::MaybeLocal<v8::Value> hiddenValue = args.Callee()->GetPrivate(context, privateKey);
- if (!hiddenValue.IsEmpty()) {
- ex = Handle<External>::Cast(hiddenValue.ToLocalChecked());
- }
+ Handle<External> ex = Handle<External>::Cast(args.Data());
#else
Handle<External> ex = Handle<External>::Cast(args.Callee()->GetHiddenValue(String::NewFromUtf8(args.GetIsolate(), "constructor_method")));
#endif
// Get the context's global scope (that's where we'll put the constructor)
Handle<Object> global = isolate->GetCurrentContext()->Global();
+ Local<External> data = External::New(isolate, (void *)desc->constructor);
+
// Create function template for our constructor it will call the JSBase::createInstance method
- Handle<FunctionTemplate> function = FunctionTemplate::New(isolate, JSBase::CreateInstance);
+ Handle<FunctionTemplate> function = FunctionTemplate::New(isolate, JSBase::CreateInstance, data);
function->SetClassName(String::NewFromUtf8(isolate, desc->name));
// Make room for saving the C++ object reference somewhere
}
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
- v8::Local<v8::Context> context = isolate->GetCurrentContext();
- v8::Local<v8::String> key = String::NewFromUtf8(isolate, "constructor_method");
- v8::Local<v8::Private> 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
void JSBase::RegisterInstance(Isolate *isolate, string name, bool autoDestroy)
{
// Get the context's global scope (that's where we'll put the constructor)
- Handle<Object> global = isolate->GetCurrentContext()->Global();
+ Local<Context> context = isolate->GetCurrentContext();
+ Handle<Object> global = context->Global();
Local<Function> func = Local<Function>::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<Value> args[] = { External::New(isolate, this), Boolean::New(isolate, autoDestroy) };
- Handle<Object> newObj = func->NewInstance(2, args);
+ Handle<Object> newObj = func->NewInstance(context, 2, args).ToLocalChecked();
// Add the instance to JavaScript.
if (name.size() > 0) {
ss << " ";
}
- int end = message->GetEndColumn();
+ int32_t end = message->GetEndColumn(isolate->GetCurrentContext()).FromMaybe(0);
for (int i = start; i < end; i++) {
ss << "^";
isolate->SetData(0, this);
- Handle<ObjectTemplate> global = ObjectTemplate::New();
+ Handle<ObjectTemplate> 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));
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
js->forcedTerminationScriptFile = GetStackInfo(isolate, &js->forcedTerminationLineNumber);
}
- V8::TerminateExecution(isolate);
+ isolate->TerminateExecution();
}
char *JSMain::GetStackInfo(Isolate *isolate, int *lineNumber)