jsFreeRuntime function
Implementation
void jsFreeRuntime(
Pointer<JSRuntime> rt,
) {
final referenceleak = <String>[];
final opaque = runtimeOpaques[rt];
if (opaque != null) {
while (true) {
final ref = opaque._ref.firstWhereOrNull((ref) => ref is JSRefLeakable);
if (ref == null) break;
ref.destroy();
runtimeOpaques[rt]?._ref.remove(ref);
}
while (opaque._ref.isNotEmpty) {
final ref = opaque._ref.first;
final objStrs = ref.toString().split('\n');
final objStr = objStrs.length > 0 ? objStrs[0] + " ..." : objStrs[0];
referenceleak.add(
" ${identityHashCode(ref)}\t${ref._refCount + 1}\t${ref.runtimeType.toString()}\t$objStr");
ref.destroy();
}
}
_jsFreeRuntime(rt);
if (referenceleak.length > 0) {
throw ('reference leak:\n ADDR\tREF\tTYPE\tPROP\n' +
referenceleak.join('\n'));
}
}