mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
We expect to iterate on this quite a bit, both publicly and internally, but this is a fine starting-point. I've renamed runAsync to runAsyncAndBlock to underline very clearly what it does and why it's not long for this world. I've also had to give it a radically different implementation in an effort to make it continue to work given an actor implementation that is no longer just running all work synchronously. The major remaining bit of actor-scheduling work is to make swift_task_enqueue actually do something sensible based on the executor it's been given; currently it's expecting a flag that IRGen simply doesn't know to set.
43 lines
813 B
Swift
43 lines
813 B
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-build-swift -Xfrontend -enable-experimental-concurrency %s -module-name main -o %t/main
|
|
// RUN: %target-codesign %t/main
|
|
// RUN: %target-run %t/main | %FileCheck %s
|
|
|
|
// REQUIRES: concurrency
|
|
// REQUIRES: executable_test
|
|
// UNSUPPORTED: use_os_stdlib
|
|
// UNSUPPORTED: CPU=arm64e
|
|
|
|
|
|
func sayHello() async {
|
|
print("hello")
|
|
}
|
|
|
|
func sayGeneric<T>(_ msg: T) async {
|
|
await sayHello()
|
|
print(msg)
|
|
}
|
|
|
|
func sayWithClosure(_ action: () async -> ()) async {
|
|
await action()
|
|
print("hallo welt")
|
|
}
|
|
|
|
runAsyncAndBlock {
|
|
// CHECK: hello
|
|
await sayHello()
|
|
|
|
// CHECK: hello
|
|
// CHECK: world
|
|
await sayGeneric("world")
|
|
|
|
|
|
// CHECK: hello
|
|
// CHECK: and now in german
|
|
// CHECK: hallo welt
|
|
await sayWithClosure {
|
|
await sayHello()
|
|
print("and now in german")
|
|
}
|
|
}
|