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

static method test() → dynamic {
  () →* core::Iterable<core::num*>* f = () → core::Iterable<core::num*>* /* originally sync* */ {
    dynamic :await_jump_var = 0;
    dynamic :await_ctx_var;
    function :sync_op(core::_SyncIterator<core::num*>* :iterator) → core::bool* yielding {
      {
        {
          :iterator.{core::_SyncIterator::_current} = 1;
          [yield] true;
        }
        {
          :iterator.{core::_SyncIterator::_yieldEachIterable} = <core::num*>[3, 4.0];
          [yield] true;
        }
      }
      return false;
    }
    return new core::_SyncIterable::•<core::num*>(:sync_op);
  };
  core::Iterable<core::num*>* g = f.call();
  core::Iterable<core::int*>* h = f.call() as{TypeError} core::Iterable<core::int*>*;
}
static method main() → dynamic {}
