@@ -8,8 +8,10 @@ namespace util {
88using v8::ALL_PROPERTIES;
99using v8::Array;
1010using v8::ArrayBufferView;
11+ using v8::BigInt;
1112using v8::Boolean;
1213using v8::Context;
14+ using v8::External;
1315using v8::FunctionCallbackInfo;
1416using v8::FunctionTemplate;
1517using v8::Global;
@@ -18,6 +20,7 @@ using v8::Integer;
1820using v8::Isolate;
1921using v8::KeyCollectionMode;
2022using v8::Local;
23+ using v8::MaybeLocal;
2124using v8::Object;
2225using v8::ONLY_CONFIGURABLE;
2326using v8::ONLY_ENUMERABLE;
@@ -67,6 +70,18 @@ static void GetConstructorName(
6770 args.GetReturnValue ().Set (name);
6871}
6972
73+ static void GetExternalValue (
74+ const FunctionCallbackInfo<Value>& args) {
75+ CHECK (args[0 ]->IsExternal ());
76+ Isolate* isolate = args.GetIsolate ();
77+ Local<External> external = args[0 ].As <External>();
78+
79+ void * ptr = external->Value ();
80+ uint64_t value = reinterpret_cast <uint64_t >(ptr);
81+ Local<BigInt> ret = BigInt::NewFromUnsigned (isolate, value);
82+ args.GetReturnValue ().Set (ret);
83+ }
84+
7085static void GetPromiseDetails (const FunctionCallbackInfo<Value>& args) {
7186 // Return undefined if it's not a Promise.
7287 if (!args[0 ]->IsPromise ())
@@ -296,6 +311,7 @@ void Initialize(Local<Object> target,
296311 env->SetMethodNoSideEffect (target, " getOwnNonIndexProperties" ,
297312 GetOwnNonIndexProperties);
298313 env->SetMethodNoSideEffect (target, " getConstructorName" , GetConstructorName);
314+ env->SetMethodNoSideEffect (target, " getExternalValue" , GetExternalValue);
299315 env->SetMethod (target, " sleep" , Sleep);
300316
301317 env->SetMethod (target, " arrayBufferViewHasBuffer" , ArrayBufferViewHasBuffer);
0 commit comments