/* 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 (info.GetIsolate()->IsExecutionTerminating()) return;\
+ if (v8::V8::IsExecutionTerminating(info.GetIsolate())) 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(isolate);
+ Handle<ObjectTemplate> global = ObjectTemplate::New();
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(isolate);
+ TryCatch try_catch;
// Compile the source code.
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
autoDestroy = args[1]->BooleanValue();
} else {
// Create a new C++ instance
-#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=6
- Handle<External> ex = Handle<External>::Cast(args.Data());
-#else
+#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());
+ }
+#else
Handle<External> ex = Handle<External>::Cast(args.Callee()->GetHiddenValue(String::NewFromUtf8(args.GetIsolate(), "constructor_method")));
#endif
void JSBase::RegisterInstance(Isolate *isolate, string name, bool autoDestroy)
{
// Get the context's global scope (that's where we'll put the constructor)
- Local<Context> context = isolate->GetCurrentContext();
- Handle<Object> global = context->Global();
+ Handle<Object> global = isolate->GetCurrentContext()->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(context, 2, args).ToLocalChecked();
+ Handle<Object> newObj = func->NewInstance(2, args);
// Add the instance to JavaScript.
if (name.size() > 0) {
ss << " ";
}
- int32_t end = message->GetEndColumn(isolate->GetCurrentContext()).FromMaybe(0);
+ int end = message->GetEndColumn();
for (int i = start; i < end; i++) {
ss << "^";
isolate->SetData(0, this);
- Handle<ObjectTemplate> global = ObjectTemplate::New(isolate);
+ Handle<ObjectTemplate> global = ObjectTemplate::New();
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(isolate);
+ TryCatch try_catch;
// Compile the source code.
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
js->forcedTerminationScriptFile = GetStackInfo(isolate, &js->forcedTerminationLineNumber);
}
- isolate->TerminateExecution();
+ V8::TerminateExecution(isolate);
}
char *JSMain::GetStackInfo(Isolate *isolate, int *lineNumber)