JintClassDeclarationStatement.cs 1.2 KB

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