JintAwaitExpression.cs 1011 B

123456789101112131415161718192021222324252627282930313233343536
  1. using Esprima.Ast;
  2. namespace Jint.Runtime.Interpreter.Expressions;
  3. internal sealed class JintAwaitExpression : JintExpression
  4. {
  5. private JintExpression _awaitExpression = null!;
  6. public JintAwaitExpression(AwaitExpression expression) : base(expression)
  7. {
  8. _initialized = false;
  9. }
  10. protected override void Initialize(EvaluationContext context)
  11. {
  12. _awaitExpression = Build(((AwaitExpression) _expression).Argument);
  13. }
  14. protected override object EvaluateInternal(EvaluationContext context)
  15. {
  16. var engine = context.Engine;
  17. var asyncContext = engine.ExecutionContext;
  18. try
  19. {
  20. var value = _awaitExpression.GetValue(context);
  21. engine.RunAvailableContinuations();
  22. return value.UnwrapIfPromise();
  23. }
  24. catch (PromiseRejectedException e)
  25. {
  26. ExceptionHelper.ThrowJavaScriptException(engine, e.RejectedValue, _expression.Location);
  27. return null;
  28. }
  29. }
  30. }