WeakSetInstance.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using System.Runtime.CompilerServices;
  2. using Jint.Native.Object;
  3. using Jint.Runtime;
  4. namespace Jint.Native.WeakSet
  5. {
  6. public class WeakSetInstance : ObjectInstance
  7. {
  8. private static readonly object _tableValue = new object();
  9. private readonly ConditionalWeakTable<JsValue, object> _table;
  10. public WeakSetInstance(Engine engine) : base(engine)
  11. {
  12. _table = new ConditionalWeakTable<JsValue, object>();
  13. }
  14. internal bool WeakSetHas(JsValue value)
  15. {
  16. return _table.TryGetValue(value, out _);
  17. }
  18. internal bool WeakSetDelete(JsValue value)
  19. {
  20. return _table.Remove(value);
  21. }
  22. internal void WeakSetAdd(JsValue value)
  23. {
  24. if (value.IsPrimitive())
  25. {
  26. ExceptionHelper.ThrowTypeError(_engine, "WeakSet value must be an object, got " + value.ToString());
  27. }
  28. #if NETSTANDARD2_1
  29. _table.AddOrUpdate(value, _tableValue);
  30. #else
  31. _table.Remove(value);
  32. _table.Add(value, _tableValue);
  33. #endif
  34. }
  35. }
  36. }