JintSequenceExpression.cs 1.2 KB

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