From 044cf9e4c406994b85571a4459a30906323b3cb0 Mon Sep 17 00:00:00 2001 From: "jacobsologub@gmail.com" Date: Mon, 2 Jun 2025 01:01:32 -0400 Subject: [PATCH] Fixing class property getter/setter functionality using SetAccessorProperty https://www.mail-archive.com/v8-dev@googlegroups.com/msg162123.html --- v8pp/class.hpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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; }