Use global Iterator.prototype for down-level generators (#59514)

This commit is contained in:
Ron Buckton
2024-08-08 12:20:59 -04:00
committed by GitHub
parent 3cf708e179
commit 67d0fc13ce
91 changed files with 345 additions and 301 deletions

View File

@@ -83,4 +83,26 @@ describe("unittests:: evaluation:: asyncGeneratorEvaluation", () => {
{ done: true, value: 2 },
]);
});
it("Supports global `AsyncIterator.prototype` if present", () => {
class AsyncIterator {}
const { gen } = evaluator.evaluateTypeScript(
`
export async function * gen() {}
`,
{ target: ts.ScriptTarget.ES5 },
{ AsyncIterator },
);
const g = gen();
assert.instanceOf(g, AsyncIterator);
});
it("Ignores global `AsyncIterator.prototype` if missing", () => {
const { gen } = evaluator.evaluateTypeScript(
`
export async function * gen() {}
`,
{ target: ts.ScriptTarget.ES5 },
{ AsyncIterator: undefined },
);
gen();
});
});

View File

@@ -39,4 +39,26 @@ describe("unittests:: evaluation:: generatorEvaluation", () => {
assert.deepEqual(g.next(), { value: undefined, done: true });
assert.deepEqual(output, []);
});
it("Supports global `Iterator.prototype` if present", () => {
class Iterator {}
const { gen } = evaluator.evaluateTypeScript(
`
export function * gen() {}
`,
{ target: ts.ScriptTarget.ES5 },
{ Iterator },
);
const g = gen();
assert.instanceOf(g, Iterator);
});
it("Ignores global `Iterator.prototype` if missing", () => {
const { gen } = evaluator.evaluateTypeScript(
`
export function * gen() {}
`,
{ target: ts.ScriptTarget.ES5 },
{ Iterator: undefined },
);
gen();
});
});