JintLogicalOrExpression.cs 864 B

12345678910111213141516171819202122232425262728293031323334
  1. using Esprima.Ast;
  2. using Jint.Native;
  3. namespace Jint.Runtime.Interpreter.Expressions
  4. {
  5. internal sealed class JintLogicalOrExpression : JintExpression
  6. {
  7. private readonly JintExpression _left;
  8. private readonly JintExpression _right;
  9. public JintLogicalOrExpression(BinaryExpression expression) : base(expression)
  10. {
  11. _left = Build(expression.Left);
  12. _right = Build(expression.Right);
  13. }
  14. protected override object EvaluateInternal(EvaluationContext context)
  15. {
  16. var left = _left.GetValue(context);
  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(context);
  26. }
  27. }
  28. }