JintLogicalAndExpression.cs 993 B

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