From 00f6bb9736e4cde248f06404cfbc95a11783009e Mon Sep 17 00:00:00 2001 From: Daniel Wallin Date: Mon, 1 Sep 2003 20:32:30 +0000 Subject: [PATCH] fixed bug with holders and properties --- luabind/detail/property.hpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/luabind/detail/property.hpp b/luabind/detail/property.hpp index 8ed5fdd..547bd76 100644 --- a/luabind/detail/property.hpp +++ b/luabind/detail/property.hpp @@ -129,7 +129,16 @@ namespace luabind { namespace detail // 2. key (property name) // 3. value object_rep* obj = static_cast(lua_touserdata(L, 1)); - T* ptr = reinterpret_cast(static_cast(obj->ptr()) + pointer_offset); + class_rep* crep = obj->crep(); + + void* raw_ptr; + + if (crep->has_holder()) + raw_ptr = crep->extractor()(obj->ptr()); + else + raw_ptr = obj->ptr(); + + T* ptr = reinterpret_cast(static_cast(raw_ptr) + pointer_offset); typedef typename find_conversion_policy<1,Policies>::type converter_policy; typename converter_policy::template generate_converter::type converter; @@ -160,7 +169,16 @@ namespace luabind { namespace detail // 1. object_rep // 2. key (property name) object_rep* obj = static_cast(lua_touserdata(L, 1)); - T* ptr = reinterpret_cast(static_cast(obj->ptr()) + pointer_offset); + class_rep* crep = obj->crep(); + + void* raw_ptr; + + if (crep->has_holder()) + raw_ptr = crep->extractor()(obj->ptr()); + else + raw_ptr = obj->ptr(); + + T* ptr = reinterpret_cast(static_cast(raw_ptr) + pointer_offset); typedef typename find_conversion_policy<0,Policies>::type converter_policy; typename converter_policy::template generate_converter::type converter; -- 2.11.4.GIT