JintSequenceExpression.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Esprima.Ast;
  2. using Jint.Native;
  3. namespace Jint.Runtime.Interpreter.Expressions
  4. {
  5. internal sealed class JintSequenceExpression : JintExpression
  6. {
  7. private JintExpression[] _expressions = Array.Empty<JintExpression>();
  8. public JintSequenceExpression(SequenceExpression expression) : base(expression)
  9. {
  10. _initialized = false;
  11. }
  12. protected override void Initialize(EvaluationContext context)
  13. {
  14. var engine = context.Engine;
  15. var expression = (SequenceExpression) _expression;
  16. ref readonly var expressions = ref expression.Expressions;
  17. var temp = new JintExpression[expressions.Count];
  18. for (var i = 0; i < (uint) temp.Length; i++)
  19. {
  20. temp[i] = Build(engine, expressions[i]);
  21. }
  22. _expressions = temp;
  23. }
  24. protected override object EvaluateInternal(EvaluationContext context)
  25. {
  26. var result = Undefined.Instance;
  27. foreach (var expression in _expressions)
  28. {
  29. result = expression.GetValue(context);
  30. }
  31. return result;
  32. }
  33. }
  34. }