JsBoolean.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using Jint.Runtime;
  2. namespace Jint.Native;
  3. public sealed class JsBoolean : JsValue, IEquatable<JsBoolean>
  4. {
  5. public static readonly JsBoolean False = new JsBoolean(false);
  6. public static readonly JsBoolean True = new JsBoolean(true);
  7. internal static readonly object BoxedTrue = true;
  8. internal static readonly object BoxedFalse = false;
  9. internal readonly bool _value;
  10. private JsBoolean(bool value) : base(Types.Boolean)
  11. {
  12. _value = value;
  13. }
  14. internal static JsBoolean Create(bool value) => value ? True : False;
  15. public override object ToObject() => _value ? BoxedTrue : BoxedFalse;
  16. internal override bool ToBoolean() => _value;
  17. public override string ToString()
  18. {
  19. return _value ? "true" : "false";
  20. }
  21. public override bool IsLooselyEqual(JsValue value)
  22. {
  23. if (value is JsBoolean jsBoolean)
  24. {
  25. return Equals(jsBoolean);
  26. }
  27. return !value.IsNullOrUndefined() && base.IsLooselyEqual(value);
  28. }
  29. public override bool Equals(JsValue? obj)
  30. {
  31. return Equals(obj as JsBoolean);
  32. }
  33. public bool Equals(JsBoolean? other)
  34. {
  35. if (ReferenceEquals(this, other))
  36. {
  37. return true;
  38. }
  39. if (other is null)
  40. {
  41. return false;
  42. }
  43. return _value == other._value;
  44. }
  45. public override int GetHashCode()
  46. {
  47. return _value.GetHashCode();
  48. }
  49. }