library test;
import self as self;
import "dart:core" as core;

static method main() → dynamic {
  () →* core::Iterable<Null>* f = () → core::Iterable<Null>* /* originally sync* */ {
    function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
      core::int* :await_jump_var = 0;
      dynamic :await_ctx_var;
      function :sync_op(core::_SyncIterator<dynamic>* :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
        {
          {
            :iterator.{core::_SyncIterator::_current} = null;
            [yield] true;
          }
        }
        return false;
      }
      return :sync_op;
    }
    return new core::_SyncIterable::•<Null>(:sync_op_gen);
  };
  core::Iterable<dynamic>* y = f.call();
  core::Iterable<core::String*>* z = f.call();
  core::String* s = f.call().{core::Iterable::first};
}
