internal override bool TrySetValue(CodeContext context, object instance, PythonType owner, object value) { IWeakReferenceable reference; if (context.GetPythonContext().TryConvertToWeakReferenceable(instance, out reference)) { return reference.SetWeakRef(new WeakRefTracker(value, instance)); } return false; }
internal override bool TryGetValue(CodeContext context, object instance, PythonType owner, out object value) { if (instance == null) { value = this; return true; } IWeakReferenceable reference; if (context.GetPythonContext().TryConvertToWeakReferenceable(instance, out reference)) { WeakRefTracker tracker = reference.GetWeakRef(); if (tracker == null || tracker.HandlerCount == 0) { value = null; } else { value = tracker.GetHandlerCallback(0); } return true; } value = null; return false; }