@@ -33,6 +33,10 @@ Value HasPropertyWithCStyleString(const CallbackInfo& info);
3333Value HasPropertyWithCppStyleString (const CallbackInfo& info);
3434
3535static bool testValue = true ;
36+ // Used to test void* Data() integrity
37+ struct UserDataHolder {
38+ int32_t value;
39+ };
3640
3741Value TestGetter (const CallbackInfo& info) {
3842 return Boolean::New (info.Env (), testValue);
@@ -42,6 +46,16 @@ void TestSetter(const CallbackInfo& info) {
4246 testValue = info[0 ].As <Boolean>();
4347}
4448
49+ Value TestGetterWithUserData (const CallbackInfo& info) {
50+ const UserDataHolder* holder = reinterpret_cast <UserDataHolder*>(info.Data ());
51+ return Number::New (info.Env (), holder->value );
52+ }
53+
54+ void TestSetterWithUserData (const CallbackInfo& info) {
55+ UserDataHolder* holder = reinterpret_cast <UserDataHolder*>(info.Data ());
56+ holder->value = info[0 ].As <Number>().Int32Value ();
57+ }
58+
4559Value TestFunction (const CallbackInfo& info) {
4660 return Boolean::New (info.Env (), true );
4761}
@@ -58,11 +72,15 @@ void DefineProperties(const CallbackInfo& info) {
5872 Env env = info.Env ();
5973
6074 Boolean trueValue = Boolean::New (env, true );
75+ UserDataHolder* holder = new UserDataHolder ();
76+ holder->value = 1234 ;
6177
6278 if (nameType.Utf8Value () == " literal" ) {
6379 obj.DefineProperties ({
6480 PropertyDescriptor::Accessor (env, obj, " readonlyAccessor" , TestGetter),
6581 PropertyDescriptor::Accessor (env, obj, " readwriteAccessor" , TestGetter, TestSetter),
82+ PropertyDescriptor::Accessor (env, obj, " readonlyAccessorWithUserData" , TestGetterWithUserData, napi_property_attributes::napi_default, reinterpret_cast <void *>(holder)),
83+ PropertyDescriptor::Accessor (env, obj, " readwriteAccessorWithUserData" , TestGetterWithUserData, TestSetterWithUserData, napi_property_attributes::napi_default, reinterpret_cast <void *>(holder)),
6684 PropertyDescriptor::Value (" readonlyValue" , trueValue),
6785 PropertyDescriptor::Value (" readwriteValue" , trueValue, napi_writable),
6886 PropertyDescriptor::Value (" enumerableValue" , trueValue, napi_enumerable),
@@ -76,6 +94,8 @@ void DefineProperties(const CallbackInfo& info) {
7694 // work around the issue.
7795 std::string str1 (" readonlyAccessor" );
7896 std::string str2 (" readwriteAccessor" );
97+ std::string str1a (" readonlyAccessorWithUserData" );
98+ std::string str2a (" readwriteAccessorWithUserData" );
7999 std::string str3 (" readonlyValue" );
80100 std::string str4 (" readwriteValue" );
81101 std::string str5 (" enumerableValue" );
@@ -85,6 +105,8 @@ void DefineProperties(const CallbackInfo& info) {
85105 obj.DefineProperties ({
86106 PropertyDescriptor::Accessor (env, obj, str1, TestGetter),
87107 PropertyDescriptor::Accessor (env, obj, str2, TestGetter, TestSetter),
108+ PropertyDescriptor::Accessor (env, obj, str1a, TestGetterWithUserData, napi_property_attributes::napi_default, reinterpret_cast <void *>(holder)),
109+ PropertyDescriptor::Accessor (env, obj, str2a, TestGetterWithUserData, TestSetterWithUserData, napi_property_attributes::napi_default, reinterpret_cast <void *>(holder)),
88110 PropertyDescriptor::Value (str3, trueValue),
89111 PropertyDescriptor::Value (str4, trueValue, napi_writable),
90112 PropertyDescriptor::Value (str5, trueValue, napi_enumerable),
@@ -97,6 +119,10 @@ void DefineProperties(const CallbackInfo& info) {
97119 Napi::String::New (env, " readonlyAccessor" ), TestGetter),
98120 PropertyDescriptor::Accessor (env, obj,
99121 Napi::String::New (env, " readwriteAccessor" ), TestGetter, TestSetter),
122+ PropertyDescriptor::Accessor (env, obj,
123+ Napi::String::New (env, " readonlyAccessorWithUserData" ), TestGetterWithUserData, napi_property_attributes::napi_default, reinterpret_cast <void *>(holder)),
124+ PropertyDescriptor::Accessor (env, obj,
125+ Napi::String::New (env, " readwriteAccessorWithUserData" ), TestGetterWithUserData, TestSetterWithUserData, napi_property_attributes::napi_default, reinterpret_cast <void *>(holder)),
100126 PropertyDescriptor::Value (
101127 Napi::String::New (env, " readonlyValue" ), trueValue),
102128 PropertyDescriptor::Value (
0 commit comments