JintIfStatement.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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 readonly JintStatement _statementConsequent;
  8. private readonly JintExpression _test;
  9. private readonly JintStatement _alternate;
  10. public JintIfStatement(Engine engine, IfStatement statement) : base(engine, statement)
  11. {
  12. _statementConsequent = Build(engine, _statement.Consequent);
  13. _test = JintExpression.Build(engine, _statement.Test);
  14. _alternate = _statement.Alternate != null ? Build(engine, _statement.Alternate) : null;
  15. }
  16. protected override Completion ExecuteInternal()
  17. {
  18. Completion result;
  19. if (TypeConverter.ToBoolean(_test.GetValue()))
  20. {
  21. result = _statementConsequent.Execute();
  22. }
  23. else if (_alternate != null)
  24. {
  25. result = _alternate.Execute();
  26. }
  27. else
  28. {
  29. return new Completion(CompletionType.Normal, null, null, Location);
  30. }
  31. return result;
  32. }
  33. }
  34. }