lib/pycall/dict.rb in pycall-0.1.0.alpha.20170302 vs lib/pycall/dict.rb in pycall-0.1.0.alpha.20170307

- old
+ new

@@ -23,13 +23,20 @@ super(pyobj, LibPython.PyDict_Type) end def [](key) key = key.to_s if key.is_a? Symbol - if key.is_a? String - LibPython.PyDict_GetItemString(__pyobj__, key).to_ruby - else - LibPython.PyDict_GetItem(__pyobj__, key).to_ruby + value = if key.is_a? String + LibPython.PyDict_GetItemString(__pyobj__, key).to_ruby + else + LibPython.PyDict_GetItem(__pyobj__, key).to_ruby + end + ensure + case value + when PyObject + PyCall.incref(value) + when PyObjectWrapper + PyCall.incref(value.__pyobj__) end end def []=(key, value) key = key.to_s if key.is_a? Symbol