File: local_types.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (186 lines) | stat: -rw-r--r-- 4,964 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
// Tests lookup and mangling of local types

// RUN: %empty-directory(%t)
// RUN: %target-swiftc_driver -v -emit-module -module-name LocalTypes -o %t/LocalTypes.swiftmodule %s
// RUN: %target-swift-ide-test -print-local-types -I %t -module-to-print LocalTypes -source-filename %s > %t.dump
// RUN: %FileCheck %s < %t.dump
// RUN: %FileCheck -check-prefix=NEGATIVE %s < %t.dump

public func singleFunc() {
  // CHECK-DAG: 10LocalTypes10singleFuncyyF06SingleD6StructL_V
  struct SingleFuncStruct {
    let sfsi: Int
  }
  // CHECK-DAG: 10LocalTypes10singleFuncyyF06SingleD5ClassL_C
  class SingleFuncClass {
    let sfcs: String
    init(s: String) {
      self.sfcs = s
    }
  }
  // CHECK-DAG: 10LocalTypes10singleFuncyyF06SingleD4EnumL_O
  enum SingleFuncEnum {
    case SFEI(Int)
  }

  // CHECK-DAG: 10LocalTypes10singleFuncyyF13GenericStructL_V
  struct GenericStruct<T> {
    let sfgsi: Int
  }

  // CHECK-DAG: 10LocalTypes10singleFuncyyF12GenericClassL_C
  class GenericClass<T> {
    let sfgci: Int = 0
  }

  // CHECK-DAG: 10LocalTypes10singleFuncyyF11GenericEnumL_O
  enum GenericEnum<T> {
    case sfgei(Int)
  }

  // CHECK-DAG: AliasAAA
  typealias SingleFuncAliasAAA = Int
  // We don't handle generic typealiases correctly quite yet.
  // Re-enable this when <rdar://problem/43110802> is fixed.
  // NEGATIVE-NOT: AliasGGG
  //typealias GenericAliasGGG<T> = (T, T)
}

public func singleFuncWithDuplicates(_ fake: Bool) {
  if fake {
    // CHECK-DAG: 10LocalTypes24singleFuncWithDuplicatesyySbF06SingleD6StructL_V
    struct SingleFuncStruct {
      let sfsi: Int
    }
    // CHECK-DAG: 10LocalTypes24singleFuncWithDuplicatesyySbF06SingleD5ClassL_C
    class SingleFuncClass {
      let sfcs: String
      init(s: String) {
        self.sfcs = s
      }
    }
    // CHECK-DAG: 10LocalTypes24singleFuncWithDuplicatesyySbF06SingleD4EnumL_O
    enum SingleFuncEnum {
      case SFEI(Int)
    }
  } else {
    // CHECK-DAG: 10LocalTypes24singleFuncWithDuplicatesyySbF06SingleD6StructL0_V
    struct SingleFuncStruct {
      let sfsi: Int
    }
    // CHECK-DAG: 10LocalTypes24singleFuncWithDuplicatesyySbF06SingleD5ClassL0_C
    class SingleFuncClass {
      let sfcs: String
      init(s: String) {
        self.sfcs = s
      }
    }
    // CHECK-DAG: 10LocalTypes24singleFuncWithDuplicatesyySbF06SingleD4EnumL0_O
    enum SingleFuncEnum {
      case SFEI(Int)
    }
  }
}

public let singleClosure: () -> () = {
  // CHECK-DAG: 10LocalTypesyycfU_19SingleClosureStructL_V
  struct SingleClosureStruct {
    let scsi: Int
  }
  // CHECK-DAG: 10LocalTypesyycfU_18SingleClosureClassL_C
  class SingleClosureClass {
    let sccs: String
    init(s: String) {
      self.sccs = s
    }
  }
  // CHECK-DAG: 10LocalTypesyycfU_17SingleClosureEnumL_O
  enum SingleClosureEnum {
    case SCEI(Int)
  }
}

public var singlePattern: Int {
  // CHECK-DAG: 10LocalTypes13singlePatternSivg06SingleD6StructL_V
  struct SinglePatternStruct {
    let spsi: Int
  }
  // CHECK-DAG: 10LocalTypes13singlePatternSivg06SingleD5ClassL_C
  class SinglePatternClass {
    let spcs: String
    init(s: String) {
      self.spcs = s
    }
  }
  // CHECK-DAG: 10LocalTypes13singlePatternSivg06SingleD4EnumL_O
  enum SinglePatternEnum {
    case SPEI(Int)
  }
  return 2
}

// Cannot be public, because inlinable default arguments cannot contain local types
func singleDefaultArgument(i: Int = {
  //CHECK-DAG: 10LocalTypes21singleDefaultArgument1iySi_tFfA_SiycfU_06SingledE6StructL_V
  struct SingleDefaultArgumentStruct {
    let sdasi: Int
  }
  // CHECK-DAG: 10LocalTypes21singleDefaultArgument1iySi_tFfA_SiycfU_06SingledE5ClassL_C
  class SingleDefaultArgumentClass {
    let sdacs: String
    init(s: String) {
      self.sdacs = s
    }
  }
  // CHECK-DAG: 10LocalTypes21singleDefaultArgument1iySi_tFfA_SiycfU_06SingledE4EnumL_O
  enum SingleDefaultArgumentEnum {
    case SDAEI(Int)
  }

  return 2

}()){
  print(i)
}

public func doubleFunc() {
  func innerFunc() {
    // CHECK-DAG: 10LocalTypes10doubleFuncyyF05innerD0L_yyF06DoubleD6StructL_V
    struct DoubleFuncStruct {
      let dfsi: Int
    }
    // CHECK-DAG: 10LocalTypes10doubleFuncyyF05innerD0L_yyF06DoubleD5ClassL_C
    class DoubleFuncClass {
      let dfcs: String
      init(s: String) {
        self.dfcs = s
      }
    }
    // CHECK-DAG: 10LocalTypes10doubleFuncyyF05innerD0L_yyF06DoubleD4EnumL_O
    enum DoubleFuncEnum {
      case DFEI(Int)
    }
  }
  innerFunc()
}

public let doubleClosure: () -> () = {
  let singleClosure: () -> () = {
    // CHECK-DAG: 10LocalTypesyycfU0_yycfU_19DoubleClosureStructL_V
    struct DoubleClosureStruct {
      let dcsi: Int
    }
    // CHECK-DAG: 10LocalTypesyycfU0_yycfU_18DoubleClosureClassL_C
    class DoubleClosureClass {
      let dccs: String
      init(s: String) {
        self.dccs = s
      }
    }
    // CHECK-DAG: 10LocalTypesyycfU0_yycfU_17DoubleClosureEnumL_O
    enum DoubleClosureEnum {
      case DCEI(Int)
    }
  }
  singleClosure()
}