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