library #lib;
import self as self;
import "dart:core" as core;
import "dart:ffi" as ffi;
import "dart:async" as asy;
import "dart:_internal" as _in;

import "dart:ffi";

class MyFinalizable extends core::Object implements ffi::Finalizable {
  synthetic constructor •() → self::MyFinalizable
    : super core::Object::•()
    ;
}
static method doSomething() → asy::Future<core::int> async /* futureValueType= core::int */ 
  return 3;
static method useFinalizableAsync([@vm.inferred-arg-type.metadata=#lib::MyFinalizable] ffi::Finalizable finalizable) → asy::Future<core::int> async /* futureValueType= core::int */ {
  await block {
    final synthesized asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 6);
    _in::reachabilityFence(finalizable);
  } =>:expressionValueWrappedFinalizable;
  final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
  await block {
    final synthesized asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 5);
    _in::reachabilityFence(finalizable);
    _in::reachabilityFence(finalizable2);
  } =>:expressionValueWrappedFinalizable;
  final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
  await block {
    final synthesized asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 4);
    _in::reachabilityFence(finalizable);
    _in::reachabilityFence(finalizable2);
    _in::reachabilityFence(finalizable3);
  } =>:expressionValueWrappedFinalizable;
  return block {
    final synthesized asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
    _in::reachabilityFence(finalizable);
    _in::reachabilityFence(finalizable2);
    _in::reachabilityFence(finalizable3);
  } =>:expressionValueWrappedFinalizable;
}
static method main() → void async /* futureValueType= void */ {
  final self::MyFinalizable finalizable = new self::MyFinalizable::•();
  final asy::Future<core::int> asyncResult = self::useFinalizableAsync(finalizable);
  core::print(await block {
    final synthesized asy::Future<core::int> :expressionValueWrappedFinalizable = asyncResult;
    _in::reachabilityFence(finalizable);
  } =>:expressionValueWrappedFinalizable);
  _in::reachabilityFence(finalizable);
}
