JsWeakRef.cs 624 B

123456789101112131415161718192021222324252627
  1. using Jint.Native.Object;
  2. namespace Jint.Native;
  3. /// <summary>
  4. /// https://tc39.es/ecma262/#sec-properties-of-weak-ref-instances
  5. /// </summary>
  6. internal sealed class JsWeakRef : ObjectInstance
  7. {
  8. private readonly WeakReference<JsValue> _weakRefTarget;
  9. public JsWeakRef(Engine engine, JsValue target) : base(engine)
  10. {
  11. _weakRefTarget = new WeakReference<JsValue>(target);
  12. }
  13. public JsValue WeakRefDeref()
  14. {
  15. if (_weakRefTarget.TryGetTarget(out var target))
  16. {
  17. _engine.AddToKeptObjects(target);
  18. return target;
  19. }
  20. return Undefined;
  21. }
  22. }