mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
354 lines
14 KiB
Swift
354 lines
14 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: echo "[MyProto]" > %t/protocols.json
|
|
|
|
// RUN: %target-swift-frontend -typecheck -emit-const-values-path %t/ExtractGroups.swiftconstvalues -const-gather-protocols-file %t/protocols.json -primary-file %s
|
|
// RUN: cat %t/ExtractGroups.swiftconstvalues 2>&1 | %FileCheck %s
|
|
|
|
protocol MyProto {}
|
|
|
|
public struct Arrays : MyProto {
|
|
let array1: [Int] = [1, 2, 3]
|
|
let array2: [Foo] = [Bar(), 1, "hi"]
|
|
let array3: [Bar] = [Bar()]
|
|
}
|
|
|
|
public struct Dictionaries : MyProto {
|
|
let dict1: [String: Int] = ["One": 1, "Two": 2, "Three": 3]
|
|
let dict2: [Int: [String]] = [
|
|
1: ["a", "b", "c"],
|
|
2: ["z"]
|
|
]
|
|
let dict3: [String: Foo] = [
|
|
"Bar": Bar(),
|
|
"Int": 42
|
|
]
|
|
}
|
|
|
|
public struct Tuples : MyProto {
|
|
let tuple1: (String, Bar) = ("foo", Bar())
|
|
let tuple2: (lat: Float, lng: Float) = (lat: 42.7, lng: -73.9)
|
|
let tuple3: Void = ()
|
|
}
|
|
|
|
public protocol Foo {}
|
|
public struct Bar: Foo {}
|
|
extension Int: Foo {}
|
|
extension String: Foo {}
|
|
|
|
// CHECK: [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "typeName": "ExtractGroups.Arrays",
|
|
// CHECK-NEXT: "mangledTypeName": "13ExtractGroups6ArraysV",
|
|
// CHECK-NEXT: "kind": "struct",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 9,
|
|
// CHECK-NEXT: "conformances": [
|
|
// CHECK-NEXT: "ExtractGroups.MyProto"
|
|
// CHECK-NEXT: ],
|
|
// CHECK-NEXT: "allConformances": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "protocolName": "ExtractGroups.MyProto"
|
|
// CHECK-NEXT: "conformanceDefiningModule": "ExtractGroups"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ],
|
|
// CHECK-NEXT: "associatedTypeAliases": [],
|
|
// CHECK-NEXT: "properties": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "array1",
|
|
// CHECK-NEXT: "type": "Swift.Array<Swift.Int>",
|
|
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
|
|
// CHECK-NEXT: "isStatic": "false",
|
|
// CHECK-NEXT: "isComputed": "false",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 10,
|
|
// CHECK-NEXT: "valueKind": "Array",
|
|
// CHECK-NEXT: "value": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "1"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "2"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "3"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "array2",
|
|
// CHECK-NEXT: "type": "Swift.Array<any ExtractGroups.Foo>",
|
|
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
|
|
// CHECK-NEXT: "isStatic": "false",
|
|
// CHECK-NEXT: "isComputed": "false",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 11,
|
|
// CHECK-NEXT: "valueKind": "Array",
|
|
// CHECK-NEXT: "value": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "InitCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "type": "ExtractGroups.Bar",
|
|
// CHECK-NEXT: "arguments": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "1"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "hi"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "array3",
|
|
// CHECK-NEXT: "type": "Swift.Array<ExtractGroups.Bar>",
|
|
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
|
|
// CHECK-NEXT: "isStatic": "false",
|
|
// CHECK-NEXT: "isComputed": "false",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 12,
|
|
// CHECK-NEXT: "valueKind": "Array",
|
|
// CHECK-NEXT: "value": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "InitCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "type": "ExtractGroups.Bar",
|
|
// CHECK-NEXT: "arguments": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "typeName": "ExtractGroups.Dictionaries",
|
|
// CHECK-NEXT: "mangledTypeName": "13ExtractGroups12DictionariesV",
|
|
// CHECK-NEXT: "kind": "struct",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 15,
|
|
// CHECK-NEXT: "conformances": [
|
|
// CHECK-NEXT: "ExtractGroups.MyProto"
|
|
// CHECK-NEXT: ],
|
|
// CHECK-NEXT: "allConformances": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "protocolName": "ExtractGroups.MyProto"
|
|
// CHECK-NEXT: "conformanceDefiningModule": "ExtractGroups"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ],
|
|
// CHECK-NEXT: "associatedTypeAliases": [],
|
|
// CHECK-NEXT: "properties": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "dict1",
|
|
// CHECK-NEXT: "type": "Swift.Dictionary<Swift.String, Swift.Int>",
|
|
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
|
|
// CHECK-NEXT: "isStatic": "false",
|
|
// CHECK-NEXT: "isComputed": "false",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 16,
|
|
// CHECK-NEXT: "valueKind": "Dictionary",
|
|
// CHECK-NEXT: "value": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "key": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "One"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "1"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "key": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "Two"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "2"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "key": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "Three"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "3"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "dict2",
|
|
// CHECK-NEXT: "type": "Swift.Dictionary<Swift.Int, Swift.Array<Swift.String>>",
|
|
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
|
|
// CHECK-NEXT: "isStatic": "false",
|
|
// CHECK-NEXT: "isComputed": "false",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 17,
|
|
// CHECK-NEXT: "valueKind": "Dictionary",
|
|
// CHECK-NEXT: "value": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "key": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "1"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "valueKind": "Array",
|
|
// CHECK-NEXT: "value": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "a"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "b"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "c"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "key": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "2"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "valueKind": "Array",
|
|
// CHECK-NEXT: "value": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "z"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "dict3",
|
|
// CHECK-NEXT: "type": "Swift.Dictionary<Swift.String, any ExtractGroups.Foo>",
|
|
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
|
|
// CHECK-NEXT: "isStatic": "false",
|
|
// CHECK-NEXT: "isComputed": "false",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 21,
|
|
// CHECK-NEXT: "valueKind": "Dictionary",
|
|
// CHECK-NEXT: "value": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "key": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "Bar"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "valueKind": "InitCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "type": "ExtractGroups.Bar",
|
|
// CHECK-NEXT: "arguments": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "key": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "Int"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "42"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "typeName": "ExtractGroups.Tuples",
|
|
// CHECK-NEXT: "mangledTypeName": "13ExtractGroups6TuplesV",
|
|
// CHECK-NEXT: "kind": "struct",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 27,
|
|
// CHECK-NEXT: "conformances": [
|
|
// CHECK-NEXT: "ExtractGroups.MyProto"
|
|
// CHECK-NEXT: ],
|
|
// CHECK-NEXT: "allConformances": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "protocolName": "ExtractGroups.MyProto"
|
|
// CHECK-NEXT: "conformanceDefiningModule": "ExtractGroups"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ],
|
|
// CHECK-NEXT: "associatedTypeAliases": [],
|
|
// CHECK-NEXT: "properties": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "tuple1",
|
|
// CHECK-NEXT: "type": "(Swift.String, ExtractGroups.Bar)",
|
|
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
|
|
// CHECK-NEXT: "isStatic": "false",
|
|
// CHECK-NEXT: "isComputed": "false",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 28,
|
|
// CHECK-NEXT: "valueKind": "Tuple",
|
|
// CHECK-NEXT: "value": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "type": "Swift.String",
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "foo"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "type": "ExtractGroups.Bar",
|
|
// CHECK-NEXT: "valueKind": "InitCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "type": "ExtractGroups.Bar",
|
|
// CHECK-NEXT: "arguments": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "tuple2",
|
|
// CHECK-NEXT: "type": "(lat: Swift.Float, lng: Swift.Float)",
|
|
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
|
|
// CHECK-NEXT: "isStatic": "false",
|
|
// CHECK-NEXT: "isComputed": "false",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 29,
|
|
// CHECK-NEXT: "valueKind": "Tuple",
|
|
// CHECK-NEXT: "value": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "lat",
|
|
// CHECK-NEXT: "type": "Swift.Float",
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "42.7"
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "lng",
|
|
// CHECK-NEXT: "type": "Swift.Float",
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "-73.9"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "tuple3",
|
|
// CHECK-NEXT: "type": "()",
|
|
// CHECK-NEXT: "mangledTypeName": "n/a - deprecated",
|
|
// CHECK-NEXT: "isStatic": "false",
|
|
// CHECK-NEXT: "isComputed": "false",
|
|
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
|
// CHECK-NEXT: "line": 30,
|
|
// CHECK-NEXT: "valueKind": "Tuple",
|
|
// CHECK-NEXT: "value": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT:]
|