source: frontend/node_modules/es-abstract/2025/GeneratorStart.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 13 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 1.6 KB
Line 
1'use strict';
2
3var $TypeError = require('es-errors/type');
4
5var CreateIteratorResultObject = require('./CreateIteratorResultObject');
6var IsCallable = require('./IsCallable');
7
8var SLOT = require('internal-slot');
9var isObject = require('es-object-atoms/isObject');
10
11// https://262.ecma-international.org/16.0/#sec-generatorstart
12
13module.exports = function GeneratorStart(generator, closure) {
14 SLOT.assert(generator, '[[GeneratorState]]');
15 SLOT.assert(generator, '[[GeneratorContext]]');
16 SLOT.assert(generator, '[[GeneratorBrand]]');
17 SLOT.assert(generator, '[[Sentinel]]'); // our userland slot
18 SLOT.assert(generator, '[[CloseIfAbrupt]]'); // our second userland slot
19
20 if (!IsCallable(closure) || closure.length !== 0) {
21 throw new $TypeError('`closure` must be a function that takes no arguments');
22 }
23
24 var sentinel = SLOT.get(closure, '[[Sentinel]]');
25 if (!isObject(sentinel)) {
26 throw new $TypeError('`closure.[[Sentinel]]` must be an object');
27 }
28 SLOT.set(generator, '[[GeneratorContext]]', function () { // steps 2-5
29 try {
30 var result = closure();
31 if (result === sentinel) {
32 SLOT.set(generator, '[[GeneratorState]]', 'COMPLETED');
33 SLOT.set(generator, '[[GeneratorContext]]', null);
34 return CreateIteratorResultObject(void undefined, true);
35 }
36 SLOT.set(generator, '[[GeneratorState]]', 'SUSPENDED-YIELD');
37 return CreateIteratorResultObject(result, false);
38 } catch (e) {
39 SLOT.set(generator, '[[GeneratorState]]', 'COMPLETED');
40 SLOT.set(generator, '[[GeneratorContext]]', null);
41 throw e;
42 }
43 });
44
45 SLOT.set(generator, '[[GeneratorState]]', 'SUSPENDED-START'); // step 6
46};
Note: See TracBrowser for help on using the repository browser.