diff --git a/v8pp/class.hpp b/v8pp/class.hpp index a1a992a..106f705 100644 --- a/v8pp/class.hpp +++ b/v8pp/class.hpp @@ -344,11 +344,20 @@ class class_ v8::HandleScope scope(isolate()); - v8::AccessorNameGetterCallback getter = property_type::template get; - v8::AccessorNameSetterCallback setter = property_type::is_readonly ? nullptr : property_type::template set; v8::Local v8_name = v8pp::to_v8(isolate(), name); v8::Local data = detail::external_data::set(isolate(), property_type(std::move(get), std::move(set))); - class_info_.class_function_template()->PrototypeTemplate()->SetNativeDataProperty(v8_name, getter, setter, data, v8::PropertyAttribute::DontDelete); + + v8::Local getter_template = wrap_function_template(isolate(), std::forward(get)); + + v8::Local setter_template; + if constexpr (!property_type::is_readonly) { + setter_template = wrap_function_template(isolate(), std::forward(set)); + } + + class_info_.class_function_template()->PrototypeTemplate() + ->SetAccessorProperty (v8_name, getter_template, setter_template, + v8::PropertyAttribute::DontDelete); + return *this; }