JintSequenceExpression.cs 1.1 KB

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