JintIfStatement.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Esprima.Ast;
  2. using Jint.Runtime.Interpreter.Expressions;
  3. namespace Jint.Runtime.Interpreter.Statements
  4. {
  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(context.Engine, _statement.Test);
  17. _alternate = _statement.Alternate != null ? new ProbablyBlockStatement(_statement.Alternate) : null;
  18. }
  19. protected override Completion ExecuteInternal(EvaluationContext context)
  20. {
  21. Completion result;
  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. else
  31. {
  32. result = new Completion(CompletionType.Normal, null!, _statement);
  33. }
  34. return result;
  35. }
  36. }
  37. }