JintLogicalAndExpression.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Jint.Native;
  2. namespace Jint.Runtime.Interpreter.Expressions
  3. {
  4. internal sealed class JintLogicalAndExpression : JintExpression
  5. {
  6. private JintExpression _left = null!;
  7. private JintExpression _right = null!;
  8. private bool _initialized;
  9. public JintLogicalAndExpression(BinaryExpression expression) : base(expression)
  10. {
  11. }
  12. private void Initialize()
  13. {
  14. var expression = (BinaryExpression) _expression;
  15. _left = Build(expression.Left);
  16. _right = Build(expression.Right);
  17. }
  18. protected override object EvaluateInternal(EvaluationContext context)
  19. {
  20. if (!_initialized)
  21. {
  22. Initialize();
  23. _initialized = true;
  24. }
  25. var left = _left.GetValue(context);
  26. if (left is JsBoolean b && !b._value)
  27. {
  28. return b;
  29. }
  30. if (!TypeConverter.ToBoolean(left))
  31. {
  32. return left;
  33. }
  34. return _right.GetValue(context);
  35. }
  36. }
  37. }