GetSetPropertyDescriptor.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using Jint.Native;
  2. namespace Jint.Runtime.Descriptors;
  3. public sealed class GetSetPropertyDescriptor : PropertyDescriptor
  4. {
  5. private JsValue? _get;
  6. private JsValue? _set;
  7. public GetSetPropertyDescriptor(JsValue? get, JsValue? set, bool? enumerable = null, bool? configurable = null)
  8. : base(null, writable: null, enumerable: enumerable, configurable: configurable)
  9. {
  10. _flags |= PropertyFlag.NonData;
  11. _get = get;
  12. _set = set;
  13. }
  14. internal GetSetPropertyDescriptor(JsValue? get, JsValue? set, PropertyFlag flags)
  15. : base(null, flags)
  16. {
  17. _flags |= PropertyFlag.NonData;
  18. _flags &= ~PropertyFlag.WritableSet;
  19. _flags &= ~PropertyFlag.Writable;
  20. _get = get;
  21. _set = set;
  22. }
  23. public GetSetPropertyDescriptor(PropertyDescriptor descriptor) : base(descriptor)
  24. {
  25. _flags |= PropertyFlag.NonData;
  26. _flags &= ~PropertyFlag.WritableSet;
  27. _flags &= ~PropertyFlag.Writable;
  28. _get = descriptor.Get;
  29. _set = descriptor.Set;
  30. }
  31. public override JsValue? Get => _get;
  32. public override JsValue? Set => _set;
  33. internal void SetGet(JsValue getter)
  34. {
  35. _get = getter;
  36. }
  37. internal void SetSet(JsValue setter)
  38. {
  39. _set = setter;
  40. }
  41. internal sealed class ThrowerPropertyDescriptor : PropertyDescriptor
  42. {
  43. private readonly Engine _engine;
  44. private JsValue? _thrower;
  45. public ThrowerPropertyDescriptor(Engine engine, PropertyFlag flags)
  46. : base(flags | PropertyFlag.CustomJsValue)
  47. {
  48. _flags |= PropertyFlag.NonData;
  49. _engine = engine;
  50. }
  51. public override JsValue Get => _thrower ??= _engine.Realm.Intrinsics.ThrowTypeError;
  52. public override JsValue Set => _thrower ??= _engine.Realm.Intrinsics.ThrowTypeError;
  53. protected internal override JsValue? CustomValue
  54. {
  55. set => Throw.InvalidOperationException("making changes to throw type error property's descriptor is not allowed");
  56. }
  57. }
  58. }