mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
* Introduce stored inlinable function bodies * Remove serialization changes * [InterfaceGen] Print inlinable function bodies * Clean up a little bit and add test * Undo changes to InlinableText * Add serialization and deserialization for inlinable body text * Allow parser to parse accessor bodies in interfaces * Fix some tests * Fix remaining tests * Add tests for usableFromInline decls * Add comments * Clean up function body printing throughout * Add tests for subscripts * Remove comment about subscript inlinable text * Address some comments * Handle lack of @objc on Linux
265 lines
6.0 KiB
Swift
265 lines
6.0 KiB
Swift
// This file should not have any syntax or type checker errors.
|
|
// RUN: %target-typecheck-verify-swift
|
|
|
|
// RUN: %target-swift-ide-test -print-ast-typechecked -source-filename %s -function-definitions=true -prefer-type-repr=false > %t.printed.txt
|
|
// RUN: %FileCheck %s -strict-whitespace < %t.printed.txt
|
|
|
|
// RUN: %target-swift-ide-test -print-ast-typechecked -source-filename %s -function-definitions=true -prefer-type-repr=true > %t.printed.txt
|
|
// RUN: %FileCheck %s -strict-whitespace < %t.printed.txt
|
|
|
|
struct FooStruct {
|
|
// CHECK-LABEL: {{^}}struct FooStruct {{{$}}
|
|
|
|
var instanceVar: Int
|
|
// CHECK-NEXT: {{^}} var instanceVar: Int{{$}}
|
|
|
|
subscript(i: Int) -> Double {
|
|
get {
|
|
return Double(i)
|
|
}
|
|
set(v) {
|
|
instanceVar = i
|
|
}
|
|
}
|
|
// CHECK-NEXT: {{^}} subscript(i: Int) -> Double {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK: {{^}} set(v) {{{$}}
|
|
// CHECK: {{^}} }{{$}}
|
|
// CHECK: {{^}} }{{$}}
|
|
|
|
subscript(i: Int, j: Int) -> Double {
|
|
get {
|
|
return Double(i + j)
|
|
}
|
|
set(v) {
|
|
instanceVar = i + j
|
|
}
|
|
}
|
|
// CHECK: {{^}} subscript(i: Int, j: Int) -> Double {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK: {{^}} set(v) {{{$}}
|
|
// CHECK: {{^}} }{{$}}
|
|
// CHECK: {{^}} }{{$}}
|
|
}
|
|
|
|
extension FooStruct {
|
|
// CHECK-LABEL: {{^}}extension FooStruct {{{$}}
|
|
var extProp: Int {
|
|
get {
|
|
return 42
|
|
}
|
|
set(v) {}
|
|
}
|
|
// CHECK-NEXT: {{^}} var extProp: Int {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK: {{^}} set(v) {}{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
}
|
|
|
|
//===---
|
|
//===--- Variable declaration printing.
|
|
//===---
|
|
|
|
var topLevelVar1: Int {
|
|
get {
|
|
return 42
|
|
}
|
|
}
|
|
// CHECK: {{^}}var topLevelVar1: Int {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}}}{{$}}
|
|
// CHECK-NOT: topLevelVar1
|
|
|
|
var topLevelVar2: Int {
|
|
get {
|
|
return 22
|
|
}
|
|
set {
|
|
if true {}
|
|
}
|
|
}
|
|
// CHECK: {{^}}var topLevelVar2: Int {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK: {{^}} set {{{$}}
|
|
// CHECK-NEXT: {{^}} if {{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}}}{{$}}
|
|
// CHECK-NOT: topLevelVar2
|
|
|
|
var topLevelVar3: Int {
|
|
get {
|
|
return 42
|
|
}
|
|
set(foo) {
|
|
if true {}
|
|
}
|
|
}
|
|
// CHECK: {{^}}var topLevelVar3: Int {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK: {{^}} set(foo) {{{$}}
|
|
// CHECK-NEXT: {{^}} if {{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}}}{{$}}
|
|
// CHECK-NOT: topLevelVar3
|
|
|
|
class InClassVar1 {
|
|
// CHECK-LABEL: InClassVar1
|
|
|
|
var instanceVar1: Int {
|
|
get {
|
|
return 12
|
|
}
|
|
}
|
|
// CHECK: {{^}} var instanceVar1: Int {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NOT: instanceVar1
|
|
|
|
var instanceVar2: Int {
|
|
get {
|
|
return 42
|
|
}
|
|
set {
|
|
if true {}
|
|
}
|
|
}
|
|
// CHECK: {{^}} var instanceVar2: Int {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK: {{^}} set {{{$}}
|
|
// CHECK-NEXT: {{^}} if {{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NOT: instanceVar2
|
|
|
|
var instanceVar3: Int {
|
|
get {
|
|
return 42
|
|
}
|
|
set(foo) {
|
|
if true {}
|
|
}
|
|
}
|
|
// CHECK: {{^}} var instanceVar3: Int {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK: {{^}} set(foo) {{{$}}
|
|
// CHECK-NEXT: {{^}} if {{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NOT: instanceVar3
|
|
}
|
|
|
|
//===---
|
|
//===--- Subscript declaration printing.
|
|
//===---
|
|
|
|
class InClassSubscript1 {
|
|
// CHECK-LABEL: InClassSubscript1
|
|
subscript(i: Int) -> Int {
|
|
get {
|
|
return 42
|
|
}
|
|
set {
|
|
if true {}
|
|
}
|
|
}
|
|
// CHECK: {{^}} subscript(i: Int) -> Int {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK: {{^}} set {{{$}}
|
|
// CHECK-NEXT: {{^}} if {{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NOT: subscript
|
|
}
|
|
|
|
class InClassSubscript2 {
|
|
// CHECK-LABEL: InClassSubscript2
|
|
subscript(i: Int) -> Int {
|
|
get {
|
|
return 42
|
|
}
|
|
set(value) {
|
|
if true {}
|
|
}
|
|
}
|
|
// CHECK: {{^}} subscript(i: Int) -> Int {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK: {{^}} set(value) {{{$}}
|
|
// CHECK-NEXT: {{^}} if {{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NOT: subscript
|
|
}
|
|
|
|
class InClassSubscript3 {
|
|
// CHECK-LABEL: InClassSubscript3
|
|
subscript(i: Int) -> Int {
|
|
get {
|
|
return 42
|
|
}
|
|
set(foo) {
|
|
if true {}
|
|
}
|
|
}
|
|
// CHECK: {{^}} subscript(i: Int) -> Int {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK: {{^}} set(foo) {{{$}}
|
|
// CHECK-NEXT: {{^}} if {{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NOT: subscript
|
|
}
|
|
|
|
class InClassSubscript4 {
|
|
// CHECK-LABEL: InClassSubscript4
|
|
subscript<T>(i: T) -> T where T: Equatable {
|
|
get {
|
|
return i
|
|
}
|
|
set(foo) {
|
|
if true {}
|
|
}
|
|
}
|
|
// CHECK: {{^}} subscript<T>(i: T) -> T where T : Equatable {{{$}}
|
|
// CHECK-NEXT: {{^}} get {{{$}}
|
|
// CHECK-NEXT: {{^}} return {{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK: {{^}} set(foo) {{{$}}
|
|
// CHECK-NEXT: {{^}} if {{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NEXT: {{^}} }{{$}}
|
|
// CHECK-NOT: subscript
|
|
}
|
|
|
|
|