[Compile Time Constant Extraction] Print desugared arrays, dictionaries, optionals

Resolves rdar://103187206
This commit is contained in:
Artem Chikin
2023-01-23 17:09:34 -08:00
parent f85deb0008
commit 544dae4713
6 changed files with 38 additions and 13 deletions

View File

@@ -6445,7 +6445,7 @@ public:
}
void visitArraySliceType(ArraySliceType *T) {
if (Options.AlwaysDesugarDictionaryTypes) {
if (Options.AlwaysDesugarArraySliceTypes) {
visit(T->getDesugaredType());
} else {
Printer << "[";

View File

@@ -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;

View 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>",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",