JintIfStatement.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Esprima.Ast;
  2. using Jint.Native;
  3. using Jint.Runtime.Interpreter.Expressions;
  4. namespace Jint.Runtime.Interpreter.Statements;
  5. internal sealed class JintIfStatement : JintStatement<IfStatement>
  6. {
  7. private ProbablyBlockStatement _statementConsequent;
  8. private JintExpression _test = null!;
  9. private ProbablyBlockStatement? _alternate;
  10. public JintIfStatement(IfStatement statement) : base(statement)
  11. {
  12. }
  13. protected override void Initialize(EvaluationContext context)
  14. {
  15. _statementConsequent = new ProbablyBlockStatement(_statement.Consequent);
  16. _test = JintExpression.Build(_statement.Test);
  17. _alternate = _statement.Alternate != null ? new ProbablyBlockStatement(_statement.Alternate) : null;
  18. }
  19. protected override Completion ExecuteInternal(EvaluationContext context)
  20. {
  21. Completion result = default;
  22. if (TypeConverter.ToBoolean(_test.GetValue(context)))
  23. {
  24. result = _statementConsequent.Execute(context);
  25. }
  26. else if (_alternate != null)
  27. {
  28. result = _alternate.Value.Execute(context);
  29. }
  30. return result.UpdateEmpty(JsValue.Undefined);
  31. }
  32. }