@@ -293,7 +293,7 @@ static std::string getArrayElementType(v8::Local<v8::Array> array, uint32_t arra
293293 }
294294 else if (arg->IsObject ()) {
295295 v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast (arg);
296- v8::Local<v8::Value> isJavaLong = obj-> GetHiddenValue (Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG ).ToLocalChecked ());
296+ v8::Local<v8::Value> isJavaLong = GetHiddenValue (obj, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG ).ToLocalChecked ());
297297 if (!isJavaLong.IsEmpty () && isJavaLong->IsBoolean ()) {
298298 types.insert (kLong );
299299 }
@@ -367,12 +367,12 @@ jobject v8ToJava(JNIEnv* env, v8::Local<v8::Value> arg) {
367367 if (arg->IsObject ()) {
368368 v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast (arg);
369369
370- v8::Local<v8::Value> isJavaObject = obj-> GetHiddenValue (Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_OBJECT ).ToLocalChecked ());
370+ v8::Local<v8::Value> isJavaObject = GetHiddenValue (obj, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_OBJECT ).ToLocalChecked ());
371371 if (!isJavaObject.IsEmpty () && isJavaObject->IsBoolean ()) {
372372 return v8ToJava_javaObject (env, obj);
373373 }
374374
375- v8::Local<v8::Value> isJavaLong = obj-> GetHiddenValue (Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG ).ToLocalChecked ());
375+ v8::Local<v8::Value> isJavaLong = GetHiddenValue (obj, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG ).ToLocalChecked ());
376376 if (!isJavaLong.IsEmpty () && isJavaLong->IsBoolean ()) {
377377 return v8ToJava_javaLong (env, obj);
378378 }
@@ -709,7 +709,7 @@ v8::Local<v8::Value> javaToV8(Java* java, JNIEnv* env, jobject obj, DynamicProxy
709709 v8::Local<v8::Value> v8Result = Nan::New<v8::NumberObject>((double )result);
710710 v8::NumberObject* v8ResultNumberObject = v8::NumberObject::Cast (*v8Result);
711711 v8ResultNumberObject->Set (Nan::New<v8::String>(" longValue" ).ToLocalChecked (), Nan::New<v8::String>(strValue.c_str ()).ToLocalChecked ());
712- v8ResultNumberObject-> SetHiddenValue (Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG ).ToLocalChecked (), Nan::New<v8::Boolean>(true ));
712+ SetHiddenValue (v8ResultNumberObject, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG ).ToLocalChecked (), Nan::New<v8::Boolean>(true ));
713713 return v8Result;
714714 }
715715 case TYPE_INT :
@@ -930,3 +930,50 @@ jarray javaGetArgsForConstructor(JNIEnv *env, jobject method, jarray args) {
930930 checkJavaException (env);
931931 return result;
932932}
933+
934+ #if (NODE_MODULE_VERSION > 48)
935+ // The two methods below were copied from
936+ // https://github.com/electron/electron?branch=master&filepath=atom/common/api/atom_api_v8_util.cc
937+ // Copyright (c) 2013 GitHub, Inc.
938+ // Use of this source code is governed by the MIT license.
939+
940+ v8::Local<v8::Value> GetHiddenValue (v8::Local<v8::Object> object, v8::Local<v8::String> key) {
941+ v8::Local<v8::Context> context = v8::Isolate::GetCurrent ()->GetCurrentContext ();
942+ v8::Local<v8::Private> privateKey = v8::Private::ForApi (v8::Isolate::GetCurrent (), key);
943+ v8::Local<v8::Value> value;
944+ v8::Maybe<bool > result = object->HasPrivate (context, privateKey);
945+ if (!(result.IsJust () && result.FromJust ()))
946+ return v8::Local<v8::Value>();
947+ if (object->GetPrivate (context, privateKey).ToLocal (&value))
948+ return value;
949+ return v8::Local<v8::Value>();
950+ }
951+
952+ void SetHiddenValue (v8::NumberObject* object, v8::Local<v8::String> key, v8::Local<v8::Value> value) {
953+ if (value.IsEmpty ())
954+ return ;
955+ v8::Local<v8::Context> context = v8::Isolate::GetCurrent ()->GetCurrentContext ();
956+ v8::Local<v8::Private> privateKey = v8::Private::ForApi (v8::Isolate::GetCurrent (), key);
957+ object->SetPrivate (context, privateKey, value);
958+ }
959+
960+ void SetHiddenValue (v8::Local<v8::Object> object, v8::Local<v8::String> key, v8::Local<v8::Value> value) {
961+ if (value.IsEmpty ())
962+ return ;
963+ v8::Local<v8::Context> context = v8::Isolate::GetCurrent ()->GetCurrentContext ();
964+ v8::Local<v8::Private> privateKey = v8::Private::ForApi (v8::Isolate::GetCurrent (), key);
965+ object->SetPrivate (context, privateKey, value);
966+ }
967+ #else
968+ v8::Local<v8::Value> GetHiddenValue (v8::Local<v8::Object> object, v8::Local<v8::String> key) {
969+ return object->GetHiddenValue (key);
970+ }
971+
972+ void SetHiddenValue (v8::NumberObject* object, v8::Local<v8::String> key, v8::Local<v8::Value> value) {
973+ object->SetHiddenValue (key, value);
974+ }
975+
976+ void SetHiddenValue (v8::Local<v8::Object> object, v8::Local<v8::String> key, v8::Local<v8::Value> value) {
977+ object->SetHiddenValue (key, value);
978+ }
979+ #endif
0 commit comments