2
0

JsBoolean.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. protected internal 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(object? obj)
  30. {
  31. return Equals(obj as JsBoolean);
  32. }
  33. public override bool Equals(JsValue? other)
  34. {
  35. return Equals(other as JsBoolean);
  36. }
  37. public bool Equals(JsBoolean? other)
  38. {
  39. if (ReferenceEquals(this, other))
  40. {
  41. return true;
  42. }
  43. if (other is null)
  44. {
  45. return false;
  46. }
  47. return _value == other._value;
  48. }
  49. public override int GetHashCode()
  50. {
  51. return _value.GetHashCode();
  52. }
  53. }