From b20b5f1e41e7680c470d8311e9590282b6718553 Mon Sep 17 00:00:00 2001 From: Sébastien Helleu Date: Mon, 11 Nov 2019 10:29:08 +0100 Subject: [WIP] javascript: add compatibility with v8 version 6.8 This is work in progress, the javascript plugin does not yet compile. Compatibility with old v8 lib will be added later, for now I'm focused on compiling the plugin with v8 version 6.8. --- cmake/FindV8.cmake | 1 + src/plugins/javascript/weechat-js-api.cpp | 22 ++++++++++++---------- src/plugins/javascript/weechat-js-v8.cpp | 23 ++++++++++++++++------- src/plugins/javascript/weechat-js.cpp | 14 ++++++++++---- 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/cmake/FindV8.cmake b/cmake/FindV8.cmake index 1da4ab3ae..573ce0b5e 100644 --- a/cmake/FindV8.cmake +++ b/cmake/FindV8.cmake @@ -33,6 +33,7 @@ endif() set(V8_INC_PATHS /usr/include + /usr/include/v8 ${CMAKE_INCLUDE_PATH} ) find_path(V8_INCLUDE_DIR v8.h PATHS ${V8_INC_PATHS}) diff --git a/src/plugins/javascript/weechat-js-api.cpp b/src/plugins/javascript/weechat-js-api.cpp index f4f973a1f..a301a3d3b 100644 --- a/src/plugins/javascript/weechat-js-api.cpp +++ b/src/plugins/javascript/weechat-js-api.cpp @@ -41,14 +41,14 @@ extern "C" #define API_DEF_FUNC(__name) \ weechat_obj->Set( \ - v8::String::New(#__name), \ + v8::String::NewFromUtf8(isolate, #__name), \ v8::FunctionTemplate::New(weechat_js_api_##__name)); #define API_DEF_CONST_INT(__name) \ - weechat_obj->Set(v8::String::New(#__name), \ - v8::Integer::New(__name)); + weechat_obj->Set(v8::String::NewFromUtf8(#__name), \ + v8::Integer::NewFromUtf8(__name)); #define API_DEF_CONST_STR(__name) \ - weechat_obj->Set(v8::String::New(#__name), \ - v8::String::New(__name)); + weechat_obj->Set(v8::String::NewFromUtf8(#__name), \ + v8::String::NewFromUtf8(__name)); #define API_FUNC(__name) \ static v8::Handle \ weechat_js_api_##__name(const v8::Arguments &args) @@ -98,19 +98,20 @@ extern "C" #define API_RETURN_OK return v8::True(); #define API_RETURN_ERROR return v8::False(); #define API_RETURN_EMPTY \ - return v8::String::New(""); + return v8::String::NewFromUtf8(""); #define API_RETURN_STRING(__string) \ if (__string) \ - return v8::String::New(__string); \ - return v8::String::New("") + return v8::String::NewFromUtf8(__string); \ + return v8::String::NewFromUtf8("") #define API_RETURN_STRING_FREE(__string) \ if (__string) \ { \ - v8::Handle return_value = v8::String::New(__string); \ + v8::Handle return_value = \ + v8::String::NewFromUtf8(__string); \ free ((void *)__string); \ return return_value; \ } \ - return v8::String::New("") + return v8::String::NewFromUtf8("") #define API_RETURN_INT(__int) \ return v8::Integer::New(__int) #define API_RETURN_LONG(__int) \ @@ -4894,6 +4895,7 @@ void WeechatJsV8::loadLibs() { v8::Local weechat_obj = v8::ObjectTemplate::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); /* constants */ API_DEF_CONST_INT(WEECHAT_RC_OK); diff --git a/src/plugins/javascript/weechat-js-v8.cpp b/src/plugins/javascript/weechat-js-v8.cpp index c78200973..d890b10c3 100644 --- a/src/plugins/javascript/weechat-js-v8.cpp +++ b/src/plugins/javascript/weechat-js-v8.cpp @@ -49,7 +49,9 @@ using namespace v8; WeechatJsV8::WeechatJsV8() { - this->global = ObjectTemplate::New(); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + + this->global = ObjectTemplate::New(isolate); } /* @@ -80,7 +82,9 @@ WeechatJsV8::load(Handle source) bool WeechatJsV8::load(const char *source) { - Handle src = String::New(source); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + + Handle src = String::NewFromUtf8(isolate, source); return this->load(src); } @@ -92,7 +96,8 @@ WeechatJsV8::load(const char *source) bool WeechatJsV8::execScript() { - v8::TryCatch trycatch; + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::TryCatch trycatch(isolate); this->context = Context::New(NULL, this->global); Context::Scope context_scope(this->context); @@ -126,7 +131,8 @@ WeechatJsV8::functionExists(const char *function) Context::Scope context_scope(this->context); Handle global = this->context->Global(); - Handle value = global->Get(String::New(function)); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + Handle value = global->Get(String::NewFromUtf8(isolate, function)); return value->IsFunction(); } @@ -137,12 +143,13 @@ WeechatJsV8::functionExists(const char *function) Handle WeechatJsV8::execFunction(const char *function, int argc, Handle *argv) { - v8::TryCatch trycatch; + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::TryCatch trycatch(isolate); Context::Scope context_scope(this->context); Handle global = this->context->Global(); - Handle value = global->Get(String::New(function)); + Handle value = global->Get(String::NewFromUtf8(isolate, function)); Handle func = Handle::Cast(value); Handle res = func->Call(global, argc, argv); @@ -170,5 +177,7 @@ WeechatJsV8::addGlobal(Handle key, Handle