GetSetPropertyDescriptor.cs 1.9 KB

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