mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[Compile Time Constant Extraction] Print desugared arrays, dictionaries, optionals
Resolves rdar://103187206
This commit is contained in:
@@ -6445,7 +6445,7 @@ public:
|
||||
}
|
||||
|
||||
void visitArraySliceType(ArraySliceType *T) {
|
||||
if (Options.AlwaysDesugarDictionaryTypes) {
|
||||
if (Options.AlwaysDesugarArraySliceTypes) {
|
||||
visit(T->getDesugaredType());
|
||||
} else {
|
||||
Printer << "[";
|
||||
|
||||
@@ -63,6 +63,9 @@ std::string toFullyQualifiedTypeNameString(const swift::Type &Type) {
|
||||
swift::PrintOptions Options;
|
||||
Options.FullyQualifiedTypes = true;
|
||||
Options.PreferTypeRepr = true;
|
||||
Options.AlwaysDesugarArraySliceTypes = true;
|
||||
Options.AlwaysDesugarDictionaryTypes = true;
|
||||
Options.AlwaysDesugarOptionalTypes = true;
|
||||
Type.print(OutputStream, Options);
|
||||
OutputStream.flush();
|
||||
return TypeNameOutput;
|
||||
|
||||
22
test/ConstExtraction/ExtractDesugared.swift
Normal file
22
test/ConstExtraction/ExtractDesugared.swift
Normal file
@@ -0,0 +1,22 @@
|
||||
// RUN: %empty-directory(%t)
|
||||
// RUN: echo "[MyProto]" > %t/protocols.json
|
||||
|
||||
// RUN: %target-swift-frontend -typecheck -emit-const-values-path %t/ExtractLiterals.swiftconstvalues -const-gather-protocols-file %t/protocols.json -primary-file %s
|
||||
// RUN: cat %t/ExtractLiterals.swiftconstvalues 2>&1 | %FileCheck %s
|
||||
|
||||
protocol MyProto {}
|
||||
|
||||
public struct CommonSugars : MyProto {
|
||||
let cane: [String] = ["foo", "bar"]
|
||||
let corn: [String: Int] = ["foo" : 1, "bar": 2]
|
||||
let demerara: Bool? = nil
|
||||
}
|
||||
|
||||
// CHECK: "label": "cane",
|
||||
// CHECK-NEXT: "type": "Swift.Array<Swift.String>",
|
||||
|
||||
// CHECK: "label": "corn",
|
||||
// CHECK-NEXT: "type": "Swift.Dictionary<Swift.String, Swift.Int>",
|
||||
|
||||
// CHECK: "label": "demerara",
|
||||
// CHECK-NEXT: "type": "Swift.Optional<Swift.Bool>",
|
||||
@@ -44,7 +44,7 @@ extension String: Foo {}
|
||||
// CHECK-NEXT: "properties": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "array1",
|
||||
// CHECK-NEXT: "type": "[Swift.Int]",
|
||||
// CHECK-NEXT: "type": "Swift.Array<Swift.Int>",
|
||||
// CHECK-NEXT: "isStatic": "false",
|
||||
// CHECK-NEXT: "isComputed": "false",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
||||
@@ -67,7 +67,7 @@ extension String: Foo {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "array2",
|
||||
// CHECK-NEXT: "type": "[ExtractGroups.Foo]",
|
||||
// CHECK-NEXT: "type": "Swift.Array<ExtractGroups.Foo>",
|
||||
// CHECK-NEXT: "isStatic": "false",
|
||||
// CHECK-NEXT: "isComputed": "false",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
||||
@@ -93,7 +93,7 @@ extension String: Foo {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "array3",
|
||||
// CHECK-NEXT: "type": "[ExtractGroups.Bar]",
|
||||
// CHECK-NEXT: "type": "Swift.Array<ExtractGroups.Bar>",
|
||||
// CHECK-NEXT: "isStatic": "false",
|
||||
// CHECK-NEXT: "isComputed": "false",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
||||
@@ -119,7 +119,7 @@ extension String: Foo {}
|
||||
// CHECK-NEXT: "properties": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "dict1",
|
||||
// CHECK-NEXT: "type": "[Swift.String : Swift.Int]",
|
||||
// CHECK-NEXT: "type": "Swift.Dictionary<Swift.String, Swift.Int>",
|
||||
// CHECK-NEXT: "isStatic": "false",
|
||||
// CHECK-NEXT: "isComputed": "false",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
||||
@@ -160,7 +160,7 @@ extension String: Foo {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "dict2",
|
||||
// CHECK-NEXT: "type": "[Swift.Int : [Swift.String]]",
|
||||
// CHECK-NEXT: "type": "Swift.Dictionary<Swift.Int, Swift.Array<Swift.String>>",
|
||||
// CHECK-NEXT: "isStatic": "false",
|
||||
// CHECK-NEXT: "isComputed": "false",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
||||
@@ -209,7 +209,7 @@ extension String: Foo {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "dict3",
|
||||
// CHECK-NEXT: "type": "[Swift.String : ExtractGroups.Foo]",
|
||||
// CHECK-NEXT: "type": "Swift.Dictionary<Swift.String, ExtractGroups.Foo>",
|
||||
// CHECK-NEXT: "isStatic": "false",
|
||||
// CHECK-NEXT: "isComputed": "false",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift",
|
||||
|
||||
@@ -110,7 +110,7 @@ public struct PropertyWrappers : MyProto {
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "bool2",
|
||||
// CHECK-NEXT: "type": "Swift.Bool?",
|
||||
// CHECK-NEXT: "type": "Swift.Optional<Swift.Bool>",
|
||||
// CHECK-NEXT: "isStatic": "false",
|
||||
// CHECK-NEXT: "isComputed": "false",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift",
|
||||
@@ -361,7 +361,7 @@ public struct PropertyWrappers : MyProto {
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "$propertyWrapper1",
|
||||
// CHECK-NEXT: "type": "(Swift.String, Swift.String?)",
|
||||
// CHECK-NEXT: "type": "(Swift.String, Swift.Optional<Swift.String>)",
|
||||
// CHECK-NEXT: "isStatic": "false",
|
||||
// CHECK-NEXT: "isComputed": "true",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift",
|
||||
@@ -486,7 +486,7 @@ public struct PropertyWrappers : MyProto {
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "$propertyWrapper3",
|
||||
// CHECK-NEXT: "type": "(ExtractLiterals.Clamping<Swift.Int>, ExtractLiterals.Clamping<Swift.Int>?)",
|
||||
// CHECK-NEXT: "type": "(ExtractLiterals.Clamping<Swift.Int>, Swift.Optional<ExtractLiterals.Clamping<Swift.Int>>)",
|
||||
// CHECK-NEXT: "isStatic": "false",
|
||||
// CHECK-NEXT: "isComputed": "true",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift",
|
||||
|
||||
@@ -55,7 +55,7 @@ public struct MyFooProviderInferred: FooProvider {
|
||||
// CHECK-NEXT: "properties": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "foos",
|
||||
// CHECK-NEXT: "type": "[ExtractResultBuilders.Foo]",
|
||||
// CHECK-NEXT: "type": "Swift.Array<ExtractResultBuilders.Foo>",
|
||||
// CHECK-NEXT: "isStatic": "true",
|
||||
// CHECK-NEXT: "isComputed": "true",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractResultBuilders.swift",
|
||||
@@ -67,7 +67,7 @@ public struct MyFooProviderInferred: FooProvider {
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "fooTwo",
|
||||
// CHECK-NEXT: "type": "[ExtractResultBuilders.Foo]",
|
||||
// CHECK-NEXT: "type": "Swift.Array<ExtractResultBuilders.Foo>",
|
||||
// CHECK-NEXT: "isStatic": "true",
|
||||
// CHECK-NEXT: "isComputed": "true",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractResultBuilders.swift",
|
||||
@@ -87,7 +87,7 @@ public struct MyFooProviderInferred: FooProvider {
|
||||
// CHECK-NEXT: "properties": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "label": "foos",
|
||||
// CHECK-NEXT: "type": "[ExtractResultBuilders.Foo]",
|
||||
// CHECK-NEXT: "type": "Swift.Array<ExtractResultBuilders.Foo>",
|
||||
// CHECK-NEXT: "isStatic": "true",
|
||||
// CHECK-NEXT: "isComputed": "true",
|
||||
// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractResultBuilders.swift",
|
||||
|
||||
Reference in New Issue
Block a user