JintExpressionStatement.cs 979 B

12345678910111213141516171819202122232425262728293031
  1. using Esprima.Ast;
  2. using Jint.Runtime.Interpreter.Expressions;
  3. namespace Jint.Runtime.Interpreter.Statements;
  4. internal sealed class JintExpressionStatement : JintStatement<ExpressionStatement>
  5. {
  6. private JintExpression _expression = null!;
  7. // identifiers are queried the most
  8. private JintIdentifierExpression? _identifierExpression;
  9. public JintExpressionStatement(ExpressionStatement statement) : base(statement)
  10. {
  11. }
  12. protected override void Initialize(EvaluationContext context)
  13. {
  14. _expression = JintExpression.Build(_statement.Expression);
  15. _identifierExpression = _expression as JintIdentifierExpression;
  16. }
  17. protected override Completion ExecuteInternal(EvaluationContext context)
  18. {
  19. var value = _identifierExpression is not null
  20. ? _identifierExpression.GetValue(context)
  21. : _expression.GetValue(context);
  22. return new Completion(context.Completion, value, _statement);
  23. }
  24. }