JintLogicalAndExpression.cs 867 B

12345678910111213141516171819202122232425262728293031323334
  1. using Esprima.Ast;
  2. using Jint.Native;
  3. namespace Jint.Runtime.Interpreter.Expressions
  4. {
  5. internal sealed class JintLogicalAndExpression : JintExpression
  6. {
  7. private readonly JintExpression _left;
  8. private readonly JintExpression _right;
  9. public JintLogicalAndExpression(Engine engine, BinaryExpression expression) : base(engine, expression)
  10. {
  11. _left = Build(engine, expression.Left);
  12. _right = Build(engine, expression.Right);
  13. }
  14. protected override object EvaluateInternal()
  15. {
  16. var left = _left.GetValue();
  17. if (left is JsBoolean b && !b._value)
  18. {
  19. return b;
  20. }
  21. if (!TypeConverter.ToBoolean(left))
  22. {
  23. return left;
  24. }
  25. return _right.GetValue();
  26. }
  27. }
  28. }