JintClassDeclarationStatement.cs 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. #nullable enable
  2. using Esprima.Ast;
  3. using Jint.Native.Function;
  4. namespace Jint.Runtime.Interpreter.Statements
  5. {
  6. internal sealed class JintClassDeclarationStatement : JintStatement<ClassDeclaration>
  7. {
  8. private readonly ClassDefinition _classDefinition;
  9. public JintClassDeclarationStatement(ClassDeclaration classDeclaration) : base(classDeclaration)
  10. {
  11. _classDefinition = new ClassDefinition(className: classDeclaration.Id?.Name, classDeclaration.SuperClass, classDeclaration.Body);
  12. }
  13. protected override Completion ExecuteInternal(EvaluationContext context)
  14. {
  15. var engine = context.Engine;
  16. var env = engine.ExecutionContext.LexicalEnvironment;
  17. var F = _classDefinition.BuildConstructor(context, env);
  18. var classBinding = _classDefinition._className;
  19. if (classBinding != null)
  20. {
  21. env.InitializeBinding(classBinding, F);
  22. }
  23. return Completion.Empty();
  24. }
  25. }
  26. }