JintSequenceExpression.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. private bool _initialized;
  9. public JintSequenceExpression(SequenceExpression expression) : base(expression)
  10. {
  11. }
  12. private void Initialize()
  13. {
  14. var expression = (SequenceExpression) _expression;
  15. ref readonly var expressions = ref expression.Expressions;
  16. var temp = new JintExpression[expressions.Count];
  17. for (var i = 0; i < (uint) temp.Length; i++)
  18. {
  19. temp[i] = Build(expressions[i]);
  20. }
  21. _expressions = temp;
  22. }
  23. protected override object EvaluateInternal(EvaluationContext context)
  24. {
  25. if (!_initialized)
  26. {
  27. Initialize();
  28. _initialized = true;
  29. }
  30. var result = JsValue.Undefined;
  31. foreach (var expression in _expressions)
  32. {
  33. result = expression.GetValue(context);
  34. }
  35. return result;
  36. }
  37. }
  38. }