mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
154 lines
3.0 KiB
Swift
154 lines
3.0 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend-dump-parse -disable-availability-checking -enable-experimental-move-only -enable-experimental-feature ThenStatements -enable-experimental-feature ParserASTGen \
|
|
// RUN: | %sanitize-address > %t/astgen.ast
|
|
// RUN: %target-swift-frontend-dump-parse -disable-availability-checking -enable-experimental-move-only -enable-experimental-feature ThenStatements \
|
|
// RUN: | %sanitize-address > %t/cpp-parser.ast
|
|
|
|
// RUN: %diff -u %t/astgen.ast %t/cpp-parser.ast
|
|
|
|
// RUN: %target-run-simple-swift(-Xfrontend -disable-availability-checking -enable-experimental-feature ThenStatements -enable-experimental-feature ParserASTGen)
|
|
|
|
// REQUIRES: executable_test
|
|
// REQUIRES: swift_swift_parser
|
|
// REQUIRES: swift_feature_ParserASTGen
|
|
// REQUIRES: swift_feature_ThenStatements
|
|
|
|
// rdar://116686158
|
|
// UNSUPPORTED: asan
|
|
|
|
// NB: Ridiculous formatting to test that we do not include leading trivia in locations.
|
|
|
|
func test1(e b: Bool) {
|
|
if b
|
|
{
|
|
print(
|
|
"TRUE"
|
|
)
|
|
}
|
|
else
|
|
{
|
|
print("FALSE")
|
|
}
|
|
}
|
|
|
|
struct UnknownError: Error {}
|
|
|
|
func testSwitch(arg1: Int, arg2: Int) throws {
|
|
LABEL: switch (arg1, arg2) {
|
|
case (1, 2):
|
|
print("")
|
|
fallthrough
|
|
case (1, _) where true, (4, 3):
|
|
break LABEL
|
|
case (var foo, let bar) where foo.isMultiple(of: 2):
|
|
defer {
|
|
print(foo)
|
|
}
|
|
foo += 1
|
|
print(bar)
|
|
break
|
|
default:
|
|
throw UnknownError()
|
|
}
|
|
}
|
|
|
|
func canThrow() throws {}
|
|
|
|
func testDo() {
|
|
do {
|
|
try canThrow()
|
|
} catch is UnknownError {
|
|
return
|
|
} catch where error is UnknownError {
|
|
return
|
|
} catch let error, {
|
|
_ = error
|
|
return
|
|
} catch {
|
|
return
|
|
}
|
|
|
|
LOOP: do {
|
|
print("foo")
|
|
if true {
|
|
continue LOOP
|
|
}
|
|
}
|
|
}
|
|
|
|
func testGuard(arg1: Int?, arg2: String) {
|
|
guard let arg1, var arg2First = arg2.first, arg1 > 2 else {
|
|
return
|
|
}
|
|
arg2First = "a"
|
|
|
|
print(arg1, arg2First)
|
|
}
|
|
|
|
func testFor(arg1: [Int?]) {
|
|
for _ in 0..<1 { }
|
|
for case let .some(elem) in arg1 where elem < 42 { print(elem) }
|
|
for var elem in [1,2,3] {
|
|
elem += 1
|
|
print(elem)
|
|
}
|
|
for (a, b) in [(1,2)] {}
|
|
}
|
|
|
|
func testRepeat() {
|
|
repeat {
|
|
print(1)
|
|
} while true
|
|
}
|
|
|
|
func testRepeat(arg: [Int]) {
|
|
var iter = arg.makeIterator()
|
|
while let a = iter.next(), a > Int.random(in: 0..<10) {
|
|
print(a)
|
|
}
|
|
}
|
|
|
|
func testThen() {
|
|
let x: Int = if .random() {
|
|
then .zero
|
|
} else {
|
|
then 0
|
|
}
|
|
}
|
|
|
|
func intOrString() -> Int? { 1 }
|
|
func intOrString() -> String? { "" }
|
|
func testIf() {
|
|
if
|
|
let i: Int = intOrString(),
|
|
case let str? = intOrString() as String?
|
|
{
|
|
_ = (i, str)
|
|
}
|
|
}
|
|
|
|
struct GenericTypeWithYields<T> {
|
|
var storedProperty: T?
|
|
|
|
var property: T {
|
|
_read {
|
|
yield storedProperty!
|
|
}
|
|
_modify {
|
|
yield &storedProperty!
|
|
}
|
|
}
|
|
|
|
/* FXIME: yield(...) is parsed as an expression. ASTGen needs to onvert it to a statments.
|
|
subscript<U>(u: U) -> (T,U) {
|
|
_read {
|
|
yield ((storedProperty!, u))
|
|
}
|
|
_modify {
|
|
var temp = (storedProperty!, u)
|
|
yield &temp
|
|
}
|
|
}
|
|
*/
|
|
}
|