library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:ffi" as ffi;
import "dart:_internal" as _in;

import "dart:ffi";

class MyFinalizable extends core::Object implements ffi::Finalizable {
  synthetic constructor •() → self::MyFinalizable
    : super core::Object::•()
    ;
}
[@vm.unboxing-info.metadata=()->i]static method doSomething() → core::int
  return 3;
static method useFinalizableSyncStar([@vm.inferred-type.metadata=#lib::MyFinalizable] ffi::Finalizable finalizable) → core::Iterable<core::int> sync* {
  yield block {
    final core::int :expressionValueWrappedFinalizable = self::doSomething();
    _in::reachabilityFence(finalizable);
  } =>:expressionValueWrappedFinalizable;
  final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
  yield block {
    final core::int :expressionValueWrappedFinalizable = 5;
    _in::reachabilityFence(finalizable);
    _in::reachabilityFence(finalizable2);
  } =>:expressionValueWrappedFinalizable;
  final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
  yield block {
    final core::int :expressionValueWrappedFinalizable = 10;
    _in::reachabilityFence(finalizable);
    _in::reachabilityFence(finalizable2);
    _in::reachabilityFence(finalizable3);
  } =>:expressionValueWrappedFinalizable;
  _in::reachabilityFence(finalizable2);
  _in::reachabilityFence(finalizable3);
  _in::reachabilityFence(finalizable);
}
static method main() → void {
  final self::MyFinalizable finalizable = new self::MyFinalizable::•();
  {
    core::Iterator<core::int> :sync-for-iterator = [@vm.direct-call.metadata=dart.async::_SyncStarIterable.iterator] [@vm.inferred-type.metadata=dart.async::_SyncStarIterator] [@vm.inferred-type.metadata=dart.async::_SyncStarIterable] self::useFinalizableSyncStar(finalizable).{core::Iterable::iterator}{core::Iterator<core::int>};
    for (; [@vm.direct-call.metadata=dart.async::_SyncStarIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool? (skip check)] :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
      final core::int element = [@vm.direct-call.metadata=dart.async::_SyncStarIterator.current] [@vm.inferred-type.metadata=int?] :sync-for-iterator.{core::Iterator::current}{core::int};
      {
        core::print(element);
      }
    }
  }
  _in::reachabilityFence(finalizable);
}
