| // RUN: %target-swift-emit-silgen %s | %FileCheck %s |
| |
| struct Subscript1 { |
| subscript(_: Int = 0) -> Int { |
| get {} |
| set {} |
| } |
| } |
| |
| // CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript1VyS2icipfA_ : $@convention(thin) () -> Int { |
| |
| struct Subscript2 { |
| subscript(_ x: Int = 0) -> Int { |
| get {} |
| set {} |
| } |
| } |
| |
| // CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript2VyS2icipfA_ : $@convention(thin) () -> Int { |
| |
| struct Subscript3 { |
| subscript(x x: Int = 0) -> Int { |
| get {} |
| set {} |
| } |
| } |
| |
| // CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript3V1xS2i_tcipfA_ : $@convention(thin) () -> Int { |
| |
| struct Subscript4 { |
| subscript(_ x: Int, y y: Int = 0) -> Int { |
| get {} |
| set {} |
| } |
| } |
| |
| // CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript4V_1yS2i_SitcipfA0_ : $@convention(thin) () -> Int { |
| |
| struct Subscript5 { |
| subscript(x x: Int, y y: Int = 0) -> Int { |
| get {} |
| set {} |
| } |
| } |
| |
| // CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript5V1x1yS2i_SitcipfA0_ : $@convention(thin) () -> Int { |
| |
| func defaultArg<T>() -> T? { return nil } |
| |
| struct Subscript6<T> { |
| subscript(x x: Int = 0, y y: T? = defaultArg()) -> Int { |
| get {} |
| set {} |
| } |
| } |
| |
| // CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript6V1x1yS2i_xSgtcipfA_ : $@convention(thin) <T> () -> Int { |
| // CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript6V1x1yS2i_xSgtcipfA0_ : $@convention(thin) <T> () -> @out Optional<T> { |
| |
| struct Subscript7<T> { |
| subscript<U>(x x: T? = defaultArg(), y y: U) -> Int { |
| get {} |
| set {} |
| } |
| } |
| |
| // CHECK-LABEL: sil hidden [ossa] @$s27subscript_default_arguments10Subscript7V1x1ySixSg_qd__tcluipfA_ : $@convention(thin) <T><U> () -> @out Optional<T> { |
| |
| struct Subscript8 { |
| subscript(file: String = #file, line: Int = #line, function: String = #function) -> Int { |
| get {} |
| set {} |
| } |
| } |
| |
| public protocol P { |
| associatedtype T |
| static func f() -> T |
| } |
| |
| // Doesn't work yet |
| #if false |
| // FIXME-LABEL: sil hidden [ossa] @$s27subscript_default_arguments1PPAAEySi1TQzcipfA_ : $@convention(thin) <Self where Self : P> () -> @out Self.T { |
| |
| extension P { |
| subscript(t: T = f()) -> Int { |
| get {} |
| set {} |
| } |
| } |
| |
| struct Subscript9<T> : P { |
| static func f() -> T {} |
| } |
| #endif |
| |
| // CHECK-LABEL: sil [ossa] @$s27subscript_default_arguments10subscript1yyF : $@convention(thin) () -> () { |
| public func subscript1() { |
| var s = Subscript1() |
| |
| _ = s[] |
| s[] = 0 |
| s[] += 1 |
| } |
| |
| public func subscript2() { |
| var s = Subscript2() |
| |
| _ = s[] |
| s[] = 0 |
| s[] += 1 |
| } |
| |
| public func subscript3() { |
| var s = Subscript3() |
| |
| _ = s[] |
| s[] = 0 |
| s[] += 1 |
| } |
| |
| public func subscript4() { |
| var s = Subscript4() |
| |
| _ = s[0] |
| s[0] = 0 |
| s[0] += 1 |
| } |
| |
| public func subscript5() { |
| var s = Subscript5() |
| |
| _ = s[x: 0] |
| s[x: 0] = 0 |
| s[x: 0] += 1 |
| } |
| |
| public func subscript6() { |
| var s = Subscript6<String>() |
| |
| _ = s[] |
| s[] = 0 |
| s[] += 1 |
| } |
| |
| public func subscript7() { |
| var s = Subscript7<String>() |
| |
| _ = s[y: 123] |
| s[y: 123] = 0 |
| s[y: 123] += 1 |
| } |
| |
| public func subscript8() { |
| var s = Subscript8() |
| |
| _ = s[] |
| s[] = 0 |
| s[] += 1 |
| } |
| |
| #if false |
| public func subscript9() { |
| var s = Subscript9<Int>() |
| |
| _ = s[] |
| s[] = 0 |
| s[] += 1 |
| } |
| #endif |