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 {
    {
      (() → core::String => "return").call();
    }
    return false;
  }
  return new core::_SyncIterable::•<dynamic>(:sync_op);
}
static method main() → dynamic {}
