source: frontend/node_modules/es-iterator-helpers/aos/GeneratorResumeAbrupt.js

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

Fix frontend appearance

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[9af201e]1'use strict';
2
3var $TypeError = require('es-errors/type');
4
5var CompletionRecord = require('es-abstract/2025/CompletionRecord');
6var CreateIteratorResultObject = require('es-abstract/2025/CreateIteratorResultObject');
7var GeneratorValidate = require('es-abstract/2025/GeneratorValidate');
8
9var SLOT = require('internal-slot');
10
11// https://tc39.es/ecma262/#sec-generatorresumeabrupt
12
13module.exports = function GeneratorResumeAbrupt(generator, abruptCompletion, generatorBrand) {
14 if (
15 !(abruptCompletion instanceof CompletionRecord)
16 || (abruptCompletion.type() !== 'return' && abruptCompletion.type() !== 'throw')
17 ) {
18 throw new $TypeError('Assertion failed: abruptCompletion must be a `return` or `throw` Completion Record');
19 }
20
21 var state = GeneratorValidate(generator, generatorBrand); // step 1
22
23 if (state === 'SUSPENDED-START') { // step 2
24 SLOT.set(generator, '[[GeneratorState]]', 'COMPLETED'); // step 2.a
25 SLOT.set(generator, '[[GeneratorContext]]', null); // step 2.b
26 state = 'COMPLETED'; // step 2.c
27 }
28
29 var value = abruptCompletion.value();
30
31 if (state === 'COMPLETED') { // step 3
32 if (abruptCompletion.type() === 'return') { // step 3.a
33 return CreateIteratorResultObject(value, true); // step 3.a.i
34 }
35 return abruptCompletion['?'](); // step 3.b - throw
36 }
37
38 if (state !== 'SUSPENDED-YIELD') {
39 throw new $TypeError('Assertion failed: generator state is unexpected: ' + state); // step 4
40 }
41
42 var genContext = SLOT.get(generator, '[[GeneratorContext]]'); // step 5
43
44 SLOT.set(generator, '[[GeneratorState]]', 'EXECUTING'); // step 8
45
46 if (abruptCompletion.type() === 'return') {
47 // due to representing `GeneratorContext` as a function, we can't safely re-invoke it, so we can't support sending it a return completion
48 SLOT.get(generator, '[[CloseIfAbrupt]]')(abruptCompletion);
49 SLOT.set(generator, '[[GeneratorState]]', 'COMPLETED'); // step 10
50 return CreateIteratorResultObject(value, true);
51 }
52
53 var result = genContext(value); // steps 6-7, 9-11
54
55 return result; // step 12
56};
Note: See TracBrowser for help on using the repository browser.