2
0

GetSetPropertyDescriptor.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. _flags |= PropertyFlag.NonData;
  12. _get = get;
  13. _set = set;
  14. }
  15. internal GetSetPropertyDescriptor(JsValue? get, JsValue? set, PropertyFlag flags)
  16. : base(null, flags)
  17. {
  18. _flags |= PropertyFlag.NonData;
  19. _flags &= ~PropertyFlag.WritableSet;
  20. _flags &= ~PropertyFlag.Writable;
  21. _get = get;
  22. _set = set;
  23. }
  24. public GetSetPropertyDescriptor(PropertyDescriptor descriptor) : base(descriptor)
  25. {
  26. _flags |= PropertyFlag.NonData;
  27. _flags &= ~PropertyFlag.WritableSet;
  28. _flags &= ~PropertyFlag.Writable;
  29. _get = descriptor.Get;
  30. _set = descriptor.Set;
  31. }
  32. public override JsValue? Get => _get;
  33. public override JsValue? Set => _set;
  34. internal void SetGet(JsValue getter)
  35. {
  36. _get = getter;
  37. }
  38. internal void SetSet(JsValue setter)
  39. {
  40. _set = setter;
  41. }
  42. internal sealed class ThrowerPropertyDescriptor : PropertyDescriptor
  43. {
  44. private readonly Engine _engine;
  45. private JsValue? _thrower;
  46. public ThrowerPropertyDescriptor(Engine engine, PropertyFlag flags)
  47. : base(flags | PropertyFlag.CustomJsValue)
  48. {
  49. _flags |= PropertyFlag.NonData;
  50. _engine = engine;
  51. }
  52. public override JsValue Get => _thrower ??= _engine.Realm.Intrinsics.ThrowTypeError;
  53. public override JsValue Set => _thrower ??= _engine.Realm.Intrinsics.ThrowTypeError;
  54. protected internal override JsValue? CustomValue
  55. {
  56. set => ExceptionHelper.ThrowInvalidOperationException("making changes to throw type error property's descriptor is not allowed");
  57. }
  58. }
  59. }
  60. }