mirror of
https://github.com/tc39/test262.git
synced 2025-04-08 19:35:28 +02:00
Remove async-gc harness
This is now unused, and there is no way to implement it without using the cleanupSome proposal (see previous commit) which has been withdrawn. Closes: #3920
This commit is contained in:
parent
f225229f85
commit
0c784ef954
@ -1,57 +0,0 @@
|
|||||||
// Copyright (C) 2019 Ecma International. All rights reserved.
|
|
||||||
// This code is governed by the BSD license found in the LICENSE file.
|
|
||||||
/*---
|
|
||||||
description: >
|
|
||||||
Collection of functions used to capture references cleanup from garbage collectors
|
|
||||||
features: [FinalizationRegistry.prototype.cleanupSome, FinalizationRegistry, Symbol, async-functions]
|
|
||||||
flags: [non-deterministic]
|
|
||||||
defines: [asyncGC, asyncGCDeref, resolveAsyncGC]
|
|
||||||
---*/
|
|
||||||
|
|
||||||
function asyncGC(...targets) {
|
|
||||||
var finalizationRegistry = new FinalizationRegistry(() => {});
|
|
||||||
var length = targets.length;
|
|
||||||
|
|
||||||
for (let target of targets) {
|
|
||||||
finalizationRegistry.register(target, 'target');
|
|
||||||
target = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
targets = null;
|
|
||||||
|
|
||||||
return Promise.resolve('tick').then(() => asyncGCDeref()).then(() => {
|
|
||||||
var names = [];
|
|
||||||
|
|
||||||
// consume iterator to capture names
|
|
||||||
finalizationRegistry.cleanupSome(name => { names.push(name); });
|
|
||||||
|
|
||||||
if (!names || names.length != length) {
|
|
||||||
throw asyncGC.notCollected;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
asyncGC.notCollected = Symbol('Object was not collected');
|
|
||||||
|
|
||||||
async function asyncGCDeref() {
|
|
||||||
var trigger;
|
|
||||||
|
|
||||||
// TODO: Remove this when $262.clearKeptObject becomes documented and required
|
|
||||||
if ($262.clearKeptObjects) {
|
|
||||||
trigger = $262.clearKeptObjects();
|
|
||||||
}
|
|
||||||
|
|
||||||
await $262.gc();
|
|
||||||
|
|
||||||
return Promise.resolve(trigger);
|
|
||||||
}
|
|
||||||
|
|
||||||
function resolveAsyncGC(err) {
|
|
||||||
if (err === asyncGC.notCollected) {
|
|
||||||
// Do not fail as GC can't provide necessary resources.
|
|
||||||
$DONE();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$DONE(err);
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user