pep-550: Add a return (#346)

* pep-550: Add a return

* pep-550: Clarify that ContextItem.get() cache uses a borrowed ref
This commit is contained in:
Yury Selivanov 2017-08-15 21:00:59 -04:00 committed by GitHub
parent 46e3edcbb0
commit f67bb4e465
1 changed files with 7 additions and 1 deletions

View File

@ -222,6 +222,8 @@ follows (in pseudo-code)::
if self in local_context: if self in local_context:
return local_context[self] return local_context[self]
return None
def set(self, value): def set(self, value):
tstate = PyThreadState_Get() tstate = PyThreadState_Get()
@ -838,13 +840,17 @@ The above two fields allow implementing a fast cache path in
value = mapping[self] value = mapping[self]
break break
self.last_value = value self.last_value = value # borrowed ref
self.last_tstate_id = tstate.unique_id self.last_tstate_id = tstate.unique_id
self.last_ver = tstate.execution_context_ver self.last_ver = tstate.execution_context_ver
self.last_deallocs = tstate.interp.context_item_deallocs self.last_deallocs = tstate.interp.context_item_deallocs
return value return value
Note that ``last_value`` is a borrowed reference. The assumption
is that if all counters tests are OK, the object will be alive.
This allows the CI values to be properly GCed.
This is similar to the trick that decimal C implementation uses This is similar to the trick that decimal C implementation uses
for caching the current decimal context, and will have the same for caching the current decimal context, and will have the same
performance characteristics, but available to all performance characteristics, but available to all