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

static method f() → dynamic /* originally sync* */ {
  dynamic :await_jump_var = 0;
  dynamic :await_ctx_var;
  function :sync_op(core::_SyncIterator<dynamic> :iterator) → core::bool yielding {
    {
      invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
  return missing;
  ^";
    }
    return false;
  }
  return new core::_SyncIterable::•<dynamic>(:sync_op);
}
static method g() → dynamic /* originally sync* */ {
  dynamic :await_jump_var = 0;
  dynamic :await_ctx_var;
  function :sync_op(core::_SyncIterator<dynamic> :iterator) → core::bool yielding {
    invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
g() sync* => dummy;
             ^";
    return false;
  }
  return new core::_SyncIterable::•<dynamic>(:sync_op);
}
static method h() → dynamic /* originally sync* */ {
  dynamic :await_jump_var = 0;
  dynamic :await_ctx_var;
  function :sync_op(core::_SyncIterator<dynamic> :iterator) → core::bool yielding {
    {
      (() → dynamic => "return").call();
    }
    return false;
  }
  return new core::_SyncIterable::•<dynamic>(:sync_op);
}
static method main() → dynamic {}
