jsFreeRuntime function

void jsFreeRuntime(
  1. Pointer<JSRuntime> rt
)

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'));
  }
}