Remove an unnecessary shared_ptr reference count increment in Ruby wrappers

When wrapping STL containers, remove a shared_ptr reference count
increment when an upcast is needed when checking type conversion
in traits_check::check.
This commit is contained in:
William S Fulton 2020-02-13 19:46:05 +00:00
commit 6cec69ef7b

View file

@ -13,12 +13,13 @@ namespace swig {
template <class Type> template <class Type>
struct traits_asptr<std::shared_ptr<Type> > { struct traits_asptr<std::shared_ptr<Type> > {
static int asptr(VALUE obj, std::shared_ptr<Type> **val) { static int asptr(VALUE obj, std::shared_ptr<Type> **val) {
std::shared_ptr<Type> *p = 0; int res = SWIG_ERROR;
swig_type_info *descriptor = type_info<std::shared_ptr<Type> >(); swig_type_info *descriptor = type_info<std::shared_ptr<Type> >();
swig_ruby_owntype newmem = {0, 0};
int res = descriptor ? SWIG_ConvertPtrAndOwn(obj, (void **)&p, descriptor, 0, &newmem) : SWIG_ERROR;
if (SWIG_IsOK(res)) {
if (val) { if (val) {
std::shared_ptr<Type> *p = 0;
swig_ruby_owntype newmem = {0, 0};
res = descriptor ? SWIG_ConvertPtrAndOwn(obj, (void **)&p, descriptor, 0, &newmem) : SWIG_ERROR;
if (SWIG_IsOK(res)) {
if (*val) { if (*val) {
**val = p ? *p : std::shared_ptr<Type>(); **val = p ? *p : std::shared_ptr<Type>();
} else { } else {
@ -28,10 +29,12 @@ namespace swig {
res = SWIG_ERROR; res = SWIG_ERROR;
} }
} }
}
if (newmem.own & SWIG_CAST_NEW_MEMORY) if (newmem.own & SWIG_CAST_NEW_MEMORY)
delete p; delete p;
} }
} else {
res = descriptor ? SWIG_ConvertPtr(obj, 0, descriptor, 0) : SWIG_ERROR;
}
return res; return res;
} }
}; };