public static object __new__(CodeContext context, PythonType cls, object @object) { IWeakReferenceable iwr = ConvertToWeakReferenceable(context.LanguageContext, @object); if (cls == DynamicHelpers.GetPythonTypeFromType(typeof(@ref))) { WeakRefTracker wrt = iwr.GetWeakRef(); if (wrt != null) { for (int i = 0; i < wrt.HandlerCount; i++) { if (wrt.GetHandlerCallback(i) == null && wrt.GetWeakRef(i) is @ref) { return(wrt.GetWeakRef(i)); } } } return(new @ref(context, @object)); } else { return(cls.CreateInstance(context, @object)); } }
public static object MakeNew(PythonType cls, object @object) { IWeakReferenceable iwr = @object as IWeakReferenceable; if (iwr == null) { throw Ops.TypeError("cannot create weak reference to '{0}' object", Ops.GetDynamicType(@object).__name__); } if (cls == Ops.GetDynamicTypeFromType(typeof(PythonWeakReference))) { WeakRefTracker wrt = iwr.GetWeakRef(); if (wrt != null) { for (int i = 0; i < wrt.HandlerCount; i++) { if (wrt.GetHandlerCallback(i) == null && wrt.GetWeakRef(i) is PythonWeakReference) { return(wrt.GetWeakRef(i)); } } } return(new PythonWeakReference(@object)); } else { return(cls.ctor.Call(cls, @object)); } }
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); }
internal static object MakeNew(object @object, object callback) { IWeakReferenceable iwr = @object as IWeakReferenceable; if (iwr == null) { throw Ops.TypeError("cannot create weak reference to '{0}' object", Ops.GetDynamicType(@object).__name__); } if (callback == null) { WeakRefTracker wrt = iwr.GetWeakRef(); if (wrt != null) { for (int i = 0; i < wrt.HandlerCount; i++) { if (wrt.GetHandlerCallback(i) == null && wrt.GetWeakRef(i) is PythonCallableWeakRefProxy) { return(wrt.GetWeakRef(i)); } } } } return(new PythonCallableWeakRefProxy(@object, callback)); }
internal static object MakeNew(CodeContext /*!*/ context, object @object, object callback) { IWeakReferenceable iwr = ConvertToWeakReferenceable(context.LanguageContext, @object); if (callback == null) { WeakRefTracker wrt = iwr.GetWeakRef(); if (wrt != null) { for (int i = 0; i < wrt.HandlerCount; i++) { if (wrt.GetHandlerCallback(i) == null && wrt.GetWeakRef(i) is weakproxy) { return(wrt.GetWeakRef(i)); } } } } return(new weakproxy(context, @object, callback)); }